REGRESSION (iOS 8): Scrollbar can't be hidden when webkit-overflow-scrolling is set...
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Mar 2019 22:00:44 +0000 (22:00 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Mar 2019 22:00:44 +0000 (22:00 +0000)
https://bugs.webkit.org/show_bug.cgi?id=137043
rdar://problem/16595330

Reviewed by Zalan Bujtas.

Source/WebCore:

Plumb horizontalScrollbarHiddenByStyle/verticalScrollbarHiddenByStyle through ScrollableAreaParameters
to the UI process, and use it to set UIScrollView indicators visible or not.

Tests: fast/scrolling/ios/scrollbar-hiding.html:

* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
* page/scrolling/ScrollingCoordinator.cpp:
(WebCore::operator<<):
* page/scrolling/ScrollingCoordinatorTypes.h:
* page/scrolling/ScrollingTreeNode.h:
* page/scrolling/ScrollingTreeOverflowScrollingNode.cpp:
(WebCore::ScrollingTreeOverflowScrollingNode::dumpProperties const):
* page/scrolling/ScrollingTreeScrollingNode.h:
* platform/ScrollableArea.h:
(WebCore::ScrollableArea::horizontalScrollbarHiddenByStyle const):
(WebCore::ScrollableArea::verticalScrollbarHiddenByStyle const):
* rendering/RenderLayer.cpp:
(WebCore::scrollbarHiddenByStyle):
(WebCore::RenderLayer::horizontalScrollbarHiddenByStyle const):
(WebCore::RenderLayer::verticalScrollbarHiddenByStyle const):
* rendering/RenderLayer.h:

Source/WebKit:

Plumb horizontalScrollbarHiddenByStyle/verticalScrollbarHiddenByStyle through ScrollableAreaParameters
to the UI process, and use it to set UIScrollView indicators visible or not.

The scroll snap changes in ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren() fix a bug
where hasChangedProperty(HorizontalSnapOffsets) was nested inside another set of hasChangedProperty()
tests, so would never get called.

* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
(IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
* UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
(WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):

LayoutTests:

Test that dumps the UI-side scrolling tree, showing e.g. "horizontal scrollbar hidden by style"
in the dump.

This test was previously a render tree dump, which did not test whether scrollbars were visible.

* fast/scrolling/ios/scrollbar-hiding-expected.txt:
* fast/scrolling/ios/scrollbar-hiding.html:
* platform/ios/fast/scrolling/ios/scrollbar-hiding-expected.txt: Removed.

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

18 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/scrolling/ios/scrollbar-hiding-expected.txt
LayoutTests/fast/scrolling/ios/scrollbar-hiding.html
LayoutTests/platform/ios/fast/scrolling/ios/scrollbar-hiding-expected.txt [deleted file]
Source/WebCore/ChangeLog
Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp
Source/WebCore/page/scrolling/ScrollingCoordinator.cpp
Source/WebCore/page/scrolling/ScrollingCoordinatorTypes.h
Source/WebCore/page/scrolling/ScrollingTreeNode.h
Source/WebCore/page/scrolling/ScrollingTreeOverflowScrollingNode.cpp
Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h
Source/WebCore/platform/ScrollableArea.h
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/RenderLayer.h
Source/WebCore/rendering/RenderLayerCompositor.cpp
Source/WebKit/ChangeLog
Source/WebKit/Shared/WebCoreArgumentCoders.cpp
Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm

index f7d5b9c..111e2b2 100644 (file)
@@ -1,3 +1,20 @@
+2019-03-23  Simon Fraser  <simon.fraser@apple.com>
+
+        REGRESSION (iOS 8): Scrollbar can't be hidden when webkit-overflow-scrolling is set to touch
+        https://bugs.webkit.org/show_bug.cgi?id=137043
+        rdar://problem/16595330
+
+        Reviewed by Zalan Bujtas.
+
+        Test that dumps the UI-side scrolling tree, showing e.g. "horizontal scrollbar hidden by style"
+        in the dump.
+
+        This test was previously a render tree dump, which did not test whether scrollbars were visible.
+
+        * fast/scrolling/ios/scrollbar-hiding-expected.txt:
+        * fast/scrolling/ios/scrollbar-hiding.html:
+        * platform/ios/fast/scrolling/ios/scrollbar-hiding-expected.txt: Removed.
+
 2019-03-23  Zalan Bujtas  <zalan@apple.com>
 
         [ContentChangeObserver] Taping on a form control should always result in click.
index f24a1a5..aad95c4 100644 (file)
-layer at (0,0) size 800x1600
-  RenderView at (0,0) size 800x600
-layer at (0,0) size 800x1600
-  RenderBlock {HTML} at (0,0) size 800x1600
-    RenderBody {BODY} at (8,8) size 784x1584
-      RenderBlock {DIV} at (0,0) size 442x392
-        RenderBlock {H2} at (0,19) size 442x31
-          RenderText {#text} at (0,1) size 50x28
-            text run at (0,1) width 50: "Both"
-      RenderText {#text} at (0,0) size 0x0
-      RenderBlock {DIV} at (0,396) size 442x392
-        RenderBlock {H2} at (0,19) size 442x31
-          RenderText {#text} at (0,1) size 155x28
-            text run at (0,1) width 155: "Just horizontal"
-      RenderText {#text} at (0,0) size 0x0
-      RenderBlock {DIV} at (0,792) size 442x392
-        RenderBlock {H2} at (0,19) size 442x31
-          RenderText {#text} at (0,1) size 126x28
-            text run at (0,1) width 126: "Just vertical"
-      RenderText {#text} at (0,0) size 0x0
-      RenderBlock {DIV} at (0,1188) size 442x392
-        RenderBlock {H2} at (0,19) size 442x31
-          RenderText {#text} at (0,1) size 125x28
-            text run at (0,1) width 125: "None visible"
-      RenderText {#text} at (0,0) size 0x0
-layer at (28,78) size 402x302 clip at (29,79) size 400x300 scrollWidth 600 scrollHeight 528
-  RenderBlock {DIV} at (20,69) size 402x303 [border: (1px solid #000000)]
-    RenderBlock {DIV} at (1,1) size 600x528
-      RenderText {#text} at (0,2) size 600x524
-        text run at (0,2) width 565: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
-        text run at (0,26) width 587: "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud"
-        text run at (0,50) width 600: "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure"
-        text run at (0,74) width 571: "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
-        text run at (0,98) width 571: "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
-        text run at (0,122) width 191: "mollit anim id est laborum. "
-        text run at (190,122) width 394: "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"
-        text run at (0,146) width 560: "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad"
-        text run at (0,170) width 533: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
-        text run at (0,194) width 576: "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"
-        text run at (0,218) width 599: "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,"
-        text run at (0,242) width 424: "sunt in culpa qui officia deserunt mollit anim id est laborum. "
-        text run at (423,242) width 154: "Lorem ipsum dolor sit"
-        text run at (0,266) width 564: "amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et"
-        text run at (0,290) width 577: "dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco"
-        text run at (0,314) width 511: "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in"
-        text run at (0,338) width 591: "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
-        text run at (0,362) width 592: "sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id"
-        text run at (0,386) width 93: "est laborum. "
-        text run at (92,386) width 447: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
-        text run at (0,410) width 555: "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
-        text run at (0,434) width 561: "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
-        text run at (0,458) width 595: "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore"
-        text run at (0,482) width 599: "eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa"
-        text run at (0,506) width 325: "qui officia deserunt mollit anim id est laborum."
-layer at (28,474) size 402x302 clip at (29,475) size 400x300 scrollWidth 600 scrollHeight 528
-  RenderBlock {DIV} at (20,69) size 402x303 [border: (1px solid #000000)]
-    RenderBlock {DIV} at (1,1) size 600x528
-      RenderText {#text} at (0,2) size 600x524
-        text run at (0,2) width 565: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
-        text run at (0,26) width 587: "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud"
-        text run at (0,50) width 600: "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure"
-        text run at (0,74) width 571: "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
-        text run at (0,98) width 571: "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
-        text run at (0,122) width 191: "mollit anim id est laborum. "
-        text run at (190,122) width 394: "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"
-        text run at (0,146) width 560: "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad"
-        text run at (0,170) width 533: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
-        text run at (0,194) width 576: "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"
-        text run at (0,218) width 599: "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,"
-        text run at (0,242) width 424: "sunt in culpa qui officia deserunt mollit anim id est laborum. "
-        text run at (423,242) width 154: "Lorem ipsum dolor sit"
-        text run at (0,266) width 564: "amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et"
-        text run at (0,290) width 577: "dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco"
-        text run at (0,314) width 511: "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in"
-        text run at (0,338) width 591: "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
-        text run at (0,362) width 592: "sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id"
-        text run at (0,386) width 93: "est laborum. "
-        text run at (92,386) width 447: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
-        text run at (0,410) width 555: "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
-        text run at (0,434) width 561: "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
-        text run at (0,458) width 595: "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore"
-        text run at (0,482) width 599: "eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa"
-        text run at (0,506) width 325: "qui officia deserunt mollit anim id est laborum."
-layer at (28,870) size 402x302 clip at (29,871) size 400x300 scrollWidth 600 scrollHeight 528
-  RenderBlock {DIV} at (20,69) size 402x303 [border: (1px solid #000000)]
-    RenderBlock {DIV} at (1,1) size 600x528
-      RenderText {#text} at (0,2) size 600x524
-        text run at (0,2) width 565: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
-        text run at (0,26) width 587: "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud"
-        text run at (0,50) width 600: "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure"
-        text run at (0,74) width 571: "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
-        text run at (0,98) width 571: "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
-        text run at (0,122) width 191: "mollit anim id est laborum. "
-        text run at (190,122) width 394: "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"
-        text run at (0,146) width 560: "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad"
-        text run at (0,170) width 533: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
-        text run at (0,194) width 576: "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"
-        text run at (0,218) width 599: "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,"
-        text run at (0,242) width 424: "sunt in culpa qui officia deserunt mollit anim id est laborum. "
-        text run at (423,242) width 154: "Lorem ipsum dolor sit"
-        text run at (0,266) width 564: "amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et"
-        text run at (0,290) width 577: "dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco"
-        text run at (0,314) width 511: "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in"
-        text run at (0,338) width 591: "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
-        text run at (0,362) width 592: "sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id"
-        text run at (0,386) width 93: "est laborum. "
-        text run at (92,386) width 447: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
-        text run at (0,410) width 555: "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
-        text run at (0,434) width 561: "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
-        text run at (0,458) width 595: "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore"
-        text run at (0,482) width 599: "eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa"
-        text run at (0,506) width 325: "qui officia deserunt mollit anim id est laborum."
-layer at (28,1266) size 402x302 clip at (29,1267) size 400x300 scrollWidth 600 scrollHeight 528
-  RenderBlock {DIV} at (20,69) size 402x303 [border: (1px solid #000000)]
-    RenderBlock {DIV} at (1,1) size 600x528
-      RenderText {#text} at (0,2) size 600x524
-        text run at (0,2) width 565: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
-        text run at (0,26) width 587: "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud"
-        text run at (0,50) width 600: "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure"
-        text run at (0,74) width 571: "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
-        text run at (0,98) width 571: "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
-        text run at (0,122) width 191: "mollit anim id est laborum. "
-        text run at (190,122) width 394: "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"
-        text run at (0,146) width 560: "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad"
-        text run at (0,170) width 533: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
-        text run at (0,194) width 576: "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"
-        text run at (0,218) width 599: "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,"
-        text run at (0,242) width 424: "sunt in culpa qui officia deserunt mollit anim id est laborum. "
-        text run at (423,242) width 154: "Lorem ipsum dolor sit"
-        text run at (0,266) width 564: "amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et"
-        text run at (0,290) width 577: "dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco"
-        text run at (0,314) width 511: "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in"
-        text run at (0,338) width 591: "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
-        text run at (0,362) width 592: "sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id"
-        text run at (0,386) width 93: "est laborum. "
-        text run at (92,386) width 447: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
-        text run at (0,410) width 555: "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
-        text run at (0,434) width 561: "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
-        text run at (0,458) width 595: "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore"
-        text run at (0,482) width 599: "eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa"
-        text run at (0,506) width 325: "qui officia deserunt mollit anim id est laborum."
+Both
+
+Just horizontal
+
+Just vertical
+
+None visible
+
+(scrolling tree
+  (frame scrolling node
+    (scrollable area size width=800 height=600)
+    (total content size width=800 height=600)
+    (last committed scroll position (0,0))
+    (scrollable area parameters 
+      (horizontal scroll elasticity 1)
+      (vertical scroll elasticity 1)
+      (horizontal scrollbar mode 0)
+      (vertical scrollbar mode 0))
+    (layout viewport (0,0) width=800 height=600)
+    (min layoutViewport origin (0,0))
+    (max layoutViewport origin (0,0))
+    (behavior for fixed 0)
+    (overflow scrolling node
+      (scrollable area size width=200 height=100)
+      (total content size width=400 height=200)
+      (last committed scroll position (0,0))
+      (scrollable area parameters 
+        (horizontal scroll elasticity 1)
+        (vertical scroll elasticity 1)
+        (horizontal scrollbar mode 0)
+        (vertical scrollbar mode 0)
+        (has enabled horizontal scrollbar 1)
+        (has enabled vertical scrollbar 1)))
+    (overflow scrolling node
+      (scrollable area size width=200 height=100)
+      (total content size width=400 height=200)
+      (last committed scroll position (0,0))
+      (scrollable area parameters 
+        (horizontal scroll elasticity 1)
+        (vertical scroll elasticity 1)
+        (horizontal scrollbar mode 0)
+        (vertical scrollbar mode 0)
+        (has enabled horizontal scrollbar 1)
+        (has enabled vertical scrollbar 1)
+        (vertical scrollbar hidden by style 1)))
+    (overflow scrolling node
+      (scrollable area size width=200 height=100)
+      (total content size width=400 height=200)
+      (last committed scroll position (0,0))
+      (scrollable area parameters 
+        (horizontal scroll elasticity 1)
+        (vertical scroll elasticity 1)
+        (horizontal scrollbar mode 0)
+        (vertical scrollbar mode 0)
+        (has enabled horizontal scrollbar 1)
+        (has enabled vertical scrollbar 1)
+        (horizontal scrollbar hidden by style 1)))
+    (overflow scrolling node
+      (scrollable area size width=200 height=100)
+      (total content size width=400 height=200)
+      (last committed scroll position (0,0))
+      (scrollable area parameters 
+        (horizontal scroll elasticity 1)
+        (vertical scroll elasticity 1)
+        (horizontal scrollbar mode 0)
+        (vertical scrollbar mode 0)
+        (has enabled horizontal scrollbar 1)
+        (has enabled vertical scrollbar 1)
+        (horizontal scrollbar hidden by style 1)
+        (vertical scrollbar hidden by style 1)))))
index ed0a438..6cb26d2 100644 (file)
 <!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
 <html>
 <head>
-  <style type="text/css" media="screen">
+    <style>
+        ::-webkit-scrollbar {
+            width: 16px;
+            height: 16px;
+            background-color: silver;
+        }
 
-    ::-webkit-scrollbar {
-        width: 16px;
-        height: 16px;
-        background-color: silver;
-    }
+        ::-webkit-scrollbar-track {
+            -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
+            border-radius: 10px;
+        }
 
-    ::-webkit-scrollbar-track {
-        -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
-        border-radius: 10px;
-    }
+        ::-webkit-scrollbar-thumb {
+            border-radius: 10px;
+            -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
+        }
 
-    ::-webkit-scrollbar-thumb {
-        border-radius: 10px;
-        -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
-    }
-    
-    .container {
-      display: inline-block;
-    }
+        .container {
+            display: inline-block;
+        }
 
-    .overflowing {
-      margin: 20px;
-      font-family: Helvetica;
-      line-height: 150%;
-      height: 300px;
-      width: 400px;
-      border: 1px solid black;
-      overflow: scroll;
-      -webkit-overflow-scrolling: touch;
-    }
-    
-    .contents {
-      width: 150%;
-    }
-    
-    ::-webkit-scrollbar {
-      display: none;
-    }
-    
-    .vertical::-webkit-scrollbar:vertical {
-      display: block;
-    }
+        .overflowing {
+            margin: 20px;
+            height: 100px;
+            width: 200px;
+            border: 1px solid black;
+            overflow: scroll;
+            -webkit-overflow-scrolling: touch;
+        }
 
-    .horizontal::-webkit-scrollbar:horizontal {
-      display: block;
-    }
-    
-  </style>
+        .contents {
+            width: 200%;
+            height: 200%;
+        }
+
+        ::-webkit-scrollbar {
+            display: none;
+        }
+
+        .vertical::-webkit-scrollbar:vertical {
+            display: block;
+        }
+
+        .horizontal::-webkit-scrollbar:horizontal {
+            display: block;
+        }
+    </style>
+    <script>
+        if (window.testRunner) {
+            testRunner.waitUntilDone();
+            testRunner.dumpAsText();
+        }
+
+        function getScrollingTreeUIScript(x, y)
+        {
+            return `(function() {
+                return uiController.scrollingTreeAsText;
+            })();`;
+        }
+
+        function doTest()
+        {
+            if (!testRunner.runUIScript)
+                return
+
+            testRunner.runUIScript(getScrollingTreeUIScript(), function(scrollingTree) {
+                document.getElementById('scrolling-tree').textContent = scrollingTree;
+                testRunner.notifyDone();
+            });
+        }
+        
+        window.addEventListener('load', doTest, false);
+    </script>
 </head>
 <body>
-
   <div class="container">
     <h2>Both</h2>
     <div class="overflowing accelerated horizontal vertical">
       <div class="contents">
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
       </div>
     </div>
   </div>
-
   <div class="container">
     <h2>Just horizontal</h2>
     <div class="overflowing accelerated horizontal">
       <div class="contents">
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
       </div>
     </div>
   </div>
-
   <div class="container">
     <h2>Just vertical</h2>
     <div class="overflowing accelerated vertical">
       <div class="contents">
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
       </div>
     </div>
   </div>
-
   <div class="container">
     <h2>None visible</h2>
     <div class="overflowing accelerated">
       <div class="contents">
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
       </div>
     </div>
   </div>
+<pre id="scrolling-tree"></pre>
 </body>
 </html>
diff --git a/LayoutTests/platform/ios/fast/scrolling/ios/scrollbar-hiding-expected.txt b/LayoutTests/platform/ios/fast/scrolling/ios/scrollbar-hiding-expected.txt
deleted file mode 100644 (file)
index 0c019f0..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-layer at (0,0) size 800x1600
-  RenderView at (0,0) size 800x600
-layer at (0,0) size 800x1600
-  RenderBlock {HTML} at (0,0) size 800x1600
-    RenderBody {BODY} at (8,8) size 784x1584
-      RenderBlock {DIV} at (0,0) size 442x392
-        RenderBlock {H2} at (0,19) size 442x31
-          RenderText {#text} at (0,1) size 50x28
-            text run at (0,1) width 50: "Both"
-      RenderText {#text} at (0,0) size 0x0
-      RenderBlock {DIV} at (0,396) size 442x392
-        RenderBlock {H2} at (0,19) size 442x31
-          RenderText {#text} at (0,1) size 155x28
-            text run at (0,1) width 155: "Just horizontal"
-      RenderText {#text} at (0,0) size 0x0
-      RenderBlock {DIV} at (0,792) size 442x392
-        RenderBlock {H2} at (0,19) size 442x31
-          RenderText {#text} at (0,1) size 126x28
-            text run at (0,1) width 126: "Just vertical"
-      RenderText {#text} at (0,0) size 0x0
-      RenderBlock {DIV} at (0,1188) size 442x392
-        RenderBlock {H2} at (0,19) size 442x31
-          RenderText {#text} at (0,1) size 125x28
-            text run at (0,1) width 125: "None visible"
-      RenderText {#text} at (0,0) size 0x0
-layer at (28,78) size 402x302 clip at (29,79) size 400x300 scrollWidth 600 scrollHeight 528
-  RenderBlock {DIV} at (20,69) size 402x303 [border: (1px solid #000000)]
-    RenderBlock {DIV} at (1,1) size 600x528
-      RenderText {#text} at (0,2) size 600x524
-        text run at (0,2) width 565: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
-        text run at (0,26) width 587: "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud"
-        text run at (0,50) width 600: "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure"
-        text run at (0,74) width 571: "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
-        text run at (0,98) width 571: "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
-        text run at (0,122) width 191: "mollit anim id est laborum. "
-        text run at (190,122) width 394: "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"
-        text run at (0,146) width 560: "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad"
-        text run at (0,170) width 533: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
-        text run at (0,194) width 576: "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"
-        text run at (0,218) width 598: "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,"
-        text run at (0,242) width 424: "sunt in culpa qui officia deserunt mollit anim id est laborum. "
-        text run at (423,242) width 154: "Lorem ipsum dolor sit"
-        text run at (0,266) width 564: "amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et"
-        text run at (0,290) width 577: "dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco"
-        text run at (0,314) width 511: "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in"
-        text run at (0,338) width 590: "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
-        text run at (0,362) width 592: "sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id"
-        text run at (0,386) width 93: "est laborum. "
-        text run at (92,386) width 447: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
-        text run at (0,410) width 555: "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
-        text run at (0,434) width 561: "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
-        text run at (0,458) width 595: "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore"
-        text run at (0,482) width 598: "eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa"
-        text run at (0,506) width 325: "qui officia deserunt mollit anim id est laborum."
-layer at (28,474) size 402x302 clip at (29,475) size 400x300 scrollWidth 600 scrollHeight 528
-  RenderBlock {DIV} at (20,69) size 402x303 [border: (1px solid #000000)]
-    RenderBlock {DIV} at (1,1) size 600x528
-      RenderText {#text} at (0,2) size 600x524
-        text run at (0,2) width 565: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
-        text run at (0,26) width 587: "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud"
-        text run at (0,50) width 600: "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure"
-        text run at (0,74) width 571: "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
-        text run at (0,98) width 571: "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
-        text run at (0,122) width 191: "mollit anim id est laborum. "
-        text run at (190,122) width 394: "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"
-        text run at (0,146) width 560: "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad"
-        text run at (0,170) width 533: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
-        text run at (0,194) width 576: "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"
-        text run at (0,218) width 598: "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,"
-        text run at (0,242) width 424: "sunt in culpa qui officia deserunt mollit anim id est laborum. "
-        text run at (423,242) width 154: "Lorem ipsum dolor sit"
-        text run at (0,266) width 564: "amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et"
-        text run at (0,290) width 577: "dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco"
-        text run at (0,314) width 511: "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in"
-        text run at (0,338) width 590: "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
-        text run at (0,362) width 592: "sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id"
-        text run at (0,386) width 93: "est laborum. "
-        text run at (92,386) width 447: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
-        text run at (0,410) width 555: "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
-        text run at (0,434) width 561: "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
-        text run at (0,458) width 595: "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore"
-        text run at (0,482) width 598: "eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa"
-        text run at (0,506) width 325: "qui officia deserunt mollit anim id est laborum."
-layer at (28,870) size 402x302 clip at (29,871) size 400x300 scrollWidth 600 scrollHeight 528
-  RenderBlock {DIV} at (20,69) size 402x303 [border: (1px solid #000000)]
-    RenderBlock {DIV} at (1,1) size 600x528
-      RenderText {#text} at (0,2) size 600x524
-        text run at (0,2) width 565: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
-        text run at (0,26) width 587: "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud"
-        text run at (0,50) width 600: "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure"
-        text run at (0,74) width 571: "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
-        text run at (0,98) width 571: "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
-        text run at (0,122) width 191: "mollit anim id est laborum. "
-        text run at (190,122) width 394: "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"
-        text run at (0,146) width 560: "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad"
-        text run at (0,170) width 533: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
-        text run at (0,194) width 576: "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"
-        text run at (0,218) width 598: "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,"
-        text run at (0,242) width 424: "sunt in culpa qui officia deserunt mollit anim id est laborum. "
-        text run at (423,242) width 154: "Lorem ipsum dolor sit"
-        text run at (0,266) width 564: "amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et"
-        text run at (0,290) width 577: "dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco"
-        text run at (0,314) width 511: "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in"
-        text run at (0,338) width 590: "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
-        text run at (0,362) width 592: "sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id"
-        text run at (0,386) width 93: "est laborum. "
-        text run at (92,386) width 447: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
-        text run at (0,410) width 555: "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
-        text run at (0,434) width 561: "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
-        text run at (0,458) width 595: "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore"
-        text run at (0,482) width 598: "eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa"
-        text run at (0,506) width 325: "qui officia deserunt mollit anim id est laborum."
-layer at (28,1266) size 402x302 clip at (29,1267) size 400x300 scrollWidth 600 scrollHeight 528
-  RenderBlock {DIV} at (20,69) size 402x303 [border: (1px solid #000000)]
-    RenderBlock {DIV} at (1,1) size 600x528
-      RenderText {#text} at (0,2) size 600x524
-        text run at (0,2) width 565: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
-        text run at (0,26) width 587: "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud"
-        text run at (0,50) width 600: "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure"
-        text run at (0,74) width 571: "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
-        text run at (0,98) width 571: "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
-        text run at (0,122) width 191: "mollit anim id est laborum. "
-        text run at (190,122) width 394: "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"
-        text run at (0,146) width 560: "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad"
-        text run at (0,170) width 533: "minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
-        text run at (0,194) width 576: "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"
-        text run at (0,218) width 598: "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,"
-        text run at (0,242) width 424: "sunt in culpa qui officia deserunt mollit anim id est laborum. "
-        text run at (423,242) width 154: "Lorem ipsum dolor sit"
-        text run at (0,266) width 564: "amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et"
-        text run at (0,290) width 577: "dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco"
-        text run at (0,314) width 511: "laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in"
-        text run at (0,338) width 590: "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur"
-        text run at (0,362) width 592: "sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id"
-        text run at (0,386) width 93: "est laborum. "
-        text run at (92,386) width 447: "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do"
-        text run at (0,410) width 555: "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
-        text run at (0,434) width 561: "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
-        text run at (0,458) width 595: "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore"
-        text run at (0,482) width 598: "eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa"
-        text run at (0,506) width 325: "qui officia deserunt mollit anim id est laborum."
index 67344b0..ca2936d 100644 (file)
@@ -1,3 +1,34 @@
+2019-03-23  Simon Fraser  <simon.fraser@apple.com>
+
+        REGRESSION (iOS 8): Scrollbar can't be hidden when webkit-overflow-scrolling is set to touch
+        https://bugs.webkit.org/show_bug.cgi?id=137043
+        rdar://problem/16595330
+
+        Reviewed by Zalan Bujtas.
+
+        Plumb horizontalScrollbarHiddenByStyle/verticalScrollbarHiddenByStyle through ScrollableAreaParameters
+        to the UI process, and use it to set UIScrollView indicators visible or not.
+
+        Tests: fast/scrolling/ios/scrollbar-hiding.html:
+
+        * page/scrolling/AsyncScrollingCoordinator.cpp:
+        (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
+        * page/scrolling/ScrollingCoordinator.cpp:
+        (WebCore::operator<<):
+        * page/scrolling/ScrollingCoordinatorTypes.h:
+        * page/scrolling/ScrollingTreeNode.h:
+        * page/scrolling/ScrollingTreeOverflowScrollingNode.cpp:
+        (WebCore::ScrollingTreeOverflowScrollingNode::dumpProperties const):
+        * page/scrolling/ScrollingTreeScrollingNode.h:
+        * platform/ScrollableArea.h:
+        (WebCore::ScrollableArea::horizontalScrollbarHiddenByStyle const):
+        (WebCore::ScrollableArea::verticalScrollbarHiddenByStyle const):
+        * rendering/RenderLayer.cpp:
+        (WebCore::scrollbarHiddenByStyle):
+        (WebCore::RenderLayer::horizontalScrollbarHiddenByStyle const):
+        (WebCore::RenderLayer::verticalScrollbarHiddenByStyle const):
+        * rendering/RenderLayer.h:
+
 2019-03-23  Zalan Bujtas  <zalan@apple.com>
 
         [ContentChangeObserver] Add support for observing opacity.
index 41a13df..6f228ff 100644 (file)
@@ -653,6 +653,8 @@ void AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry(Scrolling
     scrollParameters.hasEnabledVerticalScrollbar = verticalScrollbar && verticalScrollbar->enabled();
     scrollParameters.horizontalScrollbarMode = scrollableArea.horizontalScrollbarMode();
     scrollParameters.verticalScrollbarMode = scrollableArea.verticalScrollbarMode();
+    scrollParameters.horizontalScrollbarHiddenByStyle = scrollableArea.horizontalScrollbarHiddenByStyle();
+    scrollParameters.verticalScrollbarHiddenByStyle = scrollableArea.verticalScrollbarHiddenByStyle();
     scrollParameters.useDarkAppearanceForScrollbars = scrollableArea.useDarkAppearanceForScrollbars();
 
     scrollingNode.setScrollableAreaParameters(scrollParameters);
index 2dff55d..235564f 100644 (file)
@@ -435,11 +435,17 @@ TextStream& operator<<(TextStream& ts, ScrollableAreaParameters scrollableAreaPa
     ts.dumpProperty("vertical scroll elasticity", scrollableAreaParameters.verticalScrollElasticity);
     ts.dumpProperty("horizontal scrollbar mode", scrollableAreaParameters.horizontalScrollbarMode);
     ts.dumpProperty("vertical scrollbar mode", scrollableAreaParameters.verticalScrollbarMode);
+
     if (scrollableAreaParameters.hasEnabledHorizontalScrollbar)
         ts.dumpProperty("has enabled horizontal scrollbar", scrollableAreaParameters.hasEnabledHorizontalScrollbar);
     if (scrollableAreaParameters.hasEnabledVerticalScrollbar)
         ts.dumpProperty("has enabled vertical scrollbar", scrollableAreaParameters.hasEnabledVerticalScrollbar);
 
+    if (scrollableAreaParameters.horizontalScrollbarHiddenByStyle)
+        ts.dumpProperty("horizontal scrollbar hidden by style", scrollableAreaParameters.horizontalScrollbarHiddenByStyle);
+    if (scrollableAreaParameters.verticalScrollbarHiddenByStyle)
+        ts.dumpProperty("vertical scrollbar hidden by style", scrollableAreaParameters.verticalScrollbarHiddenByStyle);
+
     return ts;
 }
 
index 0ff5041..0b95e73 100644 (file)
@@ -66,6 +66,9 @@ struct ScrollableAreaParameters {
     bool hasEnabledHorizontalScrollbar { false };
     bool hasEnabledVerticalScrollbar { false };
 
+    bool horizontalScrollbarHiddenByStyle { false };
+    bool verticalScrollbarHiddenByStyle { false };
+
     bool useDarkAppearanceForScrollbars { false };
 
     bool operator==(const ScrollableAreaParameters& other) const
index 8c6eb8b..cb30806 100644 (file)
@@ -41,7 +41,7 @@ class ScrollingStateFixedNode;
 class ScrollingTreeFrameScrollingNode;
 class ScrollingTreeScrollingNode;
 
-class ScrollingTreeNode : public RefCounted<ScrollingTreeNode> {
+class ScrollingTreeNode : public ThreadSafeRefCounted<ScrollingTreeNode> {
     friend class ScrollingTree;
 public:
     virtual ~ScrollingTreeNode();
index 23688b3..9237669 100644 (file)
@@ -43,7 +43,7 @@ ScrollingTreeOverflowScrollingNode::~ScrollingTreeOverflowScrollingNode() = defa
 void ScrollingTreeOverflowScrollingNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const
 {
     ts << "overflow scrolling node";
-    ScrollingTreeNode::dumpProperties(ts, behavior);
+    ScrollingTreeScrollingNode::dumpProperties(ts, behavior);
 }
 
 } // namespace WebCore
index 7f04dea..63be960 100644 (file)
@@ -65,6 +65,9 @@ public:
     const FloatSize& scrollableAreaSize() const { return m_scrollableAreaSize; }
     const FloatSize& totalContentsSize() const { return m_totalContentsSize; }
 
+    bool horizontalScrollbarHiddenByStyle() const { return m_scrollableAreaParameters.horizontalScrollbarHiddenByStyle; }
+    bool verticalScrollbarHiddenByStyle() const { return m_scrollableAreaParameters.verticalScrollbarHiddenByStyle; }
+
 #if ENABLE(CSS_SCROLL_SNAP)
     const Vector<float>& horizontalSnapOffsets() const { return m_snapOffsetsInfo.horizontalSnapOffsets; }
     const Vector<float>& verticalSnapOffsets() const { return m_snapOffsetsInfo.verticalSnapOffsets; }
index 6e26795..2136139 100644 (file)
@@ -110,6 +110,9 @@ public:
     virtual ScrollbarMode horizontalScrollbarMode() const { return ScrollbarAuto; }
     virtual ScrollbarMode verticalScrollbarMode() const { return ScrollbarAuto; }
 
+    virtual bool horizontalScrollbarHiddenByStyle() const { return false; }
+    virtual bool verticalScrollbarHiddenByStyle() const { return false; }
+
     bool inLiveResize() const { return m_inLiveResize; }
     WEBCORE_EXPORT virtual void willStartLiveResize();
     WEBCORE_EXPORT virtual void willEndLiveResize();
index 3431b17..fc519f8 100644 (file)
@@ -3119,6 +3119,26 @@ void RenderLayer::invalidateScrollCornerRect(const IntRect& rect)
         m_resizer->repaintRectangle(rect);
 }
 
+static bool scrollbarHiddenByStyle(Scrollbar* scrollbar)
+{
+    if (!scrollbar || !scrollbar->isCustomScrollbar())
+        return false;
+
+    std::unique_ptr<RenderStyle> scrollbarStyle = static_cast<RenderScrollbar*>(scrollbar)->getScrollbarPseudoStyle(ScrollbarBGPart, PseudoId::Scrollbar);
+
+    return scrollbarStyle && scrollbarStyle->display() == DisplayType::None;
+}
+
+bool RenderLayer::horizontalScrollbarHiddenByStyle() const
+{
+    return scrollbarHiddenByStyle(horizontalScrollbar());
+}
+
+bool RenderLayer::verticalScrollbarHiddenByStyle() const
+{
+    return scrollbarHiddenByStyle(verticalScrollbar());
+}
+
 static inline RenderElement* rendererForScrollbar(RenderLayerModelObject& renderer)
 {
     if (Element* element = renderer.element()) {
index 4ba0df5..2298f6b 100644 (file)
@@ -438,12 +438,16 @@ public:
     bool hasHorizontalScrollbar() const { return horizontalScrollbar(); }
     bool hasVerticalScrollbar() const { return verticalScrollbar(); }
 
+    bool horizontalScrollbarHiddenByStyle() const override;
+    bool verticalScrollbarHiddenByStyle() const override;
+
     // ScrollableArea overrides
     ScrollPosition scrollPosition() const override { return m_scrollPosition; }
 
     Scrollbar* horizontalScrollbar() const override { return m_hBar.get(); }
     Scrollbar* verticalScrollbar() const override { return m_vBar.get(); }
     ScrollableArea* enclosingScrollableArea() const override;
+
     bool isScrollableOrRubberbandable() override;
     bool hasScrollableOrRubberbandableAncestor() override;
     bool useDarkAppearance() const final;
index 8bada2b..e5169e3 100644 (file)
@@ -4428,22 +4428,13 @@ void LegacyWebKitScrollingLayerCoordinator::unregisterAllViewportConstrainedLaye
     m_chromeClient.updateViewportConstrainedLayers(layerMap, { });
 }
 
-static bool scrollbarHasDisplayNone(Scrollbar* scrollbar)
-{
-    if (!scrollbar || !scrollbar->isCustomScrollbar())
-        return false;
-
-    std::unique_ptr<RenderStyle> scrollbarStyle = static_cast<RenderScrollbar*>(scrollbar)->getScrollbarPseudoStyle(ScrollbarBGPart, PseudoId::Scrollbar);
-    return scrollbarStyle && scrollbarStyle->display() == DisplayType::None;
-}
-
 void LegacyWebKitScrollingLayerCoordinator::updateScrollingLayer(RenderLayer& layer)
 {
     auto* backing = layer.backing();
     ASSERT(backing);
 
-    bool allowHorizontalScrollbar = !scrollbarHasDisplayNone(layer.horizontalScrollbar());
-    bool allowVerticalScrollbar = !scrollbarHasDisplayNone(layer.verticalScrollbar());
+    bool allowHorizontalScrollbar = !layer.horizontalScrollbarHiddenByStyle();
+    bool allowVerticalScrollbar = !layer.verticalScrollbarHiddenByStyle();
     m_chromeClient.addOrUpdateScrollingLayer(layer.renderer().element(), backing->scrollContainerLayer()->platformLayer(), backing->scrolledContentsLayer()->platformLayer(),
         layer.reachableTotalContentsSize(), allowHorizontalScrollbar, allowVerticalScrollbar);
 }
index 90d9add..5accbe7 100644 (file)
@@ -1,3 +1,24 @@
+2019-03-23  Simon Fraser  <simon.fraser@apple.com>
+
+        REGRESSION (iOS 8): Scrollbar can't be hidden when webkit-overflow-scrolling is set to touch
+        https://bugs.webkit.org/show_bug.cgi?id=137043
+        rdar://problem/16595330
+
+        Reviewed by Zalan Bujtas.
+
+        Plumb horizontalScrollbarHiddenByStyle/verticalScrollbarHiddenByStyle through ScrollableAreaParameters
+        to the UI process, and use it to set UIScrollView indicators visible or not.
+        
+        The scroll snap changes in ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren() fix a bug
+        where hasChangedProperty(HorizontalSnapOffsets) was nested inside another set of hasChangedProperty()
+        tests, so would never get called.
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
+        (IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
+        * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm:
+        (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren):
+
 2019-03-23  Zalan Bujtas  <zalan@apple.com>
 
         [ContentChangeObserver] Taping on a form control should always result in click.
index d1d1011..d4def8e 100644 (file)
@@ -2099,6 +2099,9 @@ void ArgumentCoder<ScrollableAreaParameters>::encode(Encoder& encoder, const Scr
     encoder << parameters.hasEnabledHorizontalScrollbar;
     encoder << parameters.hasEnabledVerticalScrollbar;
 
+    encoder << parameters.horizontalScrollbarHiddenByStyle;
+    encoder << parameters.verticalScrollbarHiddenByStyle;
+
     encoder << parameters.useDarkAppearanceForScrollbars;
 }
 
@@ -2119,6 +2122,11 @@ bool ArgumentCoder<ScrollableAreaParameters>::decode(Decoder& decoder, Scrollabl
     if (!decoder.decode(params.hasEnabledVerticalScrollbar))
         return false;
 
+    if (!decoder.decode(params.horizontalScrollbarHiddenByStyle))
+        return false;
+    if (!decoder.decode(params.verticalScrollbarHiddenByStyle))
+        return false;
+
     if (!decoder.decode(params.useDarkAppearanceForScrollbars))
         return false;
 
index eeefc50..41e0b3a 100644 (file)
@@ -262,14 +262,31 @@ void ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren(const Scrol
 
             scrollView.contentInset = insets;
         }
+        END_BLOCK_OBJC_EXCEPTIONS
+    }
 
 #if ENABLE(CSS_SCROLL_SNAP)
-        // FIXME: If only one axis snaps in 2D scrolling, the other axis will decelerate fast as well. Is this what we want?
-        if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::HorizontalSnapOffsets) || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::VerticalSnapOffsets))
-            scrollView.decelerationRate = scrollingNode().horizontalSnapOffsets().size() || scrollingNode().verticalSnapOffsets().size() ? UIScrollViewDecelerationRateFast : UIScrollViewDecelerationRateNormal;
+    // FIXME: If only one axis snaps in 2D scrolling, the other axis will decelerate fast as well. Is this what we want?
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::HorizontalSnapOffsets) || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::VerticalSnapOffsets)) {
+        BEGIN_BLOCK_OBJC_EXCEPTIONS
+        UIScrollView *scrollView = (UIScrollView *)[scrollLayer() delegate];
+        ASSERT([scrollView isKindOfClass:[UIScrollView self]]);
+
+        scrollView.decelerationRate = scrollingNode().horizontalSnapOffsets().size() || scrollingNode().verticalSnapOffsets().size() ? UIScrollViewDecelerationRateFast : UIScrollViewDecelerationRateNormal;
 #endif
         END_BLOCK_OBJC_EXCEPTIONS
     }
+
+    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaParams)) {
+        BEGIN_BLOCK_OBJC_EXCEPTIONS
+        UIScrollView *scrollView = (UIScrollView *)[scrollLayer() delegate];
+        ASSERT([scrollView isKindOfClass:[UIScrollView self]]);
+
+        [scrollView setShowsHorizontalScrollIndicator:!scrollingNode().horizontalScrollbarHiddenByStyle()];
+        [scrollView setShowsVerticalScrollIndicator:!scrollingNode().verticalScrollbarHiddenByStyle()];
+
+        END_BLOCK_OBJC_EXCEPTIONS
+    }
 }
 
 void ScrollingTreeScrollingNodeDelegateIOS::repositionScrollingLayers()