[Extra zoom mode] fast/visual-viewport/extrazoom/layout-viewport-after-scrolling...
authorwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 May 2018 21:56:58 +0000 (21:56 +0000)
committerwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 10 May 2018 21:56:58 +0000 (21:56 +0000)
https://bugs.webkit.org/show_bug.cgi?id=185517
<rdar://problem/40112983>

Reviewed by Tim Horton.

Adjusts some existing layout tests — see below for more detail.

* fast/css/extrazoom/viewport-units-shrink-to-fit.html:

Remove calls to wait for the next presentation update which are no longer necessary after r231606.

* fast/viewport/extrazoom/viewport-change-min-device-width.html:

Wait for the next visible content rect update, when the unobscured content rect is guaranteed to be up to date.

* fast/visual-viewport/extrazoom/layout-viewport-after-scrolling-and-resizing.html:

Wait for the next visible content rect update rather than the next presentation update (i.e. remote layer tree
commit). This is because the layout viewport's custom fixed position rect is propagated in the visible content
rect update flow, and ensuring a presentation update is insufficient to guarantee that the layout viewport is up
to date.

* resources/ui-helper.js:
(window.UIHelper.ensureVisibleContentRectUpdate):

Add a new test helper to wait for the next presentation update.

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

LayoutTests/ChangeLog
LayoutTests/fast/css/extrazoom/viewport-units-shrink-to-fit.html
LayoutTests/fast/viewport/extrazoom/viewport-change-min-device-width.html
LayoutTests/fast/visual-viewport/extrazoom/layout-viewport-after-scrolling-and-resizing.html
LayoutTests/resources/ui-helper.js

index 81a3e50..dca4956 100644 (file)
@@ -1,3 +1,33 @@
+2018-05-10  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        [Extra zoom mode] fast/visual-viewport/extrazoom/layout-viewport-after-scrolling-and-resizing.html sometimes fails
+        https://bugs.webkit.org/show_bug.cgi?id=185517
+        <rdar://problem/40112983>
+
+        Reviewed by Tim Horton.
+
+        Adjusts some existing layout tests — see below for more detail.
+
+        * fast/css/extrazoom/viewport-units-shrink-to-fit.html:
+
+        Remove calls to wait for the next presentation update which are no longer necessary after r231606.
+
+        * fast/viewport/extrazoom/viewport-change-min-device-width.html:
+
+        Wait for the next visible content rect update, when the unobscured content rect is guaranteed to be up to date.
+
+        * fast/visual-viewport/extrazoom/layout-viewport-after-scrolling-and-resizing.html:
+
+        Wait for the next visible content rect update rather than the next presentation update (i.e. remote layer tree
+        commit). This is because the layout viewport's custom fixed position rect is propagated in the visible content
+        rect update flow, and ensuring a presentation update is insufficient to guarantee that the layout viewport is up
+        to date.
+
+        * resources/ui-helper.js:
+        (window.UIHelper.ensureVisibleContentRectUpdate):
+
+        Add a new test helper to wait for the next presentation update.
+
 2018-05-10  Matt Baker  <mattbaker@apple.com>
 
         Web Inspector: ASSERT_NOT_REACHED in PageDebuggerAgent::didAddEventListener when page adds attribute event listener
index ce3c5f0..3f308a5 100644 (file)
         jsTestIsAsync = true;
 
         async function runTest() {
-            await UIHelper.ensurePresentationUpdate();
-
             largeElementRectBeforeRemoval = large.getBoundingClientRect();
             mediumElementRectBeforeRemoval = medium.getBoundingClientRect();
             innerWidthBeforeRemoval = innerWidth;
             innerHeightBeforeRemoval = innerHeight;
 
             large.remove();
-            await UIHelper.ensurePresentationUpdate();
 
             mediumElementRectAfterRemoval = medium.getBoundingClientRect();
             innerWidthAfterRemoval = innerWidth;
index ca7b1db..50cd4e9 100644 (file)
@@ -17,7 +17,7 @@
         function logWindowDimensionsAfterSettingViewportContent(content) {
             return new Promise(async resolve => {
                 meta.setAttribute("content", content);
-                await UIHelper.ensurePresentationUpdate();
+                await UIHelper.ensureVisibleContentRectUpdate();
                 debug(`[${meta.getAttribute("content")}] (${innerWidth}, ${innerHeight})`);
                 resolve();
             });
index 30da981..6b57555 100644 (file)
@@ -36,9 +36,7 @@
         async function runTest() {
             jsTestIsAsync = true;
 
-            // FIXME: This works around innerWidth and innerHeight being incorrect (i.e. unadjusted for shrink-to-fit
-            // behavior) in the load event listener of the body. See: https://bugs.webkit.org/show_bug.cgi?id=184788.
-            await UIHelper.ensurePresentationUpdate();
+            await UIHelper.ensureVisibleContentRectUpdate();
 
             topRectBeforeScrolling = document.getElementById("top").getBoundingClientRect();
             bottomRectBeforeScrolling = document.getElementById("bottom").getBoundingClientRect();
@@ -52,7 +50,7 @@
             layoutViewportAfterScrolling = internals.layoutViewportRect();
 
             document.body.style.height = "100px";
-            await UIHelper.ensurePresentationUpdate();
+            await UIHelper.ensureVisibleContentRectUpdate();
 
             topRectAfterShorteningBody = document.getElementById("top").getBoundingClientRect();
             bottomRectAfterShorteningBody = document.getElementById("bottom").getBoundingClientRect();
@@ -60,7 +58,7 @@
 
             finalDocumentHeight = Math.round(innerHeight * 1.5);
             document.body.style.height = `${finalDocumentHeight}px`;
-            await UIHelper.ensurePresentationUpdate();
+            await UIHelper.ensureVisibleContentRectUpdate();
 
             topRectAfterExtendingBody = document.getElementById("top").getBoundingClientRect();
             bottomRectAfterExtendingBody = document.getElementById("bottom").getBoundingClientRect();
index 41579b1..ddc7d14 100644 (file)
@@ -84,6 +84,17 @@ window.UIHelper = class UIHelper {
         });
     }
 
+    static ensureVisibleContentRectUpdate()
+    {
+        if (!this.isWebKit2())
+            return Promise.resolve();
+
+        return new Promise(resolve => {
+            const visibleContentRectUpdateScript = "uiController.doAfterVisibleContentRectUpdate(() => uiController.uiScriptComplete())";
+            testRunner.runUIScript(visibleContentRectUpdateScript, resolve);
+        });
+    }
+
     static activateAndWaitForInputSessionAt(x, y)
     {
         if (!this.isWebKit2() || !this.isIOS())