Title: [246592] trunk/Source/WebKit
Revision
246592
Author
[email protected]
Date
2019-06-19 10:13:25 -0700 (Wed, 19 Jun 2019)

Log Message

[GTK] Page blinks after navigation swipe if it triggered PSON
https://bugs.webkit.org/show_bug.cgi?id=198996

Patch by Alexander Mikhaylenko <[email protected]> on 2019-06-19
Reviewed by Michael Catanzaro.

Disconnect and then reconnect ViewGestureController during process swap
instead of destroying and re-creating it.

* UIProcess/API/gtk/PageClientImpl.cpp:
(WebKit::PageClientImpl::PageClientImpl::processWillSwap): Added.
(WebKit::PageClientImpl::PageClientImpl::processDidExit): Implemented.
* UIProcess/API/gtk/PageClientImpl.h:
* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseWillSwapWebProcess): Added.
Disconnect ViewGestureController if it exists.
(webkitWebViewBaseDidExitWebProcess): Added.
Destroy ViewGestureController.
(webkitWebViewBaseDidRelaunchWebProcess):
Reconnect the ViewGestureController if it exists.
* UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (246591 => 246592)


--- trunk/Source/WebKit/ChangeLog	2019-06-19 16:59:20 UTC (rev 246591)
+++ trunk/Source/WebKit/ChangeLog	2019-06-19 17:13:25 UTC (rev 246592)
@@ -1,3 +1,26 @@
+2019-06-19  Alexander Mikhaylenko  <[email protected]>
+
+        [GTK] Page blinks after navigation swipe if it triggered PSON
+        https://bugs.webkit.org/show_bug.cgi?id=198996
+
+        Reviewed by Michael Catanzaro.
+
+        Disconnect and then reconnect ViewGestureController during process swap
+        instead of destroying and re-creating it.
+
+        * UIProcess/API/gtk/PageClientImpl.cpp:
+        (WebKit::PageClientImpl::PageClientImpl::processWillSwap): Added.
+        (WebKit::PageClientImpl::PageClientImpl::processDidExit): Implemented.
+        * UIProcess/API/gtk/PageClientImpl.h:
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        (webkitWebViewBaseWillSwapWebProcess): Added.
+        Disconnect ViewGestureController if it exists.
+        (webkitWebViewBaseDidExitWebProcess): Added.
+        Destroy ViewGestureController.
+        (webkitWebViewBaseDidRelaunchWebProcess):
+        Reconnect the ViewGestureController if it exists.
+        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
+
 2019-06-19  Takashi Komori  <[email protected]>
 
         [Curl] CurlRequestScheduler doesn't terminate worker thread in a certain situation.

Modified: trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp (246591 => 246592)


--- trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp	2019-06-19 16:59:20 UTC (rev 246591)
+++ trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp	2019-06-19 17:13:25 UTC (rev 246592)
@@ -118,9 +118,14 @@
     return webkitWebViewBaseIsInWindow(WEBKIT_WEB_VIEW_BASE(m_viewWidget));
 }
 
+void PageClientImpl::PageClientImpl::processWillSwap()
+{
+    webkitWebViewBaseWillSwapWebProcess(WEBKIT_WEB_VIEW_BASE(m_viewWidget));
+}
+
 void PageClientImpl::PageClientImpl::processDidExit()
 {
-    notImplemented();
+    webkitWebViewBaseDidExitWebProcess(WEBKIT_WEB_VIEW_BASE(m_viewWidget));
 }
 
 void PageClientImpl::didRelaunchProcess()

Modified: trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.h (246591 => 246592)


--- trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.h	2019-06-19 16:59:20 UTC (rev 246591)
+++ trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.h	2019-06-19 17:13:25 UTC (rev 246592)
@@ -69,6 +69,7 @@
     bool isViewFocused() override;
     bool isViewVisible() override;
     bool isViewInWindow() override;
+    void processWillSwap() override;
     void processDidExit() override;
     void didRelaunchProcess() override;
     void pageClosed() override;

Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp (246591 => 246592)


--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2019-06-19 16:59:20 UTC (rev 246591)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2019-06-19 17:13:25 UTC (rev 246592)
@@ -1700,6 +1700,19 @@
     return webkitWebViewBase->priv->acceleratedBackingStore->makeContextCurrent();
 }
 
+void webkitWebViewBaseWillSwapWebProcess(WebKitWebViewBase* webkitWebViewBase)
+{
+    WebKitWebViewBasePrivate* priv = webkitWebViewBase->priv;
+
+    if (priv->viewGestureController)
+        priv->viewGestureController->disconnectFromProcess();
+}
+
+void webkitWebViewBaseDidExitWebProcess(WebKitWebViewBase* webkitWebViewBase)
+{
+    webkitWebViewBase->priv->viewGestureController = nullptr;
+}
+
 void webkitWebViewBaseDidRelaunchWebProcess(WebKitWebViewBase* webkitWebViewBase)
 {
     // Queue a resize to ensure the new DrawingAreaProxy is resized.
@@ -1706,8 +1719,13 @@
     gtk_widget_queue_resize_no_redraw(GTK_WIDGET(webkitWebViewBase));
 
     WebKitWebViewBasePrivate* priv = webkitWebViewBase->priv;
-    priv->viewGestureController = std::make_unique<WebKit::ViewGestureController>(*priv->pageProxy);
-    priv->viewGestureController->setSwipeGestureEnabled(priv->isBackForwardNavigationGestureEnabled);
+
+    if (priv->viewGestureController)
+        priv->viewGestureController->connectToProcess();
+    else {
+        priv->viewGestureController = std::make_unique<WebKit::ViewGestureController>(*priv->pageProxy);
+        priv->viewGestureController->setSwipeGestureEnabled(priv->isBackForwardNavigationGestureEnabled);
+    }
 }
 
 void webkitWebViewBasePageClosed(WebKitWebViewBase* webkitWebViewBase)

Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBasePrivate.h (246591 => 246592)


--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBasePrivate.h	2019-06-19 16:59:20 UTC (rev 246591)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBasePrivate.h	2019-06-19 17:13:25 UTC (rev 246592)
@@ -71,6 +71,8 @@
 void webkitWebViewBaseUpdateAcceleratedCompositingMode(WebKitWebViewBase*, const WebKit::LayerTreeContext&);
 void webkitWebViewBaseExitAcceleratedCompositingMode(WebKitWebViewBase*);
 bool webkitWebViewBaseMakeGLContextCurrent(WebKitWebViewBase*);
+void webkitWebViewBaseWillSwapWebProcess(WebKitWebViewBase*);
+void webkitWebViewBaseDidExitWebProcess(WebKitWebViewBase*);
 void webkitWebViewBaseDidRelaunchWebProcess(WebKitWebViewBase*);
 void webkitWebViewBasePageClosed(WebKitWebViewBase*);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to