browser(webkit): align GTK implementation with Win (#3377)

This commit is contained in:
Yury Semikhatsky 2020-08-10 17:11:24 -07:00 committed by GitHub
parent d76166beca
commit f25449892c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 106 additions and 54 deletions

View file

@ -1,2 +1,2 @@
1324 1325
Changed: yurys@chromium.org Sat Aug 8 00:05:23 GMTST 2020 Changed: yurys@chromium.org Mon Aug 10 17:08:13 PDT 2020

View file

@ -7892,6 +7892,40 @@ index 0000000000000000000000000000000000000000..9f1a0173a5641d6f158d815b8f7b9ea6
+G_END_DECLS +G_END_DECLS
+ +
+#endif +#endif
diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
index 5d01dab5c149cd173e8ef75558f92d98304e960e..80d778b9830e9d91000ce84546fc13d4e0dcee0d 100644
--- a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
+++ b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
@@ -2265,6 +2265,11 @@ void webkitWebViewBaseResetClickCounter(WebKitWebViewBase* webkitWebViewBase)
#endif
}
+WebKit::AcceleratedBackingStore* webkitWebViewBaseGetAcceleratedBackingStore(WebKitWebViewBase* webkitWebViewBase)
+{
+ return webkitWebViewBase->priv->acceleratedBackingStore.get();
+}
+
void webkitWebViewBaseEnterAcceleratedCompositingMode(WebKitWebViewBase* webkitWebViewBase, const LayerTreeContext& layerTreeContext)
{
ASSERT(webkitWebViewBase->priv->acceleratedBackingStore);
diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBasePrivate.h b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBasePrivate.h
index d09aea45d94fb7367ba88fdf8326dea1209d02ce..dac8f3ec62ace87fc82c997feb950733aa59a996 100644
--- a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBasePrivate.h
+++ b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBasePrivate.h
@@ -27,6 +27,7 @@
#pragma once
+#include "AcceleratedBackingStore.h"
#include "APIPageConfiguration.h"
#include "GestureController.h"
#include "InputMethodState.h"
@@ -120,3 +121,5 @@ void webkitWebViewBaseDidLosePointerLock(WebKitWebViewBase*);
void webkitWebViewBaseSetInputMethodContext(WebKitWebViewBase*, WebKitInputMethodContext*);
WebKitInputMethodContext* webkitWebViewBaseGetInputMethodContext(WebKitWebViewBase*);
void webkitWebViewBaseSynthesizeCompositionKeyPress(WebKitWebViewBase*, const String& text, Optional<Vector<WebCore::CompositionUnderline>>&&, Optional<WebKit::EditingRange>&&);
+
+WebKit::AcceleratedBackingStore* webkitWebViewBaseGetAcceleratedBackingStore(WebKitWebViewBase*);
diff --git a/Source/WebKit/UIProcess/API/gtk/webkit2.h b/Source/WebKit/UIProcess/API/gtk/webkit2.h diff --git a/Source/WebKit/UIProcess/API/gtk/webkit2.h b/Source/WebKit/UIProcess/API/gtk/webkit2.h
index c358118360a38c7b462227aa4ab8388bd7942c3e..70bdfbda231b481e8c5ac34fe6d8825f2350d71e 100644 index c358118360a38c7b462227aa4ab8388bd7942c3e..70bdfbda231b481e8c5ac34fe6d8825f2350d71e 100644
--- a/Source/WebKit/UIProcess/API/gtk/webkit2.h --- a/Source/WebKit/UIProcess/API/gtk/webkit2.h
@ -8393,23 +8427,31 @@ index 0f9e8fcde5e5137b687468621ed6f5c54d720a5d..a821adf0c49730c8de93e7adb04be8d1
{ {
NSWindow *window = [m_view window]; NSWindow *window = [m_view window];
diff --git a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp diff --git a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp
index 61e3f6050d7f819a479cf511625320e3f6204ee9..7d3f72ca4e4455209ea2407ad738194985a83bfe 100644 index 61e3f6050d7f819a479cf511625320e3f6204ee9..aa81411bd998ecddb2742f899c177e40352a518c 100644
--- a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp --- a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp
+++ b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp +++ b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp
@@ -37,6 +37,7 @@ @@ -32,13 +32,16 @@
#include "DrawingAreaProxyMessages.h"
#include "LayerTreeContext.h"
#include "UpdateInfo.h"
+#include "WebPageInspectorController.h"
#include "WebPageProxy.h"
#include "WebPreferences.h"
#include "WebProcessProxy.h" #include "WebProcessProxy.h"
#include <WebCore/PlatformDisplay.h> #include <WebCore/PlatformDisplay.h>
#include <WebCore/Region.h> #include <WebCore/Region.h>
+#include <wtf/Vector.h> +#include <wtf/Vector.h>
#if PLATFORM(GTK) #if PLATFORM(GTK)
+#include "WebKitWebViewBasePrivate.h"
#include <gtk/gtk.h> #include <gtk/gtk.h>
@@ -51,6 +52,14 @@ #endif
@@ -51,6 +54,13 @@
#include <d3d11_1.h> #include <d3d11_1.h>
#endif #endif
+#if PLATFORM(WIN) +#if PLATFORM(WIN)
+#include "WebPageInspectorController.h"
+#include <cairo-win32.h> +#include <cairo-win32.h>
+#include <windows.h> +#include <windows.h>
+#include <WebCore/HWndDC.h> +#include <WebCore/HWndDC.h>
@ -8419,7 +8461,7 @@ index 61e3f6050d7f819a479cf511625320e3f6204ee9..7d3f72ca4e4455209ea2407ad7381949
namespace WebKit { namespace WebKit {
using namespace WebCore; using namespace WebCore;
@@ -119,6 +128,10 @@ void DrawingAreaProxyCoordinatedGraphics::paint(BackingStore::PlatformGraphicsCo @@ -119,6 +129,10 @@ void DrawingAreaProxyCoordinatedGraphics::paint(BackingStore::PlatformGraphicsCo
void DrawingAreaProxyCoordinatedGraphics::sizeDidChange() void DrawingAreaProxyCoordinatedGraphics::sizeDidChange()
{ {
@ -8430,7 +8472,7 @@ index 61e3f6050d7f819a479cf511625320e3f6204ee9..7d3f72ca4e4455209ea2407ad7381949
#if USE(DIRECT2D) #if USE(DIRECT2D)
m_backingStore = nullptr; m_backingStore = nullptr;
#endif #endif
@@ -133,6 +146,11 @@ void DrawingAreaProxyCoordinatedGraphics::deviceScaleFactorDidChange() @@ -133,6 +147,11 @@ void DrawingAreaProxyCoordinatedGraphics::deviceScaleFactorDidChange()
backingStoreStateDidChange(RespondImmediately); backingStoreStateDidChange(RespondImmediately);
} }
@ -8442,17 +8484,28 @@ index 61e3f6050d7f819a479cf511625320e3f6204ee9..7d3f72ca4e4455209ea2407ad7381949
void DrawingAreaProxyCoordinatedGraphics::waitForBackingStoreUpdateOnNextPaint() void DrawingAreaProxyCoordinatedGraphics::waitForBackingStoreUpdateOnNextPaint()
{ {
m_hasReceivedFirstUpdate = true; m_hasReceivedFirstUpdate = true;
@@ -238,6 +256,20 @@ void DrawingAreaProxyCoordinatedGraphics::updateAcceleratedCompositingMode(uint6 @@ -238,6 +257,31 @@ void DrawingAreaProxyCoordinatedGraphics::updateAcceleratedCompositingMode(uint6
updateAcceleratedCompositingMode(layerTreeContext); updateAcceleratedCompositingMode(layerTreeContext);
} }
+#if PLATFORM(WIN) +#if !PLATFORM(WPE)
+void DrawingAreaProxyCoordinatedGraphics::captureFrame() +void DrawingAreaProxyCoordinatedGraphics::captureFrame()
+{ +{
+ if (!m_backingStore) + cairo_surface_t* surface = nullptr;
+ if (isInAcceleratedCompositingMode()) {
+#if PLATFORM(GTK)
+ AcceleratedBackingStore* backingStore = webkitWebViewBaseGetAcceleratedBackingStore(WEBKIT_WEB_VIEW_BASE(m_webPageProxy.viewWidget()));
+ if (!backingStore)
+ return; + return;
+ +
+ cairo_surface_t* surface = m_backingStore->surface(); + surface = backingStore->surface();
+#else
+ fprintf(stderr, "captureFrame() is not supported in accelerated compositing mode on this platform.\n");
+#endif
+ } else if (m_backingStore) {
+ surface = m_backingStore->surface();
+ }
+
+ if (!surface) + if (!surface)
+ return; + return;
+ +
@ -8464,7 +8517,7 @@ index 61e3f6050d7f819a479cf511625320e3f6204ee9..7d3f72ca4e4455209ea2407ad7381949
void DrawingAreaProxyCoordinatedGraphics::incorporateUpdate(const UpdateInfo& updateInfo) void DrawingAreaProxyCoordinatedGraphics::incorporateUpdate(const UpdateInfo& updateInfo)
{ {
diff --git a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h diff --git a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h
index d7695088e7cfc4f638f157338754f9f157489749..a5de33bc78961ef820602a70ec8d9c00725db4fd 100644 index d7695088e7cfc4f638f157338754f9f157489749..a79bbb9bdc779e7ea2f6f859329dd6df6908e194 100644
--- a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h --- a/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h
+++ b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h +++ b/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h
@@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
@ -8480,7 +8533,7 @@ index d7695088e7cfc4f638f157338754f9f157489749..a5de33bc78961ef820602a70ec8d9c00
bool isInAcceleratedCompositingMode() const { return !m_layerTreeContext.isEmpty(); } bool isInAcceleratedCompositingMode() const { return !m_layerTreeContext.isEmpty(); }
const LayerTreeContext& layerTreeContext() const { return m_layerTreeContext; } const LayerTreeContext& layerTreeContext() const { return m_layerTreeContext; }
+ void waitForSizeUpdate(Function<void ()>&&); + void waitForSizeUpdate(Function<void ()>&&);
+#if PLATFORM(WIN) +#if !PLATFORM(WPE)
+ void captureFrame(); + void captureFrame();
+#endif +#endif
@ -8603,10 +8656,10 @@ index 59cdfdafab1d85ea3a5aecb3cd2293e6dfb1eb8d..52fe7990b1c18b964ee3cfa9f324e3c2
// The timeout we use when waiting for a DidUpdateGeometry message. // The timeout we use when waiting for a DidUpdateGeometry message.
diff --git a/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.cpp b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.cpp diff --git a/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.cpp b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.cpp
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..0519b7e885163b52a93230d586ad072308c77861 index 0000000000000000000000000000000000000000..5a2d1075e5db34a8e86d882f07ff642e2eb82cce
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.cpp +++ b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.cpp
@@ -0,0 +1,157 @@ @@ -0,0 +1,154 @@
+/* +/*
+ * Copyright (C) 2020 Microsoft Corporation. + * Copyright (C) 2020 Microsoft Corporation.
+ * + *
@ -8644,11 +8697,8 @@ index 0000000000000000000000000000000000000000..0519b7e885163b52a93230d586ad0723
+#include <wtf/RunLoop.h> +#include <wtf/RunLoop.h>
+ +
+#if USE(CAIRO) +#if USE(CAIRO)
+#include "DrawingAreaProxy.h"
+#endif
+
+#if PLATFORM(WIN)
+#include "DrawingAreaProxyCoordinatedGraphics.h" +#include "DrawingAreaProxyCoordinatedGraphics.h"
+#include "DrawingAreaProxy.h"
+#endif +#endif
+ +
+namespace WebKit { +namespace WebKit {
@ -8711,7 +8761,7 @@ index 0000000000000000000000000000000000000000..0519b7e885163b52a93230d586ad0723
+ if (!m_encoder) + if (!m_encoder)
+ return; + return;
+ +
+#if PLATFORM(MAC) || PLATFORM(WIN) +#if !PLATFORM(WPE)
+ scheduleFrameEncoding(); + scheduleFrameEncoding();
+#endif +#endif
+} +}
@ -8728,7 +8778,7 @@ index 0000000000000000000000000000000000000000..0519b7e885163b52a93230d586ad0723
+ m_encoder = nullptr; + m_encoder = nullptr;
+} +}
+ +
+#if PLATFORM(MAC) || PLATFORM(WIN) +#if !PLATFORM(WPE)
+void InspectorScreencastAgent::scheduleFrameEncoding() +void InspectorScreencastAgent::scheduleFrameEncoding()
+{ +{
+ if (!m_encoder) + if (!m_encoder)
@ -8752,7 +8802,7 @@ index 0000000000000000000000000000000000000000..0519b7e885163b52a93230d586ad0723
+} +}
+#endif +#endif
+ +
+#if PLATFORM(WIN) +#if USE(CAIRO) && !PLATFORM(WPE)
+void InspectorScreencastAgent::encodeFrame() +void InspectorScreencastAgent::encodeFrame()
+{ +{
+ if (!m_encoder) + if (!m_encoder)
@ -8766,7 +8816,7 @@ index 0000000000000000000000000000000000000000..0519b7e885163b52a93230d586ad0723
+} // namespace WebKit +} // namespace WebKit
diff --git a/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.h b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.h diff --git a/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.h b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.h
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..85ceb59f9901e956faba5dad5fa08ca11732a27d index 0000000000000000000000000000000000000000..1ff1e813de838a60f4ab030e31b248913260d3b4
--- /dev/null --- /dev/null
+++ b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.h +++ b/Source/WebKit/UIProcess/Inspector/Agents/InspectorScreencastAgent.h
@@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
@ -8835,7 +8885,7 @@ index 0000000000000000000000000000000000000000..85ceb59f9901e956faba5dad5fa08ca1
+ +
+ +
+private: +private:
+#if PLATFORM(MAC) || PLATFORM(WIN) +#if !PLATFORM(WPE)
+ void scheduleFrameEncoding(); + void scheduleFrameEncoding();
+ void encodeFrame(); + void encodeFrame();
+#endif +#endif
@ -12803,7 +12853,7 @@ index 0a7f83d2b7dc63538c8578800e617affc5d3f19d..b31ac558c47b6430b563076741e9d992
UniqueRef<SOAuthorizationCoordinator> m_soAuthorizationCoordinator; UniqueRef<SOAuthorizationCoordinator> m_soAuthorizationCoordinator;
#endif #endif
diff --git a/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp b/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp diff --git a/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp b/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp
index dc0a70b8824afdc7ec3dd1f69f4d9b51942924f6..a7ff849219a504725284022c5fcfddff64a5e27e 100644 index dc0a70b8824afdc7ec3dd1f69f4d9b51942924f6..a4e90dc22fb278864c49c0636964e82f3d0d7193 100644
--- a/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp --- a/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp
+++ b/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp +++ b/Source/WebKit/UIProcess/cairo/BackingStoreCairo.cpp
@@ -27,9 +27,11 @@ @@ -27,9 +27,11 @@
@ -12832,16 +12882,6 @@ index dc0a70b8824afdc7ec3dd1f69f4d9b51942924f6..a7ff849219a504725284022c5fcfddff
void BackingStore::paint(cairo_t* context, const IntRect& rect) void BackingStore::paint(cairo_t* context, const IntRect& rect)
{ {
ASSERT(m_backend); ASSERT(m_backend);
@@ -72,6 +81,9 @@ void BackingStore::paint(cairo_t* context, const IntRect& rect)
cairo_rectangle(context, rect.x(), rect.y(), rect.width(), rect.height());
cairo_fill(context);
cairo_restore(context);
+#if !PLATFORM(WIN)
+ m_webPageProxy.inspectorController().didPaint(m_backend->surface());
+#endif
}
void BackingStore::incorporateUpdate(ShareableBitmap* bitmap, const UpdateInfo& updateInfo)
diff --git a/Source/WebKit/UIProcess/geoclue/GeoclueGeolocationProvider.cpp b/Source/WebKit/UIProcess/geoclue/GeoclueGeolocationProvider.cpp diff --git a/Source/WebKit/UIProcess/geoclue/GeoclueGeolocationProvider.cpp b/Source/WebKit/UIProcess/geoclue/GeoclueGeolocationProvider.cpp
index 411056d43ea764c42bce0403e6c69ddb8b24b04e..86d4e842699a230ce595088b62a29eabea5b6b90 100644 index 411056d43ea764c42bce0403e6c69ddb8b24b04e..86d4e842699a230ce595088b62a29eabea5b6b90 100644
--- a/Source/WebKit/UIProcess/geoclue/GeoclueGeolocationProvider.cpp --- a/Source/WebKit/UIProcess/geoclue/GeoclueGeolocationProvider.cpp
@ -13109,27 +13149,39 @@ index 0000000000000000000000000000000000000000..63ff73901ceb50771820709e91796fb4
+} // namespace API +} // namespace API
+ +
+#endif // ENABLE(REMOTE_INSPECTOR) +#endif // ENABLE(REMOTE_INSPECTOR)
diff --git a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.cpp b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.cpp diff --git a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStore.h b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStore.h
index be19b6007c9c0fbfffb859e40fd34751493fe7d1..ce214fb7e22f8623aff6e2487cecd0272b21c478 100644 index 39aeff71fe05354cf63d3b3701d363642d63aca4..32e96cdd0bdbd8c5dcde43fdf60052ac13a226f7 100644
--- a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.cpp --- a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStore.h
+++ b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.cpp +++ b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStore.h
@@ -31,6 +31,7 @@ @@ -28,6 +28,7 @@
#include "DrawingAreaProxyCoordinatedGraphics.h" #include <wtf/Noncopyable.h>
#include "LayerTreeContext.h"
#include "WebPageProxy.h"
+#include "WebPageInspectorController.h"
#include <WebCore/CairoUtilities.h>
#include <WebCore/PlatformDisplayX11.h>
#include <WebCore/XErrorTrapper.h>
@@ -256,6 +257,8 @@ bool AcceleratedBackingStoreX11::paint(cairo_t* cr, const IntRect& clipRect)
cairo_restore(cr); typedef struct _cairo cairo_t;
+typedef struct _cairo_surface cairo_surface_t;
+ m_webPage.inspectorController().didPaint(m_surface.get()); #if USE(GTK4)
typedef struct _GdkSnapshot GdkSnapshot;
@@ -56,6 +57,8 @@ public:
#else
virtual bool paint(cairo_t*, const WebCore::IntRect&) = 0;
#endif
+ virtual cairo_surface_t* surface() { return nullptr; }
+ +
cairo_surface_flush(m_surface.get()); virtual void realize() { };
virtual void unrealize() { };
virtual bool makeContextCurrent() { return false; }
diff --git a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.h b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.h
index 054e80bd900cf16d69801e8102ca989ff0563e1d..8245d7ed58008dbb6152e55e619e4331d30ae674 100644
--- a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.h
+++ b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreX11.h
@@ -52,6 +52,7 @@ private:
#else
bool paint(cairo_t*, const WebCore::IntRect&) override;
#endif
+ cairo_surface_t* surface() override { return m_surface.get(); }
return true; RefPtr<cairo_surface_t> m_surface;
WebCore::XUniqueDamage m_damage;
diff --git a/Source/WebKit/UIProcess/gtk/InspectorTargetProxyGtk.cpp b/Source/WebKit/UIProcess/gtk/InspectorTargetProxyGtk.cpp diff --git a/Source/WebKit/UIProcess/gtk/InspectorTargetProxyGtk.cpp b/Source/WebKit/UIProcess/gtk/InspectorTargetProxyGtk.cpp
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..8a86cc348bc210b71bb463dcb3057f575ad7c1d3 index 0000000000000000000000000000000000000000..8a86cc348bc210b71bb463dcb3057f575ad7c1d3