WebKit Bugzilla
Attachment 362774 Details for
Bug 194963
: ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194963-20190222155848.patch (text/plain), 8.78 KB, created by
Tim Horton
on 2019-02-22 15:58:49 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Tim Horton
Created:
2019-02-22 15:58:49 PST
Size:
8.78 KB
patch
obsolete
>Subversion Revision: 241950 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 8e793d00f733f8073f2e44115fdb41270b0b65c5..4e565a22ae323dbcd66d08f8dca260b10c43b4d0 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,36 @@ >+2019-02-22 Tim Horton <timothy_horton@apple.com> >+ >+ ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds >+ https://bugs.webkit.org/show_bug.cgi?id=194963 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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 Wenson Hsieh <wenson_hsieh@apple.com> > > Input type "formatSetInlineTextDirection" is dispatched when changing paragraph-level text direction >diff --git a/Source/WebCore/page/Page.cpp b/Source/WebCore/page/Page.cpp >index b02688a4a847d56e0074099177b4da503d754288..c9e87a2c200851cbe64cb2d594657bed0e63bed6 100644 >--- a/Source/WebCore/page/Page.cpp >+++ b/Source/WebCore/page/Page.cpp >@@ -2641,19 +2641,6 @@ void Page::appearanceDidChange() > } > } > >-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) >diff --git a/Source/WebCore/page/Page.h b/Source/WebCore/page/Page.h >index 9464a8ddaf07a543f0b868ab083649caff7204b7..29d28c8f2c0b3b38731f53951e02c6a8be3d1f22 100644 >--- a/Source/WebCore/page/Page.h >+++ b/Source/WebCore/page/Page.h >@@ -413,8 +413,6 @@ public: > > WheelEventDeltaFilter* wheelEventDeltaFilter() { return m_recentWheelEventDeltaFilter.get(); } > PageOverlayController& pageOverlayController() { return *m_pageOverlayController; } >- >- void installedPageOverlaysChanged(); > > #if PLATFORM(MAC) > #if ENABLE(SERVICE_CONTROLS) || ENABLE(TELEPHONE_NUMBER_DETECTION) >diff --git a/Source/WebCore/page/PageOverlayController.cpp b/Source/WebCore/page/PageOverlayController.cpp >index 86a68529581683223cf02cedf865930e7661f5c3..580694c2da23d27c9d9522eb1b9e31ba859fbe50 100644 >--- a/Source/WebCore/page/PageOverlayController.cpp >+++ b/Source/WebCore/page/PageOverlayController.cpp >@@ -65,6 +65,19 @@ void PageOverlayController::createRootLayersIfNeeded() > 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::attachViewOverlayLayers() > void PageOverlayController::detachViewOverlayLayers() > { > m_page.chrome().client().attachViewOverlayGraphicsLayer(nullptr); >- willDetachRootLayer(); > } > > GraphicsLayer* PageOverlayController::documentOverlayRootLayer() const >@@ -192,8 +204,6 @@ void PageOverlayController::installPageOverlay(PageOverlay& overlay, PageOverlay > 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 @@ void PageOverlayController::installPageOverlay(PageOverlay& overlay, PageOverlay > if (fadeMode == PageOverlay::FadeMode::Fade) > overlay.startFadeInAnimation(); > >- m_page.installedPageOverlaysChanged(); >+ installedPageOverlaysChanged(); > } > > void PageOverlayController::uninstallPageOverlay(PageOverlay& overlay, PageOverlay::FadeMode fadeMode) >@@ -222,8 +232,7 @@ void PageOverlayController::uninstallPageOverlay(PageOverlay& overlay, PageOverl > bool removed = m_pageOverlays.removeFirst(&overlay); > ASSERT_UNUSED(removed, removed); > >- updateForceSynchronousScrollLayerPositionUpdates(); >- m_page.installedPageOverlaysChanged(); >+ installedPageOverlaysChanged(); > } > > void PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates() >@@ -272,14 +281,6 @@ GraphicsLayer& PageOverlayController::layerForOverlay(PageOverlay& overlay) cons > 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) { >diff --git a/Source/WebCore/page/PageOverlayController.h b/Source/WebCore/page/PageOverlayController.h >index e61482bbd8a9caaadb75cacc13c7b000fe7e3df3..827b7a1043228fc560b53f29fb281735f36fd667 100644 >--- a/Source/WebCore/page/PageOverlayController.h >+++ b/Source/WebCore/page/PageOverlayController.h >@@ -47,9 +47,6 @@ public: > bool hasDocumentOverlays() const; > bool hasViewOverlays() const; > >- void attachViewOverlayLayers(); >- void detachViewOverlayLayers(); >- > GraphicsLayer& layerWithDocumentOverlays(); > GraphicsLayer& layerWithViewOverlays(); > >@@ -87,7 +84,9 @@ private: > WEBCORE_EXPORT GraphicsLayer* documentOverlayRootLayer() const; > WEBCORE_EXPORT GraphicsLayer* viewOverlayRootLayer() const; > >- void willDetachRootLayer(); >+ void installedPageOverlaysChanged(); >+ void attachViewOverlayLayers(); >+ void detachViewOverlayLayers(); > > void updateSettingsForLayer(GraphicsLayer&); > void updateForceSynchronousScrollLayerPositionUpdates(); >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 0227c99b81d9f7d3acce10e9125c8bd9cea90af5..f6a65cf4df2860ed30694d763a6d18b096a32e6d 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,14 @@ >+2019-02-22 Tim Horton <timothy_horton@apple.com> >+ >+ ProcessSwap.PageOverlayLayerPersistence fails on iOS and in debug builds >+ https://bugs.webkit.org/show_bug.cgi?id=194963 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * 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 Chris Dumez <cdumez@apple.com> > > REGRESSION(PSON) Scroll position is sometimes not restored on history navigation >diff --git a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm >index aad141b7a1189cc9960131f10a10714de80601e1..4dbcc803cde7f6ef0de27c2268434edec1a35a4e 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm >+++ b/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm >@@ -5262,7 +5262,7 @@ static bool hasOverlay(CALayer *layer) > { > __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;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194963
: 362774