Unreviewed, rolling out r236138.
authorryanhaddad@apple.com <ryanhaddad@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Sep 2018 17:59:45 +0000 (17:59 +0000)
committerryanhaddad@apple.com <ryanhaddad@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Sep 2018 17:59:45 +0000 (17:59 +0000)
Caused API test and layout test failures on iOS.

Reverted changeset:

"REGRESSION (PSON): White or Black flash occurs when process
swapping on navigation on Mac"
https://bugs.webkit.org/show_bug.cgi?id=189663
https://trac.webkit.org/changeset/236138

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

16 files changed:
Source/WebKit/ChangeLog
Source/WebKit/UIProcess/DrawingAreaProxy.h
Source/WebKit/UIProcess/SuspendedPageProxy.cpp
Source/WebKit/UIProcess/SuspendedPageProxy.h
Source/WebKit/UIProcess/WebPageProxy.cpp
Source/WebKit/UIProcess/WebPageProxy.h
Source/WebKit/UIProcess/WebPageProxy.messages.in
Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h
Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm
Source/WebKit/WebProcess/WebPage/DrawingArea.h
Source/WebKit/WebProcess/WebPage/DrawingArea.messages.in
Source/WebKit/WebProcess/WebPage/WebPage.cpp
Source/WebKit/WebProcess/WebPage/WebPage.h
Source/WebKit/WebProcess/WebPage/WebPage.messages.in
Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h
Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm

index bc62f35..cef685b 100644 (file)
@@ -1,3 +1,16 @@
+2018-09-18  Ryan Haddad  <ryanhaddad@apple.com>
+
+        Unreviewed, rolling out r236138.
+
+        Caused API test and layout test failures on iOS.
+
+        Reverted changeset:
+
+        "REGRESSION (PSON): White or Black flash occurs when process
+        swapping on navigation on Mac"
+        https://bugs.webkit.org/show_bug.cgi?id=189663
+        https://trac.webkit.org/changeset/236138
+
 2018-09-18  Eric Carlson  <eric.carlson@apple.com>
 
         Always log when granting/revoking capture sandbox extensions
index 8dda378..21470bf 100644 (file)
@@ -82,8 +82,6 @@ public:
     void viewExposedRectChangedTimerFired();
 #endif
 
-    virtual void attachInWebProcess() { }
-
     virtual void updateDebugIndicator() { }
 
     virtual void waitForDidUpdateActivityState(ActivityStateChangeID) { }
index d562677..5d1fc5c 100644 (file)
@@ -54,7 +54,6 @@ static const HashSet<IPC::StringReference>& messageNamesToIgnoreWhileSuspended()
         messageNames.get().add("DidDestroyNavigation");
         messageNames.get().add("DidFinishDocumentLoadForFrame");
         messageNames.get().add("DidFinishProgress");
-        messageNames.get().add("DidCompletePageTransition");
         messageNames.get().add("DidFirstLayoutForFrame");
         messageNames.get().add("DidFirstVisuallyNonEmptyLayoutForFrame");
         messageNames.get().add("DidNavigateWithNavigationData");
@@ -110,11 +109,6 @@ void SuspendedPageProxy::destroyWebPageInWebProcess()
     m_page.suspendedPageClosed(*this);
 }
 
-void SuspendedPageProxy::tearDownDrawingAreaInWebProcess()
-{
-    m_process->send(Messages::WebPage::TearDownDrawingAreaForSuspend(), m_page.pageID());
-}
-
 void SuspendedPageProxy::didFinishLoad()
 {
     ASSERT(m_process);
index 7be0856..4921109 100644 (file)
@@ -49,7 +49,6 @@ public:
 
     void webProcessDidClose(WebProcessProxy&);
     void destroyWebPageInWebProcess();
-    void tearDownDrawingAreaInWebProcess();
 
 #if !LOG_DISABLED
     const char* loggingString() const;
index 90d798f..85190cf 100644 (file)
@@ -56,8 +56,8 @@
 #include "AuthenticationDecisionListener.h"
 #include "DataReference.h"
 #include "DownloadProxy.h"
-#include "DrawingAreaMessages.h"
 #include "DrawingAreaProxy.h"
+#include "DrawingAreaProxyMessages.h"
 #include "EventDispatcherMessages.h"
 #include "FrameInfoData.h"
 #include "LoadParameters.h"
@@ -798,9 +798,7 @@ void WebPageProxy::reattachToWebProcess(Ref<WebProcessProxy>&& process, API::Nav
 
     initializeWebPage();
 
-    if (!navigation)
-        pageClient().didRelaunchProcess();
-
+    pageClient().didRelaunchProcess();
     m_drawingArea->waitForBackingStoreUpdateOnNextPaint();
 }
 
@@ -2451,8 +2449,6 @@ void WebPageProxy::receivedNavigationPolicyDecision(PolicyAction policyAction, A
         if (proposedProcess.ptr() != &process()) {
             RELEASE_LOG_IF_ALLOWED(ProcessSwapping, "%p - WebPageProxy::decidePolicyForNavigationAction, swapping process %i with process %i for navigation, reason: %{public}s", this, processIdentifier(), proposedProcess->processIdentifier(), reason.utf8().data());
             LOG(ProcessSwapping, "(ProcessSwapping) Switching from process %i to new process (%i) for navigation %" PRIu64 " '%s'", processIdentifier(), proposedProcess->processIdentifier(), navigation->navigationID(), navigation->loggingString());
-
-            process().send(Messages::WebPage::SetIsSuspended(true), pageID());
             
             RunLoop::main().dispatch([this, protectedThis = makeRef(*this), navigation = makeRef(*navigation), proposedProcess = WTFMove(proposedProcess)]() mutable {
                 continueNavigationInNewProcess(navigation, WTFMove(proposedProcess));
@@ -3449,22 +3445,6 @@ void WebPageProxy::didFinishProgress()
     m_pageLoadState.commitChanges();
 }
 
-void WebPageProxy::didCompletePageTransition(bool isInitialEmptyDocument)
-{
-#if PLATFORM(MAC)
-    if (!m_drawingArea)
-        return;
-
-    // Attach drawing area for the initial empty document only if this is not a process swap.
-    if (isInitialEmptyDocument && m_suspendedPage)
-        return;
-
-    m_drawingArea->attachInWebProcess();
-#else
-    UNUSED_PARAM(isInitialEmptyDocument);
-#endif
-}
-
 void WebPageProxy::setNetworkRequestsInProgress(bool networkRequestsInProgress)
 {
     auto transaction = m_pageLoadState.transaction();
@@ -6187,9 +6167,7 @@ void WebPageProxy::resetStateAfterProcessExited(ProcessTerminationReason termina
 
     m_editorState = EditorState();
 
-    if (terminationReason != ProcessTerminationReason::NavigationSwap)
-        pageClient().processDidExit();
-
+    pageClient().processDidExit();
     pageClient().clearAllEditCommands();
 
     auto resetStateReason = terminationReason == ProcessTerminationReason::NavigationSwap ? ResetStateReason::NavigationSwap : ResetStateReason::WebProcessExited;
@@ -6330,10 +6308,6 @@ WebPageCreationParameters WebPageProxy::creationParameters()
 void WebPageProxy::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
 {
     pageClient().enterAcceleratedCompositingMode(layerTreeContext);
-
-    // We have completed the page transition and can tear down the layers in the suspended process.
-    if (m_suspendedPage)
-        m_suspendedPage->tearDownDrawingAreaInWebProcess();
 }
 
 void WebPageProxy::exitAcceleratedCompositingMode()
index f6ace11..27cb6a2 100644 (file)
@@ -1423,7 +1423,6 @@ private:
     void didStartProgress();
     void didChangeProgress(double);
     void didFinishProgress();
-    void didCompletePageTransition(bool isInitialEmptyDocument);
     void setNetworkRequestsInProgress(bool);
 
     void hasInsecureContent(WebCore::HasInsecureContent&);
index 4cfc7f6..5c48092 100644 (file)
@@ -117,8 +117,6 @@ messages -> WebPageProxy {
     DidFinishProgress()
     DidStartProgress()
 
-    DidCompletePageTransition(bool isInitialEmptyDocument)
-
     SetNetworkRequestsInProgress(bool networkRequestsInProgress)
 
     # Frame lifetime messages
index 08367ca..e4a4447 100644 (file)
@@ -38,8 +38,6 @@ public:
 
 private:
     // DrawingAreaProxy
-    void attachInWebProcess() override;
-
     void deviceScaleFactorDidChange() override;
     void sizeDidChange() override;
     void colorSpaceDidChange() override;
index 84ce267..eb6bdbf 100644 (file)
@@ -53,11 +53,6 @@ TiledCoreAnimationDrawingAreaProxy::~TiledCoreAnimationDrawingAreaProxy()
     m_callbacks.invalidate(CallbackBase::Error::OwnerWasInvalidated);
 }
 
-void TiledCoreAnimationDrawingAreaProxy::attachInWebProcess()
-{
-    m_webPageProxy.process().send(Messages::DrawingArea::Attach(), m_webPageProxy.pageID());
-}
-
 void TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange()
 {
     m_webPageProxy.process().send(Messages::DrawingArea::SetDeviceScaleFactor(m_webPageProxy.deviceScaleFactor()), m_webPageProxy.pageID());
index 4677739..e090b2e 100644 (file)
@@ -151,7 +151,7 @@ public:
     void displayWasRefreshed();
 #endif
 
-    virtual void attach() { };
+    virtual void attachDrawingArea() { };
 
 protected:
     DrawingArea(DrawingAreaType, WebPage&);
index e88cb98..dbfb294 100644 (file)
@@ -45,11 +45,7 @@ messages -> DrawingArea {
     DestroyNativeSurfaceHandleForCompositing() -> (bool handled)
 #endif
 
-#if PLATFORM(MAC)
-    Attach()
-
-#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
+#if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
     DisplayWasRefreshed()
 #endif
-#endif
 }
index 2cf02d6..14769b8 100644 (file)
@@ -657,6 +657,7 @@ void WebPage::reinitializeWebPage(WebPageCreationParameters&& parameters)
         m_drawingArea->updatePreferences(parameters.store);
         m_drawingArea->setPaintingEnabled(true);
     }
+    m_drawingArea->attachDrawingArea();
 
     if (m_activityState != parameters.activityState)
         setActivityState(parameters.activityState, ActivityStateChangeAsynchronous, Vector<CallbackID>());
@@ -2214,7 +2215,7 @@ void WebPage::setLayerTreeStateIsFrozen(bool frozen)
     if (!drawingArea)
         return;
 
-    drawingArea->setLayerTreeStateIsFrozen(frozen || m_isSuspended);
+    drawingArea->setLayerTreeStateIsFrozen(frozen);
 }
 
 void WebPage::callVolatilityCompletionHandlers(bool succeeded)
@@ -2845,7 +2846,7 @@ void WebPage::continueWillSubmitForm(uint64_t frameID, uint64_t listenerID)
 
 void WebPage::didStartPageTransition()
 {
-    setLayerTreeStateIsFrozen(true);
+    m_drawingArea->setLayerTreeStateIsFrozen(true);
 
 #if PLATFORM(MAC)
     bool hasPreviouslyFocusedDueToUserInteraction = m_hasEverFocusedElementDueToUserInteractionSincePageTransition;
@@ -2869,11 +2870,8 @@ void WebPage::didStartPageTransition()
 
 void WebPage::didCompletePageTransition()
 {
-    // FIXME: Layer tree freezing should be managed entirely in the UI process side.
-    setLayerTreeStateIsFrozen(false);
-
-    bool isInitialEmptyDocument = !m_mainFrame;
-    send(Messages::WebPageProxy::DidCompletePageTransition(isInitialEmptyDocument));
+    if (m_drawingArea)
+        m_drawingArea->setLayerTreeStateIsFrozen(false);
 }
 
 void WebPage::show()
@@ -6002,20 +6000,8 @@ void WebPage::setIsSuspended(bool suspended)
         return;
 
     m_isSuspended = suspended;
-
-#if PLATFORM(MAC)
-    // Drawing area is cleared by a message from the UI process.
-    setLayerTreeStateIsFrozen(true);
-#else
-    tearDownDrawingAreaForSuspend();
-#endif
-}
-
-void WebPage::tearDownDrawingAreaForSuspend()
-{
-    if (!m_isSuspended)
-        return;
-    m_drawingArea = nullptr;
+    if (m_isSuspended)
+        m_drawingArea = nullptr;
 }
 
 void WebPage::frameBecameRemote(uint64_t frameID, GlobalFrameIdentifier&& remoteFrameIdentifier, GlobalWindowIdentifier&& remoteWindowIdentifier)
index 2d2e8f5..7af9993 100644 (file)
@@ -1414,7 +1414,6 @@ private:
     void urlSchemeTaskDidComplete(uint64_t handlerIdentifier, uint64_t taskIdentifier, const WebCore::ResourceError&);
 
     void setIsSuspended(bool);
-    void tearDownDrawingAreaForSuspend();
 
     RefPtr<WebImage> snapshotAtSize(const WebCore::IntRect&, const WebCore::IntSize& bitmapSize, SnapshotOptions);
     RefPtr<WebImage> snapshotNode(WebCore::Node&, SnapshotOptions, unsigned maximumPixelCount = std::numeric_limits<unsigned>::max());
index 43d4dbd..6b278f4 100644 (file)
@@ -506,7 +506,6 @@ messages -> WebPage LegacyReceiver {
     URLSchemeTaskDidComplete(uint64_t handlerIdentifier, uint64_t taskIdentifier, WebCore::ResourceError error)
 
     SetIsSuspended(bool suspended)
-    TearDownDrawingAreaForSuspend();
 
 #if HAVE(CFNETWORK_STORAGE_PARTITIONING)
     StorageAccessResponse(bool wasGranted, uint64_t contextId)
index a7ec567..0329b45 100644 (file)
@@ -103,7 +103,7 @@ private:
     void addTransactionCallbackID(CallbackID) override;
     void setShouldScaleViewToFitDocument(bool) override;
 
-    void attach() override;
+    void attachDrawingArea() override;
 
     void adjustTransientZoom(double scale, WebCore::FloatPoint origin) override;
     void commitTransientZoom(double scale, WebCore::FloatPoint origin) override;
index 341796f..b89395a 100644 (file)
@@ -91,6 +91,8 @@ TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea(WebPage& webPage, c
 
     updateLayerHostingContext();
     setColorSpace(parameters.colorSpace);
+
+    attachDrawingArea();
 }
 
 TiledCoreAnimationDrawingArea::~TiledCoreAnimationDrawingArea()
@@ -99,7 +101,7 @@ TiledCoreAnimationDrawingArea::~TiledCoreAnimationDrawingArea()
 }
 
 
-void TiledCoreAnimationDrawingArea::attach()
+void TiledCoreAnimationDrawingArea::attachDrawingArea()
 {
     LayerTreeContext layerTreeContext;
     layerTreeContext.contextID = m_layerHostingContext->contextID();