Title: [106902] trunk
- Revision
- 106902
- Author
- [email protected]
- Date
- 2012-02-06 20:47:15 -0800 (Mon, 06 Feb 2012)
Log Message
Implement querySelector on ShadowRoot.
https://bugs.webkit.org/show_bug.cgi?id=77714
Reviewed by Dimitri Glazkov.
Source/WebCore:
* dom/SelectorQuery.cpp:
(WebCore::nodeIsRootNodeOfTreeScope):
(WebCore):
(WebCore::SelectorDataList::execute):
LayoutTests:
* fast/dom/shadow/shadow-root-js-api-expected.txt:
* fast/dom/shadow/shadow-root-js-api.html:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (106901 => 106902)
--- trunk/LayoutTests/ChangeLog 2012-02-07 04:41:08 UTC (rev 106901)
+++ trunk/LayoutTests/ChangeLog 2012-02-07 04:47:15 UTC (rev 106902)
@@ -1,3 +1,13 @@
+2012-02-06 Hayato Ito <[email protected]>
+
+ Implement querySelector on ShadowRoot.
+ https://bugs.webkit.org/show_bug.cgi?id=77714
+
+ Reviewed by Dimitri Glazkov.
+
+ * fast/dom/shadow/shadow-root-js-api-expected.txt:
+ * fast/dom/shadow/shadow-root-js-api.html:
+
2012-02-06 David Grogan <[email protected]>
js-test-pre.js: relay calls to testPassed, testFailed, debug, etc from
Modified: trunk/LayoutTests/fast/dom/shadow/shadow-root-js-api-expected.txt (106901 => 106902)
--- trunk/LayoutTests/fast/dom/shadow/shadow-root-js-api-expected.txt 2012-02-07 04:41:08 UTC (rev 106901)
+++ trunk/LayoutTests/fast/dom/shadow/shadow-root-js-api-expected.txt 2012-02-07 04:47:15 UTC (rev 106902)
@@ -20,6 +20,12 @@
PASS shadowRoot.getElementsByTagNameNS('*', 'div') is [div1, div2]
PASS shadowRoot.getElementsByTagNameNS('', 'div') is []
PASS shadowRoot.getElementsByTagNameNS('*', 'foo') is []
+PASS shadowRoot.querySelector('#div1') is div1
+PASS shadowRoot.querySelector('#foo') is null
+PASS shadowRoot.querySelector('.class2') is div2
+PASS shadowRoot.querySelector('.foo') is null
+PASS shadowRoot.querySelectorAll('div') is [div1, div2]
+PASS shadowRoot.querySelectorAll('foo') is []
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/fast/dom/shadow/shadow-root-js-api.html (106901 => 106902)
--- trunk/LayoutTests/fast/dom/shadow/shadow-root-js-api.html 2012-02-07 04:41:08 UTC (rev 106901)
+++ trunk/LayoutTests/fast/dom/shadow/shadow-root-js-api.html 2012-02-07 04:47:15 UTC (rev 106902)
@@ -5,6 +5,10 @@
</head>
<body>
<div id="console"></div>
+<!-- These elements should not be selected in ShadowRoot's querySelector. -->
+<div id="foo"></div>
+<div class="foo"></div>
+<foo></foo>
<script>
description("Tests for ShadowRoot JS APIs. Can only run within DRT");
@@ -47,6 +51,12 @@
shouldBe("shadowRoot.getElementsByTagNameNS('', 'div')", "[]");
shouldBe("shadowRoot.getElementsByTagNameNS('*', 'foo')", "[]");
+shouldBe("shadowRoot.querySelector('#div1')", "div1");
+shouldBeNull("shadowRoot.querySelector('#foo')");
+shouldBe("shadowRoot.querySelector('.class2')", "div2");
+shouldBeNull("shadowRoot.querySelector('.foo')");
+shouldBe("shadowRoot.querySelectorAll('div')", "[div1, div2]");
+shouldBe("shadowRoot.querySelectorAll('foo')", "[]");
</script>
<script src=""
</body>
Modified: trunk/Source/WebCore/ChangeLog (106901 => 106902)
--- trunk/Source/WebCore/ChangeLog 2012-02-07 04:41:08 UTC (rev 106901)
+++ trunk/Source/WebCore/ChangeLog 2012-02-07 04:47:15 UTC (rev 106902)
@@ -1,3 +1,15 @@
+2012-02-06 Hayato Ito <[email protected]>
+
+ Implement querySelector on ShadowRoot.
+ https://bugs.webkit.org/show_bug.cgi?id=77714
+
+ Reviewed by Dimitri Glazkov.
+
+ * dom/SelectorQuery.cpp:
+ (WebCore::nodeIsRootNodeOfTreeScope):
+ (WebCore):
+ (WebCore::SelectorDataList::execute):
+
2012-02-06 Martin Robinson <[email protected]> and Nayan Kumar K <[email protected]>
[GTK] Add TextureMapperGL implementation
Modified: trunk/Source/WebCore/dom/SelectorQuery.cpp (106901 => 106902)
--- trunk/Source/WebCore/dom/SelectorQuery.cpp 2012-02-07 04:41:08 UTC (rev 106901)
+++ trunk/Source/WebCore/dom/SelectorQuery.cpp 2012-02-07 04:47:15 UTC (rev 106902)
@@ -98,14 +98,20 @@
return true;
}
+static inline bool isTreeScopeRoot(Node* node)
+{
+ ASSERT(node);
+ return node->isDocumentNode() || node->isShadowRoot();
+}
+
template <bool firstMatchOnly>
void SelectorDataList::execute(const SelectorChecker& selectorChecker, Node* rootNode, Vector<RefPtr<Node> >& matchedElements) const
{
if (canUseIdLookup(rootNode)) {
ASSERT(m_selectors.size() == 1);
CSSSelector* selector = m_selectors[0].selector;
- Element* element = rootNode->document()->getElementById(selector->value());
- if (!element || !(rootNode->isDocumentNode() || element->isDescendantOf(rootNode)))
+ Element* element = rootNode->treeScope()->getElementById(selector->value());
+ if (!element || !(isTreeScopeRoot(rootNode) || element->isDescendantOf(rootNode)))
return;
if (selectorChecker.checkSelector(m_selectors[0].selector, element, m_selectors[0].isFastCheckable))
matchedElements.append(element);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes