haikuwebkit/LayoutTests/pageoverlay/overlay-remove-reinsert-vie...

87 lines
2.3 KiB
HTML
Raw Permalink Normal View History

Clean up how GraphicsLayer's "inWindow" state is set, and fix some issues with Page Overlays https://bugs.webkit.org/show_bug.cgi?id=167850 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants() walked the RenderLayer tree to set the GraphicsLayer's "inWindow" state. This had the problem of skipping non-primary GraphicsLayers. We also never did this work for page overlay layers. Fix by giving GraphicsLayers a recursive function that sets the inWindow state, and call that from RenderLayerCompositor::setIsInWindow() and PageOverlayController. PageOverlayController also needs to implement tiledBackingUsageChanged so that tiled backings created dynamically get the correct in-window state. Page overlays also had some serious issues in MiniBrowser, in that they disappeared on reload, and on hide/show web view. This was because the overlay root layers were re-parented, but addChild() for each overlay's layer wasn't called. Clean up by replacing willAttachRootLayer() followed by viewOverlayRootLayer()/documentOverlayRootLayer() with single calls that set up the layers, update the inWindow state, and return the layer. Make it possible to dump tile caches in page overlay tests. Make showGraphicsLayers() always dump page overlay layers (source of much confusion). Test: pageoverlay/overlay-remove-reinsert-view.html * page/PageOverlayController.cpp: (WebCore::PageOverlayController::documentOverlayRootLayer): (WebCore::PageOverlayController::viewOverlayRootLayer): (WebCore::PageOverlayController::layerWithDocumentOverlays): (WebCore::PageOverlayController::layerWithViewOverlays): (WebCore::PageOverlayController::tiledBackingUsageChanged): (WebCore::PageOverlayController::willAttachRootLayer): Deleted. * page/PageOverlayController.h: * platform/graphics/GraphicsLayer.cpp: (WebCore::GraphicsLayer::setIsInWindowIncludingDescendants): (WebCore::dumpChildren): * platform/graphics/GraphicsLayer.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers): (WebCore::RenderLayerCompositor::setIsInWindow): (WebCore::RenderLayerCompositor::attachRootLayer): (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): Deleted. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::toLayerTreeFlags): (WebCore::Internals::layerTreeAsText): (WebCore::Internals::pageOverlayLayerTreeAsText): * testing/Internals.h: * testing/Internals.idl: * testing/MockPageOverlayClient.cpp: (WebCore::MockPageOverlayClient::layerTreeAsText): * testing/MockPageOverlayClient.h: Tools: * DumpRenderTree/TestRunner.cpp: (TestRunner::uiScriptDidComplete): Fix an assertion that fires for non-16-bit strings. LayoutTests: * pageoverlay/overlay-large-document-expected.txt: * pageoverlay/overlay-large-document-scrolled-expected.txt: * pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * pageoverlay/overlay-remove-reinsert-view.html: Added. * platform/ios-simulator-wk2/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * platform/mac-wk1/pageoverlay/overlay-remove-reinsert-view-expected.txt: Added. * tiled-drawing/tiled-backing-in-window-expected.txt: Canonical link: https://commits.webkit.org/184886@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211683 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-05 19:18:16 +00:00
<html>
<style>
body {
height: 5000px;
width: 5000px;
}
</style>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
function getWaitForPresentationUpdateUIScript()
{
return `
(function() {
uiController.doAfterPresentationUpdate(function() {
uiController.uiScriptComplete('');
});
})();`
}
function getUnparentUIScript()
{
return `
(function() {
uiController.removeViewFromWindow(function() {
uiController.uiScriptComplete('');
});
})();`
}
function getReinsertUIScript()
{
return `
(function() {
uiController.addViewToWindow(function() {
uiController.uiScriptComplete('');
});
})();`
}
function dumpLayers(outputId)
{
if (window.internals) {
document.getElementById(outputId).innerText = window.internals.pageOverlayLayerTreeAsText(internals.LAYER_TREE_INCLUDES_TILE_CACHES);
}
}
function doTest()
{
if (!window.testRunner || !testRunner.runUIScript)
return;
internals.installMockPageOverlay("document");
internals.installMockPageOverlay("view");
// Waiting for a presentation update is needed to get the document overlay to become tiled.
testRunner.runUIScript(getWaitForPresentationUpdateUIScript(), function(result) {
dumpLayers('before-layers');
testRunner.runUIScript(getUnparentUIScript(), function(result) {
dumpLayers('view-removed-layers');
testRunner.runUIScript(getReinsertUIScript(), function(result) {
dumpLayers('view-reinsertion-layers');
if (window.testRunner)
testRunner.notifyDone();
});
});
});
}
window.addEventListener('load', doTest, false);
</script>
<body>
<h2>Initial layers</h2>
<pre id="before-layers">Layer tree goes here</pre>
<h2>Layers after removal</h2>
<pre id="view-removed-layers">Layer tree goes here</pre>
<h2>Layers after re-insertion</h2>
<pre id="view-reinsertion-layers">Layer tree goes here</pre>
</body>
</html>