Title: [240677] trunk
Revision
240677
Author
[email protected]
Date
2019-01-29 13:29:27 -0800 (Tue, 29 Jan 2019)

Log Message

REGRESSION(r240553): [iOS] Crash in ScrollingTree::updateTreeFromStateNode when attempting to log in to icloud.com
https://bugs.webkit.org/show_bug.cgi?id=193907
Source/WebCore:

rdar://problem/47604080

Reviewed by Frédéric Wang.

Recent scrolling tree changes can trigger unparenting and reparenting of subtrees in the
state tree. If a subframe's state tree nodes are unparented, a scrolling tree commit would
show these as nodes being destroyed, which destroyed the tree nodes. When re-parented, the
commit would re-create the tree node, but the state node would only have a subset of the
change flags set, so the new tree node would fail to get all of the state (for example, it
would be missing layers and scrolling geometry).

Fix by ensuring that when we reparent state node subtrees, we set all the change flags
so that the full set of data is sent to the scrolling tree (the UI process, in the case of iOS WK2).
Annoyingly, virtual setAllPropertiesChanged() functions are needed so each state node subclass can
set the right change flags.

This patch also gets rid of m_nodesRemovedSinceLastCommit in the state tree. We can gain the same
information by using copying all of the nodeIDs in m_nodeMap into a HashSet, and removing nodes
as we encounter them in the tree walk.

Rename m_latchedNode to m_latchedNodeID in ScrollingTree, since it's a nodeID, not a node pointer.

Test: compositing/geometry/composited-frame-contents.html

* page/scrolling/ScrollingStateFixedNode.cpp:
(WebCore::ScrollingStateFixedNode::setAllPropertiesChanged):
* page/scrolling/ScrollingStateFixedNode.h:
* page/scrolling/ScrollingStateFrameScrollingNode.cpp:
(WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged):
* page/scrolling/ScrollingStateFrameScrollingNode.h:
* page/scrolling/ScrollingStateNode.cpp:
(WebCore::ScrollingStateNode::setPropertyChanged):
(WebCore::ScrollingStateNode::setAllPropertiesChanged):
* page/scrolling/ScrollingStateNode.h:
(WebCore::ScrollingStateNode::setPropertyChangedBit):
* page/scrolling/ScrollingStateScrollingNode.cpp:
(WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged):
* page/scrolling/ScrollingStateScrollingNode.h:
* page/scrolling/ScrollingStateStickyNode.cpp:
(WebCore::ScrollingStateStickyNode::setAllPropertiesChanged):
* page/scrolling/ScrollingStateStickyNode.h:
* page/scrolling/ScrollingStateTree.cpp:
(WebCore::ScrollingStateTree::insertNode): Add a RELEASE_ASSERT on the type of the node created
if parentID == 0, since mistakes here can associate a ScrollingNodeType::MainFrame node with some
other nodeID which can result in type confusion later.
(WebCore::ScrollingStateTree::nodeWasReattachedRecursive):
(WebCore::ScrollingStateTree::commit):
(WebCore::ScrollingStateTree::willRemoveNode):
(WebCore::ScrollingStateTree::setRemovedNodes): Deleted.
* page/scrolling/ScrollingStateTree.h:
(WebCore::ScrollingStateTree::removedNodes const): Deleted.
* page/scrolling/ScrollingTree.cpp:
(WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
(WebCore::ScrollingTree::commitTreeState):
(WebCore::ScrollingTree::updateTreeFromStateNode):
(WebCore::ScrollingTree::latchedNode):
(WebCore::ScrollingTree::setLatchedNode):
(WebCore::ScrollingTree::clearLatchedNode):
(WebCore::ScrollingTree::scrollingTreeAsText):
(WebCore::ScrollingTree::removeDestroyedNodes): Deleted.
* page/scrolling/ScrollingTree.h:
(WebCore::ScrollingTree::hasLatchedNode const):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::ensureRootLayer): The scroll layer needs a 0,0,0 anchor point so that
setting its position doesn't offset it relative to the center.

Source/WebKit:

Reviewed by Frédéric Wang.

Remove encode/decode of removedNodes.

* Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
(WebKit::RemoteScrollingCoordinatorTransaction::encode const):
(WebKit::RemoteScrollingCoordinatorTransaction::decode):
(WebKit::dump):

LayoutTests:

rdar://problem/47604080

Reviewed by Frédéric Wang.

New ref test for layer positions in composited frames.

New baselines with anchor point on the scroll layer.

* compositing/geometry/composited-frame-contents-expected.html: Added.
* compositing/geometry/composited-frame-contents.html: Added.
* compositing/iframes/become-composited-nested-iframes-expected.txt:
* compositing/iframes/become-overlapped-iframe-expected.txt:
* compositing/iframes/composited-parent-iframe-expected.txt:
* compositing/iframes/connect-compositing-iframe-delayed-expected.txt:
* compositing/iframes/connect-compositing-iframe-expected.txt:
* compositing/iframes/connect-compositing-iframe2-expected.txt:
* compositing/iframes/connect-compositing-iframe3-expected.txt:
* compositing/iframes/enter-compositing-iframe-expected.txt:
* compositing/iframes/iframe-resize-expected.txt:
* compositing/iframes/iframe-size-from-zero-expected.txt:
* compositing/iframes/overlapped-iframe-expected.txt:
* compositing/iframes/overlapped-iframe-iframe-expected.txt:
* compositing/iframes/overlapped-nested-iframes-expected.txt:
* compositing/iframes/page-cache-layer-tree-expected.txt:
* compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt:
* compositing/iframes/resize-from-zero-size-expected.txt:
* compositing/iframes/scrolling-iframe-expected.txt:
* compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt:
* compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt:
* compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt:
* platform/ios-wk2/compositing/iframes/composited-parent-iframe-expected.txt:
* platform/ios-wk2/compositing/iframes/connect-compositing-iframe-delayed-expected.txt:
* platform/ios-wk2/compositing/iframes/connect-compositing-iframe-expected.txt:
* platform/ios-wk2/compositing/iframes/connect-compositing-iframe2-expected.txt:
* platform/ios-wk2/compositing/iframes/connect-compositing-iframe3-expected.txt:
* platform/ios-wk2/compositing/iframes/enter-compositing-iframe-expected.txt:
* platform/ios-wk2/compositing/iframes/iframe-resize-expected.txt:
* platform/ios-wk2/compositing/iframes/leave-compositing-iframe-expected.txt:
* platform/ios-wk2/compositing/iframes/overlapped-iframe-expected.txt:
* platform/ios-wk2/compositing/iframes/page-cache-layer-tree-expected.txt:
* platform/ios-wk2/compositing/iframes/scrolling-iframe-expected.txt:
* platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-expected.txt:
* platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt:
* platform/ios-wk2/compositing/rtl/rtl-iframe-fixed-expected.txt:
* platform/ios-wk2/compositing/rtl/rtl-iframe-relative-expected.txt:
* platform/ios-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt:
* platform/ios-wk2/compositing/visible-rect/iframe-and-layers-expected.txt:
* platform/ios-wk2/scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt:
* platform/ios/compositing/iframes/become-composited-nested-iframes-expected.txt:
* platform/ios/compositing/iframes/become-overlapped-iframe-expected.txt:
* platform/ios/compositing/iframes/invisible-nested-iframe-show-expected.txt:
* platform/ios/compositing/iframes/overlapped-nested-iframes-expected.txt:
* platform/ios/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt:
* platform/ios/compositing/iframes/resizer-expected.txt:
* platform/ios/compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt:
* platform/mac-wk1/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt:
* platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt:
* platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt:
* platform/mac-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt:
* platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt:
* platform/mac/compositing/iframes/resizer-expected.txt:
* platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt:
* scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt:
* tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (240676 => 240677)


--- trunk/LayoutTests/ChangeLog	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/ChangeLog	2019-01-29 21:29:27 UTC (rev 240677)
@@ -1,3 +1,72 @@
+2019-01-29  Simon Fraser  <[email protected]>
+
+        REGRESSION(r240553): [iOS] Crash in ScrollingTree::updateTreeFromStateNode when attempting to log in to icloud.com
+        https://bugs.webkit.org/show_bug.cgi?id=193907
+        rdar://problem/47604080
+
+        Reviewed by Frédéric Wang.
+        
+        New ref test for layer positions in composited frames.
+        
+        New baselines with anchor point on the scroll layer.
+
+        * compositing/geometry/composited-frame-contents-expected.html: Added.
+        * compositing/geometry/composited-frame-contents.html: Added.
+        * compositing/iframes/become-composited-nested-iframes-expected.txt:
+        * compositing/iframes/become-overlapped-iframe-expected.txt:
+        * compositing/iframes/composited-parent-iframe-expected.txt:
+        * compositing/iframes/connect-compositing-iframe-delayed-expected.txt:
+        * compositing/iframes/connect-compositing-iframe-expected.txt:
+        * compositing/iframes/connect-compositing-iframe2-expected.txt:
+        * compositing/iframes/connect-compositing-iframe3-expected.txt:
+        * compositing/iframes/enter-compositing-iframe-expected.txt:
+        * compositing/iframes/iframe-resize-expected.txt:
+        * compositing/iframes/iframe-size-from-zero-expected.txt:
+        * compositing/iframes/overlapped-iframe-expected.txt:
+        * compositing/iframes/overlapped-iframe-iframe-expected.txt:
+        * compositing/iframes/overlapped-nested-iframes-expected.txt:
+        * compositing/iframes/page-cache-layer-tree-expected.txt:
+        * compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt:
+        * compositing/iframes/resize-from-zero-size-expected.txt:
+        * compositing/iframes/scrolling-iframe-expected.txt:
+        * compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt:
+        * compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt:
+        * compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt:
+        * platform/ios-wk2/compositing/iframes/composited-parent-iframe-expected.txt:
+        * platform/ios-wk2/compositing/iframes/connect-compositing-iframe-delayed-expected.txt:
+        * platform/ios-wk2/compositing/iframes/connect-compositing-iframe-expected.txt:
+        * platform/ios-wk2/compositing/iframes/connect-compositing-iframe2-expected.txt:
+        * platform/ios-wk2/compositing/iframes/connect-compositing-iframe3-expected.txt:
+        * platform/ios-wk2/compositing/iframes/enter-compositing-iframe-expected.txt:
+        * platform/ios-wk2/compositing/iframes/iframe-resize-expected.txt:
+        * platform/ios-wk2/compositing/iframes/leave-compositing-iframe-expected.txt:
+        * platform/ios-wk2/compositing/iframes/overlapped-iframe-expected.txt:
+        * platform/ios-wk2/compositing/iframes/page-cache-layer-tree-expected.txt:
+        * platform/ios-wk2/compositing/iframes/scrolling-iframe-expected.txt:
+        * platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-expected.txt:
+        * platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt:
+        * platform/ios-wk2/compositing/rtl/rtl-iframe-fixed-expected.txt:
+        * platform/ios-wk2/compositing/rtl/rtl-iframe-relative-expected.txt:
+        * platform/ios-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt:
+        * platform/ios-wk2/compositing/visible-rect/iframe-and-layers-expected.txt:
+        * platform/ios-wk2/scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt:
+        * platform/ios/compositing/iframes/become-composited-nested-iframes-expected.txt:
+        * platform/ios/compositing/iframes/become-overlapped-iframe-expected.txt:
+        * platform/ios/compositing/iframes/invisible-nested-iframe-show-expected.txt:
+        * platform/ios/compositing/iframes/overlapped-nested-iframes-expected.txt:
+        * platform/ios/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt:
+        * platform/ios/compositing/iframes/resizer-expected.txt:
+        * platform/ios/compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt:
+        * platform/mac-wk1/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt:
+        * platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt:
+        * platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt:
+        * platform/mac-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt:
+        * platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt:
+        * platform/mac/compositing/iframes/resizer-expected.txt:
+        * platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt:
+        * scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt:
+        * tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt:
+
 2019-01-29  Justin Fan  <[email protected]>
 
         [WebGPU] Fix and add validation to WebGPURenderPipeline and MTLVertexDescriptor

Added: trunk/LayoutTests/compositing/geometry/composited-frame-contents-expected.html (0 => 240677)


--- trunk/LayoutTests/compositing/geometry/composited-frame-contents-expected.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/geometry/composited-frame-contents-expected.html	2019-01-29 21:29:27 UTC (rev 240677)
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <style>
+        body {
+            margin: 0;
+        }
+        .container {
+            border: 20px solid blue;
+            padding: 12px;
+            height: 400px;
+            width: 500px;
+            margin: 20px;
+            background-color: orange;
+            outline: 12px solid rgba(0, 0, 0, 0.25);
+        }
+        
+        .frame {
+            height: 100%;
+            width: 100%;
+            background-color: silver;
+            padding: 10px;
+            box-sizing: border-box;
+        }
+        
+        .box {
+            width: 200px;
+            height: 200px;
+            background-color: green;
+        }
+        .scrollbar-obscurer {
+            position: absolute;
+            height: 400px;
+            width: 18px;
+            top: 52px;
+            left: 534px;
+            background-color: gray;
+        }
+    </style>
+</head>
+<body>
+    <div class="container">
+        <div class="frame">
+            <div class="box"></div>
+        </div>
+    </div>
+    <div class="scrollbar-obscurer"></div>
+</body>
+</html>

Added: trunk/LayoutTests/compositing/geometry/composited-frame-contents.html (0 => 240677)


--- trunk/LayoutTests/compositing/geometry/composited-frame-contents.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/geometry/composited-frame-contents.html	2019-01-29 21:29:27 UTC (rev 240677)
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <style>
+        body {
+            margin: 0;
+        }
+        iframe {
+            border: 20px solid blue;
+            padding: 12px;
+            height: 400px;
+            width: 500px;
+            margin: 20px;
+            background-color: orange;
+            outline: 12px solid rgba(0, 0, 0, 0.25);
+        }
+        .scrollbar-obscurer {
+            position: absolute;
+            height: 400px;
+            width: 18px;
+            top: 52px;
+            left: 534px;
+            background-color: gray;
+        }
+    </style>
+    <script>
+        if (window.internals)
+            internals.settings.setAsyncFrameScrollingEnabled(true);
+    </script>
+</head>
+<body>
+    <iframe srcdoc="
+        <style>
+        body {
+            height: 1000px;
+            background-color: silver;
+            margin: 10px;
+        }
+        .box {
+            width: 200px;
+            height: 200px;
+            background-color: green;
+        }
+        
+        </style>
+        <body>
+            <div class=box></div>
+        </body>
+    "></iframe>
+    <div class="scrollbar-obscurer"></div>
+</body>
+</html>

Modified: trunk/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 280.00 200.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -42,6 +43,7 @@
                                           (bounds 250.00 170.00)
                                           (children 1
                                             (GraphicsLayer
+                                              (anchor 0.00 0.00)
                                               (children 1
                                                 (GraphicsLayer
                                                   (anchor 0.00 0.00)
@@ -93,6 +95,7 @@
                   (bounds 280.00 200.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -115,6 +118,7 @@
                                           (bounds 250.00 170.00)
                                           (children 1
                                             (GraphicsLayer
+                                              (anchor 0.00 0.00)
                                               (children 1
                                                 (GraphicsLayer
                                                   (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 305.00 170.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -21,6 +21,7 @@
                   (bounds 285.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -23,6 +23,7 @@
                   (bounds 285.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 285.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 285.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 285.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 285.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/iframe-resize-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/iframe-resize-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/iframe-resize-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 385.00 120.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 285.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 285.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -18,6 +18,7 @@
                   (bounds 300.00 300.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 280.00 200.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -42,6 +43,7 @@
                                           (bounds 250.00 170.00)
                                           (children 1
                                             (GraphicsLayer
+                                              (anchor 0.00 0.00)
                                               (children 1
                                                 (GraphicsLayer
                                                   (anchor 0.00 0.00)
@@ -93,6 +95,7 @@
                   (bounds 280.00 200.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -115,6 +118,7 @@
                                           (bounds 250.00 170.00)
                                           (children 1
                                             (GraphicsLayer
+                                              (anchor 0.00 0.00)
                                               (children 1
                                                 (GraphicsLayer
                                                   (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/page-cache-layer-tree-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/page-cache-layer-tree-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/page-cache-layer-tree-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -27,6 +27,7 @@
                   (bounds 285.00 135.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -77,6 +78,7 @@
                       (bounds 285.00 135.00)
                       (children 1
                         (GraphicsLayer
+                          (anchor 0.00 0.00)
                           (children 1
                             (GraphicsLayer
                               (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -29,6 +29,7 @@
                       (bounds 400.00 300.00)
                       (children 1
                         (GraphicsLayer
+                          (anchor 0.00 0.00)
                           (children 1
                             (GraphicsLayer
                               (anchor 0.00 0.00)
@@ -91,6 +92,7 @@
                       (bounds 400.00 300.00)
                       (children 1
                         (GraphicsLayer
+                          (anchor 0.00 0.00)
                           (children 1
                             (GraphicsLayer
                               (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/resize-from-zero-size-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/resize-from-zero-size-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/resize-from-zero-size-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 400.00 300.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -21,6 +21,7 @@
                   (children 1
                     (GraphicsLayer
                       (position -80.00 -80.00)
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -22,6 +22,7 @@
                   (children 1
                     (GraphicsLayer
                       (position 0.00 -100.00)
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -22,6 +22,7 @@
                   (children 1
                     (GraphicsLayer
                       (position 0.00 -100.00)
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt (240676 => 240677)


--- trunk/LayoutTests/compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -40,6 +40,7 @@
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (visible rect 0.00, 0.00 0.00 x 0.00)
                       (coverage rect 0.00, 0.00 0.00 x 0.00)
                       (intersects coverage rect 0)

Modified: trunk/LayoutTests/platform/ios/compositing/iframes/become-composited-nested-iframes-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios/compositing/iframes/become-composited-nested-iframes-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios/compositing/iframes/become-composited-nested-iframes-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 280.00 200.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -42,6 +43,7 @@
                                           (bounds 250.00 170.00)
                                           (children 1
                                             (GraphicsLayer
+                                              (anchor 0.00 0.00)
                                               (children 1
                                                 (GraphicsLayer
                                                   (anchor 0.00 0.00)
@@ -93,6 +95,7 @@
                   (bounds 280.00 200.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -115,6 +118,7 @@
                                           (bounds 250.00 170.00)
                                           (children 1
                                             (GraphicsLayer
+                                              (anchor 0.00 0.00)
                                               (children 1
                                                 (GraphicsLayer
                                                   (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios/compositing/iframes/become-overlapped-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios/compositing/iframes/become-overlapped-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios/compositing/iframes/become-overlapped-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 320.00 170.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios/compositing/iframes/invisible-nested-iframe-show-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios/compositing/iframes/invisible-nested-iframe-show-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios/compositing/iframes/invisible-nested-iframe-show-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -42,6 +43,7 @@
                                           (bounds 250.00 170.00)
                                           (children 1
                                             (GraphicsLayer
+                                              (anchor 0.00 0.00)
                                               (children 1
                                                 (GraphicsLayer
                                                   (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios/compositing/iframes/overlapped-nested-iframes-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios/compositing/iframes/overlapped-nested-iframes-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios/compositing/iframes/overlapped-nested-iframes-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 280.00 200.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -42,6 +43,7 @@
                                           (bounds 250.00 170.00)
                                           (children 1
                                             (GraphicsLayer
+                                              (anchor 0.00 0.00)
                                               (children 1
                                                 (GraphicsLayer
                                                   (anchor 0.00 0.00)
@@ -93,6 +95,7 @@
                   (bounds 280.00 200.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -115,6 +118,7 @@
                                           (bounds 250.00 170.00)
                                           (children 1
                                             (GraphicsLayer
+                                              (anchor 0.00 0.00)
                                               (children 1
                                                 (GraphicsLayer
                                                   (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -29,6 +29,7 @@
                       (bounds 400.00 300.00)
                       (children 1
                         (GraphicsLayer
+                          (anchor 0.00 0.00)
                           (children 1
                             (GraphicsLayer
                               (anchor 0.00 0.00)
@@ -91,6 +92,7 @@
                       (bounds 400.00 300.00)
                       (children 1
                         (GraphicsLayer
+                          (anchor 0.00 0.00)
                           (children 1
                             (GraphicsLayer
                               (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios/compositing/iframes/resizer-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios/compositing/iframes/resizer-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios/compositing/iframes/resizer-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios/compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios/compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios/compositing/visible-rect/iframe-with-layers-outside-viewport-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -40,6 +40,7 @@
                   (contentsScale 2.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (visible rect 0.00, 0.00 0.00 x 0.00)
                       (coverage rect 0.00, 0.00 0.00 x 0.00)
                       (intersects coverage rect 0)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/composited-parent-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/composited-parent-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/composited-parent-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -21,6 +21,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe-delayed-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe-delayed-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe-delayed-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -23,6 +23,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe2-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe2-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe2-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe3-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe3-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/connect-compositing-iframe3-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/enter-compositing-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/enter-compositing-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/enter-compositing-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/iframe-resize-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/iframe-resize-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/iframe-resize-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 400.00 120.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/leave-compositing-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/leave-compositing-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/leave-compositing-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/overlapped-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/overlapped-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/overlapped-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/page-cache-layer-tree-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/page-cache-layer-tree-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/page-cache-layer-tree-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -27,6 +27,7 @@
                   (bounds 300.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
@@ -77,6 +78,7 @@
                       (bounds 300.00 150.00)
                       (children 1
                         (GraphicsLayer
+                          (anchor 0.00 0.00)
                           (children 1
                             (GraphicsLayer
                               (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/iframes/scrolling-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/iframes/scrolling-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/iframes/scrolling-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -21,6 +21,7 @@
                   (children 1
                     (GraphicsLayer
                       (position -80.00 -80.00)
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -17,6 +17,7 @@
                   (bounds 400.00 400.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -17,6 +17,7 @@
                   (bounds 400.00 400.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (position -600.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-fixed-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-fixed-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-fixed-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -17,6 +17,7 @@
                   (bounds 400.00 400.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-relative-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-relative-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/rtl/rtl-iframe-relative-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -17,6 +17,7 @@
                   (bounds 400.00 400.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -40,6 +40,7 @@
               (contentsScale 2.00)
               (children 1
                 (GraphicsLayer
+                  (anchor 0.00 0.00)
                   (bounds 300.00 150.00)
                   (backingStoreAttached 1)
                   (visible rect 0.00, 0.00 300.00 x 150.00)
@@ -105,6 +106,7 @@
               (contentsScale 2.00)
               (children 1
                 (GraphicsLayer
+                  (anchor 0.00 0.00)
                   (bounds 300.00 150.00)
                   (backingStoreAttached 1)
                   (visible rect 0.00, 0.00 300.00 x 150.00)
@@ -170,6 +172,7 @@
               (contentsScale 2.00)
               (children 1
                 (GraphicsLayer
+                  (anchor 0.00 0.00)
                   (bounds 300.00 150.00)
                   (backingStoreAttached 1)
                   (visible rect 0.00, 0.00 300.00 x 150.00)

Modified: trunk/LayoutTests/platform/ios-wk2/compositing/visible-rect/iframe-and-layers-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/compositing/visible-rect/iframe-and-layers-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/compositing/visible-rect/iframe-and-layers-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -41,6 +41,7 @@
                   (contentsScale 2.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (visible rect 0.00, 0.00 0.00 x 0.00)
                       (coverage rect 0.00, 0.00 300.00 x 150.00)
                       (intersects coverage rect 0)

Modified: trunk/LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/ios-wk2/scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -66,6 +66,7 @@
                   (children 1
                     (GraphicsLayer
                       (position 0.00 -120.00)
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt


(Binary files differ)

Modified: trunk/LayoutTests/platform/mac/compositing/iframes/resizer-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/mac/compositing/iframes/resizer-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/mac/compositing/iframes/resizer-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -20,6 +20,7 @@
                   (bounds 285.00 150.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -41,6 +41,7 @@
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (visible rect 0.00, 0.00 0.00 x 0.00)
                       (coverage rect 0.00, 0.00 285.00 x 135.00)
                       (intersects coverage rect 0)

Modified: trunk/LayoutTests/platform/mac-wk1/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/mac-wk1/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/mac-wk1/compositing/iframes/remove-reinsert-webview-with-iframe-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -25,6 +25,7 @@
                       (bounds 400.00 300.00)
                       (children 1
                         (GraphicsLayer
+                          (anchor 0.00 0.00)
                           (children 1
                             (GraphicsLayer
                               (anchor 0.00 0.00)
@@ -83,6 +84,7 @@
                       (bounds 400.00 300.00)
                       (children 1
                         (GraphicsLayer
+                          (anchor 0.00 0.00)
                           (children 1
                             (GraphicsLayer
                               (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-scroll-repaint-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -25,6 +25,7 @@
                   (children 1
                     (GraphicsLayer
                       (position 0.00 -100.00)
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/mac-wk1/compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -25,6 +25,7 @@
                   (children 1
                     (GraphicsLayer
                       (position 0.00 -100.00)
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/platform/mac-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt (240676 => 240677)


--- trunk/LayoutTests/platform/mac-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/platform/mac-wk2/compositing/tiling/tiled-drawing-async-frame-scrolling-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -49,6 +49,7 @@
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (backingStoreAttached 0)
                       (visible rect 0.00, 0.00 0.00 x 0.00)
                       (coverage rect 0.00, 0.00 285.00 x 135.00)
@@ -154,6 +155,7 @@
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (backingStoreAttached 0)
                       (visible rect 0.00, 0.00 0.00 x 0.00)
                       (coverage rect 0.00, 0.00 285.00 x 135.00)
@@ -259,6 +261,7 @@
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (backingStoreAttached 0)
                       (visible rect 0.00, 0.00 0.00 x 0.00)
                       (coverage rect 0.00, 0.00 285.00 x 135.00)

Modified: trunk/LayoutTests/scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt (240676 => 240677)


--- trunk/LayoutTests/scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/scrollingcoordinator/scrolling-tree/fixed-inside-frame-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -68,6 +68,7 @@
                   (children 1
                     (GraphicsLayer
                       (position 0.00 -120.00)
+                      (anchor 0.00 0.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)

Modified: trunk/LayoutTests/tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt (240676 => 240677)


--- trunk/LayoutTests/tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/LayoutTests/tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt	2019-01-29 21:29:27 UTC (rev 240677)
@@ -45,6 +45,7 @@
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
+                      (anchor 0.00 0.00)
                       (visible rect 0.00, 0.00 0.00 x 0.00)
                       (coverage rect 0.00, 0.00 0.00 x 0.00)
                       (intersects coverage rect 0)

Modified: trunk/Source/WebCore/ChangeLog (240676 => 240677)


--- trunk/Source/WebCore/ChangeLog	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/ChangeLog	2019-01-29 21:29:27 UTC (rev 240677)
@@ -1,3 +1,73 @@
+2019-01-29  Simon Fraser  <[email protected]>
+
+        REGRESSION(r240553): [iOS] Crash in ScrollingTree::updateTreeFromStateNode when attempting to log in to icloud.com
+        https://bugs.webkit.org/show_bug.cgi?id=193907
+        rdar://problem/47604080
+
+        Reviewed by Frédéric Wang.
+
+        Recent scrolling tree changes can trigger unparenting and reparenting of subtrees in the
+        state tree. If a subframe's state tree nodes are unparented, a scrolling tree commit would
+        show these as nodes being destroyed, which destroyed the tree nodes. When re-parented, the
+        commit would re-create the tree node, but the state node would only have a subset of the
+        change flags set, so the new tree node would fail to get all of the state (for example, it
+        would be missing layers and scrolling geometry).
+
+        Fix by ensuring that when we reparent state node subtrees, we set all the change flags
+        so that the full set of data is sent to the scrolling tree (the UI process, in the case of iOS WK2).
+        Annoyingly, virtual setAllPropertiesChanged() functions are needed so each state node subclass can
+        set the right change flags.
+
+        This patch also gets rid of m_nodesRemovedSinceLastCommit in the state tree. We can gain the same
+        information by using copying all of the nodeIDs in m_nodeMap into a HashSet, and removing nodes
+        as we encounter them in the tree walk.
+        
+        Rename m_latchedNode to m_latchedNodeID in ScrollingTree, since it's a nodeID, not a node pointer.
+
+        Test: compositing/geometry/composited-frame-contents.html
+
+        * page/scrolling/ScrollingStateFixedNode.cpp:
+        (WebCore::ScrollingStateFixedNode::setAllPropertiesChanged):
+        * page/scrolling/ScrollingStateFixedNode.h:
+        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
+        (WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged):
+        * page/scrolling/ScrollingStateFrameScrollingNode.h:
+        * page/scrolling/ScrollingStateNode.cpp:
+        (WebCore::ScrollingStateNode::setPropertyChanged):
+        (WebCore::ScrollingStateNode::setAllPropertiesChanged):
+        * page/scrolling/ScrollingStateNode.h:
+        (WebCore::ScrollingStateNode::setPropertyChangedBit):
+        * page/scrolling/ScrollingStateScrollingNode.cpp:
+        (WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged):
+        * page/scrolling/ScrollingStateScrollingNode.h:
+        * page/scrolling/ScrollingStateStickyNode.cpp:
+        (WebCore::ScrollingStateStickyNode::setAllPropertiesChanged):
+        * page/scrolling/ScrollingStateStickyNode.h:
+        * page/scrolling/ScrollingStateTree.cpp:
+        (WebCore::ScrollingStateTree::insertNode): Add a RELEASE_ASSERT on the type of the node created
+        if parentID == 0, since mistakes here can associate a ScrollingNodeType::MainFrame node with some
+        other nodeID which can result in type confusion later.
+        (WebCore::ScrollingStateTree::nodeWasReattachedRecursive):
+        (WebCore::ScrollingStateTree::commit):
+        (WebCore::ScrollingStateTree::willRemoveNode):
+        (WebCore::ScrollingStateTree::setRemovedNodes): Deleted.
+        * page/scrolling/ScrollingStateTree.h:
+        (WebCore::ScrollingStateTree::removedNodes const): Deleted.
+        * page/scrolling/ScrollingTree.cpp:
+        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
+        (WebCore::ScrollingTree::commitTreeState):
+        (WebCore::ScrollingTree::updateTreeFromStateNode):
+        (WebCore::ScrollingTree::latchedNode):
+        (WebCore::ScrollingTree::setLatchedNode):
+        (WebCore::ScrollingTree::clearLatchedNode):
+        (WebCore::ScrollingTree::scrollingTreeAsText):
+        (WebCore::ScrollingTree::removeDestroyedNodes): Deleted.
+        * page/scrolling/ScrollingTree.h:
+        (WebCore::ScrollingTree::hasLatchedNode const):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::ensureRootLayer): The scroll layer needs a 0,0,0 anchor point so that
+        setting its position doesn't offset it relative to the center.
+
 2019-01-29  Justin Fan  <[email protected]>
 
         [WebGPU] Fix and add validation to WebGPURenderPipeline and MTLVertexDescriptor

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp	2019-01-29 21:29:27 UTC (rev 240677)
@@ -58,6 +58,12 @@
     return adoptRef(*new ScrollingStateFixedNode(*this, adoptiveTree));
 }
 
+void ScrollingStateFixedNode::setAllPropertiesChanged()
+{
+    setPropertyChangedBit(ViewportConstraints);
+    ScrollingStateNode::setAllPropertiesChanged();
+}
+
 void ScrollingStateFixedNode::updateConstraints(const FixedPositionViewportConstraints& constraints)
 {
     if (m_constraints == constraints)

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.h (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.h	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.h	2019-01-29 21:29:27 UTC (rev 240677)
@@ -55,6 +55,8 @@
     ScrollingStateFixedNode(ScrollingStateTree&, ScrollingNodeID);
     ScrollingStateFixedNode(const ScrollingStateFixedNode&, ScrollingStateTree&);
 
+    void setAllPropertiesChanged() override;
+
     void reconcileLayerPositionForViewportRect(const LayoutRect& viewportRect, ScrollingLayerPositionAction) override;
 
     void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override;

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp	2019-01-29 21:29:27 UTC (rev 240677)
@@ -94,6 +94,33 @@
     return adoptRef(*new ScrollingStateFrameScrollingNode(*this, adoptiveTree));
 }
 
+void ScrollingStateFrameScrollingNode::setAllPropertiesChanged()
+{
+    setPropertyChangedBit(FrameScaleFactor);
+    setPropertyChangedBit(EventTrackingRegion);
+    setPropertyChangedBit(ReasonsForSynchronousScrolling);
+    setPropertyChangedBit(ScrolledContentsLayer);
+    setPropertyChangedBit(CounterScrollingLayer);
+    setPropertyChangedBit(InsetClipLayer);
+    setPropertyChangedBit(ContentShadowLayer);
+    setPropertyChangedBit(HeaderHeight);
+    setPropertyChangedBit(FooterHeight);
+    setPropertyChangedBit(HeaderLayer);
+    setPropertyChangedBit(FooterLayer);
+    setPropertyChangedBit(VerticalScrollbarLayer);
+    setPropertyChangedBit(HorizontalScrollbarLayer);
+    setPropertyChangedBit(PainterForScrollbar);
+    setPropertyChangedBit(BehaviorForFixedElements);
+    setPropertyChangedBit(TopContentInset);
+    setPropertyChangedBit(FixedElementsLayoutRelativeToFrame);
+    setPropertyChangedBit(VisualViewportEnabled);
+    setPropertyChangedBit(LayoutViewport);
+    setPropertyChangedBit(MinLayoutViewportOrigin);
+    setPropertyChangedBit(MaxLayoutViewportOrigin);
+
+    ScrollingStateScrollingNode::setAllPropertiesChanged();
+}
+
 void ScrollingStateFrameScrollingNode::setFrameScaleFactor(float scaleFactor)
 {
     if (m_frameScaleFactor == scaleFactor)

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h	2019-01-29 21:29:27 UTC (rev 240677)
@@ -145,6 +145,8 @@
     ScrollingStateFrameScrollingNode(ScrollingStateTree&, ScrollingNodeType, ScrollingNodeID);
     ScrollingStateFrameScrollingNode(const ScrollingStateFrameScrollingNode&, ScrollingStateTree&);
 
+    void setAllPropertiesChanged() override;
+
     LayerRepresentation m_counterScrollingLayer;
     LayerRepresentation m_insetClipLayer;
     LayerRepresentation m_contentShadowLayer;

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateNode.cpp (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateNode.cpp	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateNode.cpp	2019-01-29 21:29:27 UTC (rev 240677)
@@ -63,10 +63,17 @@
     if (hasChangedProperty(propertyBit))
         return;
 
-    m_changedProperties |= (static_cast<ChangedProperties>(1) << propertyBit);
+    setPropertyChangedBit(propertyBit);
     m_scrollingStateTree.setHasChangedProperties();
 }
 
+void ScrollingStateNode::setAllPropertiesChanged()
+{
+    setPropertyChangedBit(ScrollLayer);
+    setPropertyChangedBit(ChildNodes);
+    m_scrollingStateTree.setHasChangedProperties();
+}
+
 Ref<ScrollingStateNode> ScrollingStateNode::cloneAndReset(ScrollingStateTree& adoptiveTree)
 {
     auto clone = this->clone(adoptiveTree);

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h	2019-01-29 21:29:27 UTC (rev 240677)
@@ -207,6 +207,7 @@
     Ref<ScrollingStateNode> cloneAndReset(ScrollingStateTree& adoptiveTree);
     void cloneAndResetChildren(ScrollingStateNode&, ScrollingStateTree& adoptiveTree);
 
+    // FIXME: using an OptionSet<> for these and derived class bits would simplify code.
     enum {
         ScrollLayer = 0,
         ChildNodes,
@@ -218,6 +219,7 @@
     bool hasChangedProperty(unsigned propertyBit) const { return m_changedProperties & (static_cast<ChangedProperties>(1) << propertyBit); }
     void resetChangedProperties() { m_changedProperties = 0; }
     void setPropertyChanged(unsigned propertyBit);
+    virtual void setAllPropertiesChanged();
 
     ChangedProperties changedProperties() const { return m_changedProperties; }
     void setChangedProperties(ChangedProperties changedProperties) { m_changedProperties = changedProperties; }
@@ -254,7 +256,9 @@
     ScrollingStateNode(const ScrollingStateNode&, ScrollingStateTree&);
 
     virtual void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const;
-    
+
+    inline void setPropertyChangedBit(unsigned propertyBit);
+
 private:
     void dump(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const;
 
@@ -270,6 +274,11 @@
     LayerRepresentation m_layer;
 };
 
+void ScrollingStateNode::setPropertyChangedBit(unsigned propertyBit)
+{
+    m_changedProperties |= (static_cast<ChangedProperties>(1) << propertyBit);
+}
+
 } // namespace WebCore
 
 #define SPECIALIZE_TYPE_TRAITS_SCROLLING_STATE_NODE(ToValueTypeName, predicate) \

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp	2019-01-29 21:29:27 UTC (rev 240677)
@@ -60,6 +60,30 @@
 
 ScrollingStateScrollingNode::~ScrollingStateScrollingNode() = default;
 
+void ScrollingStateScrollingNode::setAllPropertiesChanged()
+{
+    setPropertyChangedBit(ScrollableAreaSize);
+    setPropertyChangedBit(TotalContentsSize);
+    setPropertyChangedBit(ReachableContentsSize);
+    setPropertyChangedBit(ParentRelativeScrollableRect);
+    setPropertyChangedBit(ScrollPosition);
+    setPropertyChangedBit(ScrollOrigin);
+    setPropertyChangedBit(ScrollableAreaParams);
+    setPropertyChangedBit(RequestedScrollPosition);
+#if ENABLE(CSS_SCROLL_SNAP)
+    setPropertyChangedBit(HorizontalSnapOffsets);
+    setPropertyChangedBit(VerticalSnapOffsets);
+    setPropertyChangedBit(HorizontalSnapOffsetRanges);
+    setPropertyChangedBit(VerticalSnapOffsetRanges);
+    setPropertyChangedBit(CurrentHorizontalSnapOffsetIndex);
+    setPropertyChangedBit(CurrentVerticalSnapOffsetIndex);
+#endif
+    setPropertyChangedBit(ExpectsWheelEventTestTrigger);
+    setPropertyChangedBit(ScrolledContentsLayer);
+
+    ScrollingStateNode::setAllPropertiesChanged();
+}
+
 void ScrollingStateScrollingNode::setScrollableAreaSize(const FloatSize& size)
 {
     if (m_scrollableAreaSize == size)

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h	2019-01-29 21:29:27 UTC (rev 240677)
@@ -116,8 +116,10 @@
     ScrollingStateScrollingNode(ScrollingStateTree&, ScrollingNodeType, ScrollingNodeID);
     ScrollingStateScrollingNode(const ScrollingStateScrollingNode&, ScrollingStateTree&);
 
+    void setAllPropertiesChanged() override;
+
     void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override;
-    
+
 private:
     FloatSize m_scrollableAreaSize;
     FloatSize m_totalContentsSize;

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.cpp (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.cpp	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.cpp	2019-01-29 21:29:27 UTC (rev 240677)
@@ -58,6 +58,12 @@
     return adoptRef(*new ScrollingStateStickyNode(*this, adoptiveTree));
 }
 
+void ScrollingStateStickyNode::setAllPropertiesChanged()
+{
+    setPropertyChangedBit(ViewportConstraints);
+    ScrollingStateNode::setAllPropertiesChanged();
+}
+
 void ScrollingStateStickyNode::updateConstraints(const StickyPositionViewportConstraints& constraints)
 {
     if (m_constraints == constraints)

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.h (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.h	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.h	2019-01-29 21:29:27 UTC (rev 240677)
@@ -55,6 +55,8 @@
     ScrollingStateStickyNode(ScrollingStateTree&, ScrollingNodeID);
     ScrollingStateStickyNode(const ScrollingStateStickyNode&, ScrollingStateTree&);
 
+    void setAllPropertiesChanged() override;
+
     void reconcileLayerPositionForViewportRect(const LayoutRect& viewportRect, ScrollingLayerPositionAction) override;
 
     void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override;

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp	2019-01-29 21:29:27 UTC (rev 240677)
@@ -153,6 +153,7 @@
 
     ScrollingStateNode* newNode = nullptr;
     if (!parentID) {
+        RELEASE_ASSERT(nodeType == ScrollingNodeType::MainFrame);
         ASSERT(!childIndex || childIndex == notFound);
         // If we're resetting the root node, we should clear the HashMap and destroy the current children.
         clear();
@@ -169,7 +170,10 @@
 
         if (parentID) {
             if (auto unparentedNode = m_unparentedNodes.take(newNodeID)) {
+                LOG_WITH_STREAM(Scrolling, stream << "ScrollingStateTree " << this << " insertNode " << newNodeID << " getting node from unparented nodes");
                 newNode = unparentedNode.get();
+                nodeWasReattachedRecursive(*unparentedNode);
+
                 if (childIndex == notFound)
                     parent->appendChild(unparentedNode.releaseNonNull());
                 else
@@ -188,7 +192,6 @@
     }
 
     addNode(*newNode);
-    m_nodesRemovedSinceLastCommit.remove(newNodeID);
     return newNodeID;
 }
 
@@ -265,6 +268,17 @@
     m_unparentedNodes.clear();
 }
 
+void ScrollingStateTree::nodeWasReattachedRecursive(ScrollingStateNode& node)
+{
+    // When a node is re-attached, the ScrollingTree is recreating the ScrollingNode from scratch, so we need to set all the dirty bits.
+    node.setAllPropertiesChanged();
+
+    if (auto* children = node.children()) {
+        for (auto& child : *children)
+            nodeWasReattachedRecursive(*child);
+    }
+}
+
 std::unique_ptr<ScrollingStateTree> ScrollingStateTree::commit(LayerRepresentation::Type preferredLayerRepresentation)
 {
     if (!m_unparentedNodes.isEmpty()) {
@@ -279,9 +293,6 @@
     if (m_rootStateNode)
         treeStateClone->setRootStateNode(static_reference_cast<ScrollingStateFrameScrollingNode>(m_rootStateNode->cloneAndReset(*treeStateClone)));
 
-    // Copy the IDs of the nodes that have been removed since the last commit into the clone.
-    treeStateClone->m_nodesRemovedSinceLastCommit.swap(m_nodesRemovedSinceLastCommit);
-
     // Now the clone tree has changed properties, and the original tree does not.
     treeStateClone->m_hasChangedProperties = m_hasChangedProperties;
     m_hasChangedProperties = false;
@@ -334,16 +345,10 @@
 
 void ScrollingStateTree::willRemoveNode(ScrollingStateNode* node)
 {
-    m_nodesRemovedSinceLastCommit.add(node->scrollingNodeID());
     m_stateNodeMap.remove(node->scrollingNodeID());
     setHasChangedProperties();
 }
 
-void ScrollingStateTree::setRemovedNodes(HashSet<ScrollingNodeID> nodes)
-{
-    m_nodesRemovedSinceLastCommit = WTFMove(nodes);
-}
-
 ScrollingStateNode* ScrollingStateTree::stateNodeForID(ScrollingNodeID scrollLayerID) const
 {
     if (!scrollLayerID)

Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateTree.h (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingStateTree.h	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateTree.h	2019-01-29 21:29:27 UTC (rev 240677)
@@ -57,9 +57,6 @@
     void unparentChildrenAndDestroyNode(ScrollingNodeID);
     void detachAndDestroySubtree(ScrollingNodeID);
     void clear();
-    
-    const HashSet<ScrollingNodeID>& removedNodes() const { return m_nodesRemovedSinceLastCommit; }
-    WEBCORE_EXPORT void setRemovedNodes(HashSet<ScrollingNodeID>);
 
     // Copies the current tree state and clears the changed properties mask in the original.
     WEBCORE_EXPORT std::unique_ptr<ScrollingStateTree> commit(LayerRepresentation::Type preferredLayerRepresentation);
@@ -82,6 +79,8 @@
     void setRootStateNode(Ref<ScrollingStateFrameScrollingNode>&&);
     void addNode(ScrollingStateNode&);
 
+    void nodeWasReattachedRecursive(ScrollingStateNode&);
+
     Ref<ScrollingStateNode> createNode(ScrollingNodeType, ScrollingNodeID);
 
     bool nodeTypeAndParentMatch(ScrollingStateNode&, ScrollingNodeType, ScrollingStateNode* parentNode) const;
@@ -98,7 +97,6 @@
     HashMap<ScrollingNodeID, RefPtr<ScrollingStateNode>> m_unparentedNodes;
 
     RefPtr<ScrollingStateFrameScrollingNode> m_rootStateNode;
-    HashSet<ScrollingNodeID> m_nodesRemovedSinceLastCommit;
     bool m_hasChangedProperties { false };
     bool m_hasNewRootStateNode { false };
     LayerRepresentation::Type m_preferredLayerRepresentation { LayerRepresentation::GraphicsLayerRepresentation };

Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp	2019-01-29 21:29:27 UTC (rev 240677)
@@ -56,7 +56,7 @@
         return false;
 
     if (shouldSetLatch)
-        m_latchedNode = 0;
+        m_latchedNodeID = 0;
     
     if (!m_eventTrackingRegions.isEmpty() && m_rootNode) {
         auto& frameScrollingNode = downcast<ScrollingTreeFrameScrollingNode>(*m_rootNode);
@@ -138,13 +138,26 @@
     bool scrollRequestIsProgammatic = rootNode ? rootNode->requestedScrollPositionRepresentsProgrammaticScroll() : false;
     SetForScope<bool> changeHandlingProgrammaticScroll(m_isHandlingProgrammaticScroll, scrollRequestIsProgammatic);
 
-    removeDestroyedNodes(*scrollingStateTree);
+    // unvisitedNodes starts with all nodes in the map; we remove nodes as we visit them. At the end, it's the unvisited nodes.
+    // We can't use orphanNodes for this, because orphanNodes won't contain descendants of removed nodes.
+    HashSet<ScrollingNodeID> unvisitedNodes;
+    for (auto nodeID : m_nodeMap.keys())
+        unvisitedNodes.add(nodeID);
 
+    // orphanNodes keeps child nodes alive while we rebuild child lists.
     OrphanScrollingNodeMap orphanNodes;
-    updateTreeFromStateNode(rootNode, orphanNodes);
+    updateTreeFromStateNode(rootNode, orphanNodes, unvisitedNodes);
+    
+    for (auto nodeID : unvisitedNodes) {
+        if (nodeID == m_latchedNodeID)
+            clearLatchedNode();
+        
+        LOG(Scrolling, "ScrollingTree::commitTreeState - removing unvisited node %llu", nodeID);
+        m_nodeMap.remove(nodeID);
+    }
 }
 
-void ScrollingTree::updateTreeFromStateNode(const ScrollingStateNode* stateNode, OrphanScrollingNodeMap& orphanNodes)
+void ScrollingTree::updateTreeFromStateNode(const ScrollingStateNode* stateNode, OrphanScrollingNodeMap& orphanNodes, HashSet<ScrollingNodeID>& unvisitedNodes)
 {
     if (!stateNode) {
         m_nodeMap.clear();
@@ -158,9 +171,10 @@
     auto it = m_nodeMap.find(nodeID);
 
     RefPtr<ScrollingTreeNode> node;
-    if (it != m_nodeMap.end())
+    if (it != m_nodeMap.end()) {
         node = it->value;
-    else {
+        unvisitedNodes.remove(nodeID);
+    } else {
         node = createScrollingTreeNode(stateNode->nodeType(), nodeID);
         if (!parentNodeID) {
             // This is the root node. Clear the node map.
@@ -195,21 +209,12 @@
     // Now update the children if we have any.
     if (auto children = stateNode->children()) {
         for (auto& child : *children)
-            updateTreeFromStateNode(child.get(), orphanNodes);
+            updateTreeFromStateNode(child.get(), orphanNodes, unvisitedNodes);
     }
 
     node->commitStateAfterChildren(*stateNode);
 }
 
-void ScrollingTree::removeDestroyedNodes(const ScrollingStateTree& stateTree)
-{
-    for (const auto& removedNodeID : stateTree.removedNodes()) {
-        m_nodeMap.remove(removedNodeID);
-        if (removedNodeID == m_latchedNode)
-            clearLatchedNode();
-    }
-}
-
 ScrollingTreeNode* ScrollingTree::nodeForID(ScrollingNodeID nodeID) const
 {
     if (!nodeID)
@@ -364,19 +369,19 @@
 ScrollingNodeID ScrollingTree::latchedNode()
 {
     LockHolder locker(m_mutex);
-    return m_latchedNode;
+    return m_latchedNodeID;
 }
 
 void ScrollingTree::setLatchedNode(ScrollingNodeID node)
 {
     LockHolder locker(m_mutex);
-    m_latchedNode = node;
+    m_latchedNodeID = node;
 }
 
 void ScrollingTree::clearLatchedNode()
 {
     LockHolder locker(m_mutex);
-    m_latchedNode = 0;
+    m_latchedNodeID = 0;
 }
 
 String ScrollingTree::scrollingTreeAsText()
@@ -386,8 +391,8 @@
     TextStream::GroupScope scope(ts);
     ts << "scrolling tree";
     
-    if (m_latchedNode)
-        ts.dumpProperty("latched node", m_latchedNode);
+    if (m_latchedNodeID)
+        ts.dumpProperty("latched node", m_latchedNodeID);
 
     if (m_mainFrameScrollPosition != IntPoint())
         ts.dumpProperty("main frame scroll position", m_mainFrameScrollPosition);

Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.h (240676 => 240677)


--- trunk/Source/WebCore/page/scrolling/ScrollingTree.h	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.h	2019-01-29 21:29:27 UTC (rev 240677)
@@ -143,7 +143,7 @@
     void setLatchedNode(ScrollingNodeID);
     void clearLatchedNode();
 
-    bool hasLatchedNode() const { return m_latchedNode; }
+    bool hasLatchedNode() const { return m_latchedNodeID; }
     void setOrClearLatchedNode(const PlatformWheelEvent&, ScrollingNodeID);
 
     bool hasFixedOrSticky() const { return !!m_fixedOrStickyNodeCount; }
@@ -163,16 +163,14 @@
     WEBCORE_EXPORT virtual void handleWheelEvent(const PlatformWheelEvent&);
 
 private:
-    void removeDestroyedNodes(const ScrollingStateTree&);
-    
-    typedef HashMap<ScrollingNodeID, RefPtr<ScrollingTreeNode>> OrphanScrollingNodeMap;
-    void updateTreeFromStateNode(const ScrollingStateNode*, OrphanScrollingNodeMap&);
+    using OrphanScrollingNodeMap = HashMap<ScrollingNodeID, RefPtr<ScrollingTreeNode>>;
+    void updateTreeFromStateNode(const ScrollingStateNode*, OrphanScrollingNodeMap&, HashSet<ScrollingNodeID>& unvisitedNodes);
 
     ScrollingTreeNode* nodeForID(ScrollingNodeID) const;
 
     RefPtr<ScrollingTreeNode> m_rootNode;
 
-    typedef HashMap<ScrollingNodeID, ScrollingTreeNode*> ScrollingTreeNodeMap;
+    using ScrollingTreeNodeMap = HashMap<ScrollingNodeID, ScrollingTreeNode*>;
     ScrollingTreeNodeMap m_nodeMap;
 
     Lock m_mutex;
@@ -181,7 +179,7 @@
 
     Lock m_swipeStateMutex;
     ScrollPinningBehavior m_scrollPinningBehavior { DoNotPin };
-    ScrollingNodeID m_latchedNode { 0 };
+    ScrollingNodeID m_latchedNodeID { 0 };
 
     unsigned m_fixedOrStickyNodeCount { 0 };
 

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (240676 => 240677)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2019-01-29 21:29:27 UTC (rev 240677)
@@ -3444,6 +3444,7 @@
 #endif
             m_scrollLayer = GraphicsLayer::create(graphicsLayerFactory(), *this, scrollLayerType);
             m_scrollLayer->setName("frame scrolling");
+            m_scrollLayer->setAnchorPoint({ });
 
             if (scrollLayerType == GraphicsLayer::Type::Scrolling) {
                 // Scroll layer clips so there is no need for a separate clipping layer.
@@ -3452,7 +3453,7 @@
                 m_clipLayer = GraphicsLayer::create(graphicsLayerFactory(), *this);
                 m_clipLayer->setName("frame clipping");
                 m_clipLayer->setMasksToBounds(true);
-                m_clipLayer->setAnchorPoint(FloatPoint3D());
+                m_clipLayer->setAnchorPoint({ });
 
                 m_clipLayer->addChild(*m_scrollLayer);
                 m_overflowControlsHostLayer->addChild(*m_clipLayer);

Modified: trunk/Source/WebKit/ChangeLog (240676 => 240677)


--- trunk/Source/WebKit/ChangeLog	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebKit/ChangeLog	2019-01-29 21:29:27 UTC (rev 240677)
@@ -1,3 +1,17 @@
+2019-01-29  Simon Fraser  <[email protected]>
+
+        REGRESSION(r240553): [iOS] Crash in ScrollingTree::updateTreeFromStateNode when attempting to log in to icloud.com
+        https://bugs.webkit.org/show_bug.cgi?id=193907
+
+        Reviewed by Frédéric Wang.
+
+        Remove encode/decode of removedNodes.
+
+        * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
+        (WebKit::RemoteScrollingCoordinatorTransaction::encode const):
+        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
+        (WebKit::dump):
+
 2019-01-29  Brent Fulgham  <[email protected]>
 
         StorageAccess API calls should be direct to the Network Process

Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp (240676 => 240677)


--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp	2019-01-29 21:27:32 UTC (rev 240676)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp	2019-01-29 21:29:27 UTC (rev 240677)
@@ -413,7 +413,6 @@
             encodeNodeAndDescendants(encoder, *rootNode, numNodesEncoded);
 
         ASSERT_UNUSED(numNodesEncoded, numNodesEncoded == numNodes);
-        encoder << m_scrollingStateTree->removedNodes();
     } else
         encoder << Vector<ScrollingNodeID>();
 }
@@ -486,14 +485,6 @@
 
     m_scrollingStateTree->setHasNewRootStateNode(hasNewRootNode);
 
-    // Removed nodes
-    HashSet<ScrollingNodeID> removedNodes;
-    if (!decoder.decode(removedNodes))
-        return false;
-    
-    if (removedNodes.size())
-        m_scrollingStateTree->setRemovedNodes(removedNodes);
-
     return true;
 }
 
@@ -653,9 +644,6 @@
 
     if (stateTree.rootStateNode())
         recursiveDumpNodes(ts, *stateTree.rootStateNode(), changedPropertiesOnly);
-
-    if (!stateTree.removedNodes().isEmpty())
-        ts.dumpProperty<Vector<ScrollingNodeID>>("removed-nodes", copyToVector(stateTree.removedNodes()));
 }
 
 WTF::CString RemoteScrollingCoordinatorTransaction::description() const
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to