- 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;