[PSON] View gesture snapshot gets taken down early when process-swapping
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 31 Oct 2018 02:27:51 +0000 (02:27 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 31 Oct 2018 02:27:51 +0000 (02:27 +0000)
https://bugs.webkit.org/show_bug.cgi?id=191083
<rdar://problem/45058738>

Reviewed by Alex Christensen.

When process-swapping, we would call WebViewImpl::processDidExit(), which would destroy
the ViewGestureController and thus take down the swipe navigation snapshot before it
should. We now call WebViewImpl::processDidSwap() instead, which does the same thing,
except for destroying the ViewGestureController. As a result, the view snapshot stays
visible as long as it is needed, even in case of process swap.

* UIProcess/Cocoa/WebViewImpl.h:
* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::WebViewImpl::handleProcessSwapOrExit):
(WebKit::WebViewImpl::processWillSwap):
(WebKit::WebViewImpl::processDidExit):
* UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::processWillSwap):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237615 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/Cocoa/WebViewImpl.h
Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm
Source/WebKit/UIProcess/mac/PageClientImplMac.mm

index 465dc9e..577b315 100644 (file)
@@ -1,5 +1,27 @@
 2018-10-30  Chris Dumez  <cdumez@apple.com>
 
+        [PSON] View gesture snapshot gets taken down early when process-swapping
+        https://bugs.webkit.org/show_bug.cgi?id=191083
+        <rdar://problem/45058738>
+
+        Reviewed by Alex Christensen.
+
+        When process-swapping, we would call WebViewImpl::processDidExit(), which would destroy
+        the ViewGestureController and thus take down the swipe navigation snapshot before it
+        should. We now call WebViewImpl::processDidSwap() instead, which does the same thing,
+        except for destroying the ViewGestureController. As a result, the view snapshot stays
+        visible as long as it is needed, even in case of process swap.
+
+        * UIProcess/Cocoa/WebViewImpl.h:
+        * UIProcess/Cocoa/WebViewImpl.mm:
+        (WebKit::WebViewImpl::handleProcessSwapOrExit):
+        (WebKit::WebViewImpl::processWillSwap):
+        (WebKit::WebViewImpl::processDidExit):
+        * UIProcess/mac/PageClientImplMac.mm:
+        (WebKit::PageClientImpl::processWillSwap):
+
+2018-10-30  Chris Dumez  <cdumez@apple.com>
+
         [PSON] WebView renders with incorrect dimensions after back or forward
         https://bugs.webkit.org/show_bug.cgi?id=191071
         <rdar://problem/45058950>
index 8c76dc1..12dca67 100644 (file)
@@ -160,6 +160,7 @@ public:
 
     WebPageProxy& page() { return m_page.get(); }
 
+    void processWillSwap();
     void processDidExit();
     void pageClosed();
     void didRelaunchProcess();
@@ -653,6 +654,8 @@ private:
     void mouseUpInternal(NSEvent *);
     void mouseDraggedInternal(NSEvent *);
 
+    void handleProcessSwapOrExit();
+
     bool mightBeginDragWhileInactive();
     bool mightBeginScrollWhileInactive();
 
index 6c97771..0d9bf59 100644 (file)
@@ -1456,7 +1456,7 @@ NSWindow *WebViewImpl::window()
     return [m_view window];
 }
 
-void WebViewImpl::processDidExit()
+void WebViewImpl::handleProcessSwapOrExit()
 {
     dismissContentRelativeChildWindowsWithAnimation(true);
 
@@ -1464,7 +1464,16 @@ void WebViewImpl::processDidExit()
 
     updateRemoteAccessibilityRegistration(false);
     flushPendingMouseEventCallbacks();
+}
 
+void WebViewImpl::processWillSwap()
+{
+    handleProcessSwapOrExit();
+}
+
+void WebViewImpl::processDidExit()
+{
+    handleProcessSwapOrExit();
     m_gestureController = nullptr;
 }
 
index d62a863..7cc5b2a 100644 (file)
@@ -255,8 +255,7 @@ ColorSpaceData PageClientImpl::colorSpace()
 
 void PageClientImpl::processWillSwap()
 {
-    // FIXME: It didn't really exit.
-    m_impl->processDidExit();
+    m_impl->processWillSwap();
 }
 
 void PageClientImpl::processDidExit()