Title: [199362] releases/WebKitGTK/webkit-2.12
Revision
199362
Author
[email protected]
Date
2016-04-12 09:30:50 -0700 (Tue, 12 Apr 2016)

Log Message

Merge r198087 - ComposedTreeIterator fails to traverse slots if root is shadow host
https://bugs.webkit.org/show_bug.cgi?id=155407

Reviewed by Darin Adler.

Source/WebCore:

Test: fast/shadow-dom/composed-tree-shadow-subtree.html

* dom/ComposedTreeIterator.cpp:
(WebCore::ComposedTreeIterator::ComposedTreeIterator):

    Traversal functions assume m_contextStack is deeper than 1 before they need to enter slot traversal code paths.
    Call initializeContextStack in case of shadow host which does the right thing.

(WebCore::ComposedTreeIterator::traverseSiblingInSlot):
(WebCore::composedTreeAsText):

    Add option to include pointers as debugging aid.

* dom/ComposedTreeIterator.h:
(WebCore::composedTreeChildren):

LayoutTests:

* fast/shadow-dom/composed-tree-shadow-subtree-expected.txt: Added.
* fast/shadow-dom/composed-tree-shadow-subtree.html: Added.

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog (199361 => 199362)


--- releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog	2016-04-12 16:27:45 UTC (rev 199361)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog	2016-04-12 16:30:50 UTC (rev 199362)
@@ -1,3 +1,13 @@
+2016-03-13  Antti Koivisto  <[email protected]>
+
+        ComposedTreeIterator fails to traverse slots if root is shadow host
+        https://bugs.webkit.org/show_bug.cgi?id=155407
+
+        Reviewed by Darin Adler.
+
+        * fast/shadow-dom/composed-tree-shadow-subtree-expected.txt: Added.
+        * fast/shadow-dom/composed-tree-shadow-subtree.html: Added.
+
 2016-03-12  Dean Jackson  <[email protected]>
 
         REGRESSION (r188647): Teamtreehouse website sidebar buttons are not rendered

Added: releases/WebKitGTK/webkit-2.12/LayoutTests/fast/shadow-dom/composed-tree-shadow-subtree-expected.txt (0 => 199362)


--- releases/WebKitGTK/webkit-2.12/LayoutTests/fast/shadow-dom/composed-tree-shadow-subtree-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/fast/shadow-dom/composed-tree-shadow-subtree-expected.txt	2016-04-12 16:30:50 UTC (rev 199362)
@@ -0,0 +1,35 @@
+
+Test 1
+  div (shadow root)
+
+Shadow host subtree
+
+Test 2
+  div (shadow root)
+
+Shadow host subtree
+
+Test 3
+  div (shadow root)
+    slot
+      div
+
+Shadow host subtree
+  slot
+    div
+
+Slot subtree
+  div
+
+Test 4
+  div (shadow root)
+    slot
+      #text
+
+Shadow host subtree
+  slot
+    #text
+
+Slot subtree
+  #text
+

Added: releases/WebKitGTK/webkit-2.12/LayoutTests/fast/shadow-dom/composed-tree-shadow-subtree.html (0 => 199362)


--- releases/WebKitGTK/webkit-2.12/LayoutTests/fast/shadow-dom/composed-tree-shadow-subtree.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/fast/shadow-dom/composed-tree-shadow-subtree.html	2016-04-12 16:30:50 UTC (rev 199362)
@@ -0,0 +1,53 @@
+<html>
+<script>
+if (window.testRunner)
+    testRunner.dumpAsText();
+</script>
+
+<template id=shadow1></template>
+<template id=shadow2><slot><div></div></slot></template>
+
+<template test=1><div shadow=shadow1></div></template>
+<template test=2><div shadow=shadow1>text</div></template>
+<template test=3><div shadow=shadow2></div></template>
+<template test=4><div shadow=shadow2>text</div></template>
+
+<body>
+<pre id=console></pre>
+<script>
+function installShadows(tree)
+{
+    var shadowHosts = tree.querySelectorAll("[shadow]");
+    for (var i = 0; i < shadowHosts.length; ++i) {
+        var shadowId = shadowHosts[i].getAttribute("shadow");
+        var shadowContents = document.querySelector("#"+shadowId).content.cloneNode(true);
+
+        installShadows(shadowContents);
+
+        var shadowRoot = shadowHosts[i].attachShadow({ mode: "open" });
+        shadowRoot.appendChild(shadowContents);
+    }
+}
+
+var console = document.querySelector("#console");
+
+var tests = document.querySelectorAll("[test]");
+for (var i = 0; i < tests.length; ++i) {
+    var test = tests[i].content.cloneNode(true);
+    installShadows(test);
+    console.innerText += "\nTest " + tests[i].getAttribute("test") + "\n";
+    console.innerText += internals.composedTreeAsText(test);
+
+    console.innerText += "\nShadow host subtree\n"
+    var shadowSubtree = test.querySelector("[shadow]");
+    console.innerText += internals.composedTreeAsText(shadowSubtree);
+
+    var slotSubtree = shadowSubtree.shadowRoot.querySelector("slot");
+    if (slotSubtree) {
+        console.innerText += "\nSlot subtree\n"
+        console.innerText += internals.composedTreeAsText(slotSubtree);
+    }
+}
+
+</script>
+</body>

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog (199361 => 199362)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog	2016-04-12 16:27:45 UTC (rev 199361)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog	2016-04-12 16:30:50 UTC (rev 199362)
@@ -1,3 +1,26 @@
+2016-03-13  Antti Koivisto  <[email protected]>
+
+        ComposedTreeIterator fails to traverse slots if root is shadow host
+        https://bugs.webkit.org/show_bug.cgi?id=155407
+
+        Reviewed by Darin Adler.
+
+        Test: fast/shadow-dom/composed-tree-shadow-subtree.html
+
+        * dom/ComposedTreeIterator.cpp:
+        (WebCore::ComposedTreeIterator::ComposedTreeIterator):
+
+            Traversal functions assume m_contextStack is deeper than 1 before they need to enter slot traversal code paths.
+            Call initializeContextStack in case of shadow host which does the right thing.
+
+        (WebCore::ComposedTreeIterator::traverseSiblingInSlot):
+        (WebCore::composedTreeAsText):
+
+            Add option to include pointers as debugging aid.
+
+        * dom/ComposedTreeIterator.h:
+        (WebCore::composedTreeChildren):
+
 2016-03-12  Dean Jackson  <[email protected]>
 
         REGRESSION (r188647): Teamtreehouse website sidebar buttons are not rendered

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/dom/ComposedTreeIterator.cpp (199361 => 199362)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/dom/ComposedTreeIterator.cpp	2016-04-12 16:27:45 UTC (rev 199361)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/dom/ComposedTreeIterator.cpp	2016-04-12 16:30:50 UTC (rev 199362)
@@ -44,8 +44,13 @@
         }
     }
 #endif
-    auto& effectiveRoot = root.shadowRoot() ? *root.shadowRoot() : root;
-    m_contextStack.uncheckedAppend(Context(effectiveRoot));
+    if (auto* shadowRoot = root.shadowRoot()) {
+        auto* firstChild = shadowRoot->firstChild();
+        initializeContextStack(root, firstChild ? *firstChild : root);
+        return;
+    }
+
+    m_contextStack.uncheckedAppend(Context(root));
 }
 
 ComposedTreeIterator::ComposedTreeIterator(ContainerNode& root, Node& current)
@@ -194,7 +199,7 @@
 }
 #endif
 
-String composedTreeAsText(ContainerNode& root)
+String composedTreeAsText(ContainerNode& root, ComposedTreeAsTextMode mode)
 {
     TextStream stream;
     auto descendants = composedTreeDescendants(root);
@@ -202,13 +207,18 @@
         writeIndent(stream, it.depth());
 
         if (is<Text>(*it)) {
-            stream << "#text\n";
+            stream << "#text";
+            if (mode == ComposedTreeAsTextMode::WithPointers)
+                stream << " " << &*it;
+            stream << "\n";
             continue;
         }
         auto& element = downcast<Element>(*it);
         stream << element.localName();
         if (element.shadowRoot())
             stream << " (shadow root)";
+        if (mode == ComposedTreeAsTextMode::WithPointers)
+            stream << " " << &*it;
         stream << "\n";
     }
     return stream.release();

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/dom/ComposedTreeIterator.h (199361 => 199362)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/dom/ComposedTreeIterator.h	2016-04-12 16:27:45 UTC (rev 199361)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/dom/ComposedTreeIterator.h	2016-04-12 16:30:50 UTC (rev 199362)
@@ -203,7 +203,8 @@
     return ComposedTreeChildAdapter(parent);
 }
 
-WEBCORE_EXPORT String composedTreeAsText(ContainerNode& root);
+enum class ComposedTreeAsTextMode { Normal, WithPointers };
+WEBCORE_EXPORT String composedTreeAsText(ContainerNode& root, ComposedTreeAsTextMode = ComposedTreeAsTextMode::Normal);
 
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to