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

Reply via email to