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