Title: [241978] trunk
Revision
241978
Author
[email protected]
Date
2019-02-22 18:38:02 -0800 (Fri, 22 Feb 2019)

Log Message

ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds
https://bugs.webkit.org/show_bug.cgi?id=194963

Reviewed by Dean Jackson.

Source/WebCore:

Tested by existing failing API test.

* page/Page.cpp:
(WebCore::Page::installedPageOverlaysChanged): Deleted.
* page/Page.h:
(WebCore::Page::pageOverlayController):
* page/PageOverlayController.cpp:
(WebCore::PageOverlayController::installedPageOverlaysChanged):
(WebCore::PageOverlayController::detachViewOverlayLayers):
(WebCore::PageOverlayController::installPageOverlay):
(WebCore::PageOverlayController::uninstallPageOverlay):
(WebCore::PageOverlayController::willDetachRootLayer): Deleted.
* page/PageOverlayController.h:
As intended by r240940, move installedPageOverlaysChanged to PageOverlayController.
Also, make it ignore isInWindow state; otherwise, if you install a overlay
and then come into window, nothing installs the root layer. There is no
need for this code to follow in-window state manually anymore since
the DrawingArea and RenderLayerCompositor just hook the layers up when needed.

Make some methods private, and make detachViewOverlayLayers only touch
*view* overlays, so that we don't detach the document-relative root
layer when you drop to having no view overlays. This maintains
existing behavior because nothing was calling PageOverlayController::detachViewOverlayLayers.

Now there are no callers of willDetachRootLayer, so remove it.

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
Do a `contains` check instead of `equals`, because in debug builds we
put the GraphicsLayer pointer in a prefix.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (241977 => 241978)


--- trunk/Source/WebCore/ChangeLog	2019-02-23 02:10:58 UTC (rev 241977)
+++ trunk/Source/WebCore/ChangeLog	2019-02-23 02:38:02 UTC (rev 241978)
@@ -1,3 +1,36 @@
+2019-02-22  Tim Horton  <[email protected]>
+
+        ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds
+        https://bugs.webkit.org/show_bug.cgi?id=194963
+
+        Reviewed by Dean Jackson.
+
+        Tested by existing failing API test.
+
+        * page/Page.cpp:
+        (WebCore::Page::installedPageOverlaysChanged): Deleted.
+        * page/Page.h:
+        (WebCore::Page::pageOverlayController):
+        * page/PageOverlayController.cpp:
+        (WebCore::PageOverlayController::installedPageOverlaysChanged):
+        (WebCore::PageOverlayController::detachViewOverlayLayers):
+        (WebCore::PageOverlayController::installPageOverlay):
+        (WebCore::PageOverlayController::uninstallPageOverlay):
+        (WebCore::PageOverlayController::willDetachRootLayer): Deleted.
+        * page/PageOverlayController.h:
+        As intended by r240940, move installedPageOverlaysChanged to PageOverlayController.
+        Also, make it ignore isInWindow state; otherwise, if you install a overlay
+        and then come into window, nothing installs the root layer. There is no
+        need for this code to follow in-window state manually anymore since
+        the DrawingArea and RenderLayerCompositor just hook the layers up when needed.
+
+        Make some methods private, and make detachViewOverlayLayers only touch
+        *view* overlays, so that we don't detach the document-relative root
+        layer when you drop to having no view overlays. This maintains
+        existing behavior because nothing was calling PageOverlayController::detachViewOverlayLayers.
+
+        Now there are no callers of willDetachRootLayer, so remove it.
+
 2019-02-22  Andy Estes  <[email protected]>
 
         [iOS] Break a reference cycle between PreviewLoader and ResourceLoader

Modified: trunk/Source/WebCore/page/Page.cpp (241977 => 241978)


--- trunk/Source/WebCore/page/Page.cpp	2019-02-23 02:10:58 UTC (rev 241977)
+++ trunk/Source/WebCore/page/Page.cpp	2019-02-23 02:38:02 UTC (rev 241978)
@@ -2641,19 +2641,6 @@
     }
 }
 
-void Page::installedPageOverlaysChanged()
-{
-    if (isInWindow()) {
-        if (pageOverlayController().hasViewOverlays())
-            chrome().client().attachViewOverlayGraphicsLayer(&pageOverlayController().layerWithViewOverlays());
-        else
-            chrome().client().attachViewOverlayGraphicsLayer(nullptr);
-    }
-
-    if (auto* frameView = mainFrame().view())
-        frameView->setNeedsCompositingConfigurationUpdate();
-}
-
 void Page::setUnobscuredSafeAreaInsets(const FloatBoxExtent& insets)
 {
     if (m_unobscuredSafeAreaInsets == insets)

Modified: trunk/Source/WebCore/page/Page.h (241977 => 241978)


--- trunk/Source/WebCore/page/Page.h	2019-02-23 02:10:58 UTC (rev 241977)
+++ trunk/Source/WebCore/page/Page.h	2019-02-23 02:38:02 UTC (rev 241978)
@@ -413,8 +413,6 @@
 
     WheelEventDeltaFilter* wheelEventDeltaFilter() { return m_recentWheelEventDeltaFilter.get(); }
     PageOverlayController& pageOverlayController() { return *m_pageOverlayController; }
-    
-    void installedPageOverlaysChanged();
 
 #if PLATFORM(MAC)
 #if ENABLE(SERVICE_CONTROLS) || ENABLE(TELEPHONE_NUMBER_DETECTION)

Modified: trunk/Source/WebCore/page/PageOverlayController.cpp (241977 => 241978)


--- trunk/Source/WebCore/page/PageOverlayController.cpp	2019-02-23 02:10:58 UTC (rev 241977)
+++ trunk/Source/WebCore/page/PageOverlayController.cpp	2019-02-23 02:38:02 UTC (rev 241978)
@@ -65,6 +65,19 @@
     m_viewOverlayRootLayer->setName("View overlay container");
 }
 
+void PageOverlayController::installedPageOverlaysChanged()
+{
+    if (hasViewOverlays())
+        attachViewOverlayLayers();
+    else
+        detachViewOverlayLayers();
+
+    if (auto* frameView = m_page.mainFrame().view())
+        frameView->setNeedsCompositingConfigurationUpdate();
+
+    updateForceSynchronousScrollLayerPositionUpdates();
+}
+
 bool PageOverlayController::hasDocumentOverlays() const
 {
     for (const auto& overlay : m_pageOverlays) {
@@ -92,7 +105,6 @@
 void PageOverlayController::detachViewOverlayLayers()
 {
     m_page.chrome().client().attachViewOverlayGraphicsLayer(nullptr);
-    willDetachRootLayer();
 }
 
 GraphicsLayer* PageOverlayController::documentOverlayRootLayer() const
@@ -192,8 +204,6 @@
     auto& rawLayer = layer.get();
     m_overlayGraphicsLayers.set(&overlay, WTFMove(layer));
 
-    updateForceSynchronousScrollLayerPositionUpdates();
-
     overlay.setPage(&m_page);
 
     if (FrameView* frameView = m_page.mainFrame().view())
@@ -204,7 +214,7 @@
     if (fadeMode == PageOverlay::FadeMode::Fade)
         overlay.startFadeInAnimation();
 
-    m_page.installedPageOverlaysChanged();
+    installedPageOverlaysChanged();
 }
 
 void PageOverlayController::uninstallPageOverlay(PageOverlay& overlay, PageOverlay::FadeMode fadeMode)
@@ -222,8 +232,7 @@
     bool removed = m_pageOverlays.removeFirst(&overlay);
     ASSERT_UNUSED(removed, removed);
 
-    updateForceSynchronousScrollLayerPositionUpdates();
-    m_page.installedPageOverlaysChanged();
+    installedPageOverlaysChanged();
 }
 
 void PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates()
@@ -272,14 +281,6 @@
     return *m_overlayGraphicsLayers.get(&overlay);
 }
 
-void PageOverlayController::willDetachRootLayer()
-{
-    GraphicsLayer::unparentAndClear(m_documentOverlayRootLayer);
-    GraphicsLayer::unparentAndClear(m_viewOverlayRootLayer);
-
-    m_initialized = false;
-}
-
 void PageOverlayController::didChangeViewSize()
 {
     for (auto& overlayAndLayer : m_overlayGraphicsLayers) {

Modified: trunk/Source/WebCore/page/PageOverlayController.h (241977 => 241978)


--- trunk/Source/WebCore/page/PageOverlayController.h	2019-02-23 02:10:58 UTC (rev 241977)
+++ trunk/Source/WebCore/page/PageOverlayController.h	2019-02-23 02:38:02 UTC (rev 241978)
@@ -47,9 +47,6 @@
     bool hasDocumentOverlays() const;
     bool hasViewOverlays() const;
 
-    void attachViewOverlayLayers();
-    void detachViewOverlayLayers();
-
     GraphicsLayer& layerWithDocumentOverlays();
     GraphicsLayer& layerWithViewOverlays();
 
@@ -87,7 +84,9 @@
     WEBCORE_EXPORT GraphicsLayer* documentOverlayRootLayer() const;
     WEBCORE_EXPORT GraphicsLayer* viewOverlayRootLayer() const;
 
-    void willDetachRootLayer();
+    void installedPageOverlaysChanged();
+    void attachViewOverlayLayers();
+    void detachViewOverlayLayers();
 
     void updateSettingsForLayer(GraphicsLayer&);
     void updateForceSynchronousScrollLayerPositionUpdates();

Modified: trunk/Tools/ChangeLog (241977 => 241978)


--- trunk/Tools/ChangeLog	2019-02-23 02:10:58 UTC (rev 241977)
+++ trunk/Tools/ChangeLog	2019-02-23 02:38:02 UTC (rev 241978)
@@ -1,3 +1,14 @@
+2019-02-22  Tim Horton  <[email protected]>
+
+        ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds
+        https://bugs.webkit.org/show_bug.cgi?id=194963
+
+        Reviewed by Dean Jackson.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
+        Do a `contains` check instead of `equals`, because in debug builds we
+        put the GraphicsLayer pointer in a prefix.
+
 2019-02-22  Wenson Hsieh  <[email protected]>
 
         [iOS] Callout menu overlaps in-page controls when editing a comment in github.com's issue tracker

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm (241977 => 241978)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm	2019-02-23 02:10:58 UTC (rev 241977)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm	2019-02-23 02:38:02 UTC (rev 241978)
@@ -5287,7 +5287,7 @@
 {
     __block bool hasViewOverlay = false;
     traverseLayerTree(layer, ^(CALayer *layer) {
-        if ([layer.name isEqualToString:@"View overlay container"])
+        if ([layer.name containsString:@"View overlay container"])
             hasViewOverlay = true;
     });
     return hasViewOverlay;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to