Title: [107793] trunk
Revision
107793
Author
[email protected]
Date
2012-02-15 01:17:20 -0800 (Wed, 15 Feb 2012)

Log Message

<style scoped>: Allow <style scoped> as a direct child of a ShadowRoot
https://bugs.webkit.org/show_bug.cgi?id=77853

.:

numberOfScopedHTMLStyleChildren got moved from Element into Node.

Reviewed by Dimitri Glazkov.

* Source/autotools/symbols.filter:

Source/WebCore:

Moved registration code from Element to Node. updated Internals and build files accordingly.
Moved registration data members from ElementRareData to NodeRareData.
Forward willRemove() from host element into shadow DOM tree.

Reviewed by Dimitri Glazkov.

Test: fast/css/style-scoped/registering-shadowroot.html

* WebCore.exp.in:
* dom/Element.cpp:
(WebCore::Element::willRemove):
* dom/Element.h:
(Element):
* dom/ElementRareData.h:
(ElementRareData):
(WebCore::ElementRareData::ElementRareData):
* dom/Node.cpp:
(WebCore):
(WebCore::Node::hasScopedHTMLStyleChild):
(WebCore::Node::numberOfScopedHTMLStyleChildren):
(WebCore::Node::registerScopedHTMLStyleChild):
(WebCore::Node::unregisterScopedHTMLStyleChild):
* dom/Node.h:
(Node):
* dom/NodeRareData.h:
(WebCore::NodeRareData::NodeRareData):
(NodeRareData):
(WebCore::NodeRareData::registerScopedHTMLStyleChild):
(WebCore::NodeRareData::unregisterScopedHTMLStyleChild):
(WebCore::NodeRareData::hasScopedHTMLStyleChild):
(WebCore::NodeRareData::numberOfScopedHTMLStyleChildren):
* dom/ShadowRootList.cpp:
(WebCore::ShadowRootList::willRemove):
(WebCore):
* dom/ShadowRootList.h:
(ShadowRootList):
* html/HTMLStyleElement.cpp:
(WebCore::HTMLStyleElement::registerWithScopingNode):
(WebCore::HTMLStyleElement::unregisterWithScopingNode):
* testing/Internals.cpp:
(WebCore::Internals::numberOfScopedHTMLStyleChildren):
* testing/Internals.h:
(Internals):
* testing/Internals.idl:

Source/WebKit2:

numberOfScopedHTMLStyleChildren got moved from Element into Node.

Reviewed by Dimitri Glazkov.

* win/WebKit2.def:
* win/WebKit2CFLite.def:

LayoutTests:

Test registration of <style scoped> as a direct child of a ShadowRoot.

Reviewed by Dimitri Glazkov.

* fast/css/style-scoped/registering-shadowroot-expected.txt: Added.
* fast/css/style-scoped/registering-shadowroot.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/ChangeLog (107792 => 107793)


--- trunk/ChangeLog	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/ChangeLog	2012-02-15 09:17:20 UTC (rev 107793)
@@ -1,3 +1,14 @@
+2012-02-15  Roland Steiner  <[email protected]>
+
+        <style scoped>: Allow <style scoped> as a direct child of a ShadowRoot
+        https://bugs.webkit.org/show_bug.cgi?id=77853
+
+        numberOfScopedHTMLStyleChildren got moved from Element into Node.
+
+        Reviewed by Dimitri Glazkov.
+
+        * Source/autotools/symbols.filter:
+
 2012-02-13  Raphael Kubo da Costa  <[email protected]>
 
         [CMake] Merge WebKitEfl.cmake into FindEFL.cmake.

Modified: trunk/LayoutTests/ChangeLog (107792 => 107793)


--- trunk/LayoutTests/ChangeLog	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/LayoutTests/ChangeLog	2012-02-15 09:17:20 UTC (rev 107793)
@@ -1,3 +1,15 @@
+2012-02-15  Roland Steiner  <[email protected]>
+
+        <style scoped>: Allow <style scoped> as a direct child of a ShadowRoot
+        https://bugs.webkit.org/show_bug.cgi?id=77853
+
+        Test registration of <style scoped> as a direct child of a ShadowRoot.
+
+        Reviewed by Dimitri Glazkov.
+
+        * fast/css/style-scoped/registering-shadowroot-expected.txt: Added.
+        * fast/css/style-scoped/registering-shadowroot.html: Added.
+
 2012-02-14  Pavel Feldman  <[email protected]>
 
         Web Inspector: implement redo for DOM actions.

Added: trunk/LayoutTests/fast/css/style-scoped/registering-shadowroot-expected.txt (0 => 107793)


--- trunk/LayoutTests/fast/css/style-scoped/registering-shadowroot-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css/style-scoped/registering-shadowroot-expected.txt	2012-02-15 09:17:20 UTC (rev 107793)
@@ -0,0 +1,31 @@
+Test having a <style scoped> element as a direct child of a ShadowRoot.
+
+--- Initial ---
+PASS internals.numberOfScopedHTMLStyleChildren(host) is 0
+PASS internals.numberOfScopedHTMLStyleChildren(sr) is 0
+--- Attaching <style scoped> ---
+PASS internals.numberOfScopedHTMLStyleChildren(host) is 0
+PASS internals.numberOfScopedHTMLStyleChildren(sr) is 1
+--- Removing host ---
+PASS internals.numberOfScopedHTMLStyleChildren(host) is 0
+PASS internals.numberOfScopedHTMLStyleChildren(sr) is 0
+--- Inserting host ---
+PASS internals.numberOfScopedHTMLStyleChildren(host) is 0
+PASS internals.numberOfScopedHTMLStyleChildren(sr) is 1
+--- Unsetting @scoped ---
+PASS internals.numberOfScopedHTMLStyleChildren(host) is 0
+PASS internals.numberOfScopedHTMLStyleChildren(sr) is 0
+--- Setting @scoped ---
+PASS internals.numberOfScopedHTMLStyleChildren(host) is 0
+PASS internals.numberOfScopedHTMLStyleChildren(sr) is 1
+--- Detaching <style scoped> ---
+PASS internals.numberOfScopedHTMLStyleChildren(host) is 0
+PASS internals.numberOfScopedHTMLStyleChildren(sr) is 0
+--- Attaching <style scoped> under host ---
+PASS internals.numberOfScopedHTMLStyleChildren(host) is 1
+PASS internals.numberOfScopedHTMLStyleChildren(sr) is 0
+--- DONE ---
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/css/style-scoped/registering-shadowroot.html (0 => 107793)


--- trunk/LayoutTests/fast/css/style-scoped/registering-shadowroot.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css/style-scoped/registering-shadowroot.html	2012-02-15 09:17:20 UTC (rev 107793)
@@ -0,0 +1,74 @@
+<html>
+<head>
+    <link rel="stylesheet" href=""
+    <script src=""
+</head>
+<body>
+    <p>Test having a &lt;style scoped&gt; element as a direct child of a ShadowRoot.</p>
+    <div id="host">
+    </div>
+    <div id="ref">
+    </div>
+
+    <div id="console"></div>
+
+    <script>
+        if (!window.internals)
+            debug("windows.internals not found!");
+        else if (!window.internals.ensureShadowRoot)
+            debug("windows.internals.ensureShadowRoot not found!");
+        else if (!window.internals.numberOfScopedHTMLStyleChildren)
+            debug("windows.internals.numberOfScopedHTMLStyleChildren not found!");
+        else {
+            var ref = document.getElementById('ref');
+            var host = document.getElementById('host');
+            var sr = internals.ensureShadowRoot(host);
+            var style = document.createElement('style');
+            style.setAttribute('scoped', 'scoped');
+
+            debug("--- Initial ---");
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(host)", "0");
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(sr)", "0"); /* <style> out of document, scoped */
+
+            debug("--- Attaching &lt;style scoped&gt; ---");
+            sr.appendChild(style);
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(host)", "0");
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(sr)", "1"); /* <style> in shadow, scoped */
+
+            debug("--- Removing host ---");
+            host.parentNode.removeChild(host);
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(host)", "0");
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(sr)", "0"); /* <style> out of document, scoped */
+
+            debug("--- Inserting host ---");
+            ref.parentNode.insertBefore(host, ref);
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(host)", "0");
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(sr)", "1"); /* <style> in shadow, scoped */
+
+            debug("--- Unsetting @scoped ---");
+            style.scoped = false;
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(host)", "0");
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(sr)", "0"); /* <style> in shadow, not scoped */
+
+            debug("--- Setting @scoped ---");
+            style.scoped = true;
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(host)", "0");
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(sr)", "1"); /* <style> in shadow, scoped */
+
+            debug("--- Detaching &lt;style scoped&gt; ---");
+            sr.removeChild(style);
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(host)", "0");
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(sr)", "0"); /* <style> out of document, scoped */
+
+            debug("--- Attaching &lt;style scoped&gt; under host ---");
+            host.appendChild(style);
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(host)", "1");
+            shouldBe("internals.numberOfScopedHTMLStyleChildren(sr)", "0"); /* <style> in tree, scoped */
+
+            debug("--- DONE ---");
+        }
+        var successfullyParsed = true;
+    </script>
+    <script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (107792 => 107793)


--- trunk/Source/WebCore/ChangeLog	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/ChangeLog	2012-02-15 09:17:20 UTC (rev 107793)
@@ -1,3 +1,53 @@
+2012-02-15  Roland Steiner  <[email protected]>
+
+        <style scoped>: Allow <style scoped> as a direct child of a ShadowRoot
+        https://bugs.webkit.org/show_bug.cgi?id=77853
+
+        Moved registration code from Element to Node. updated Internals and build files accordingly.
+        Moved registration data members from ElementRareData to NodeRareData.
+        Forward willRemove() from host element into shadow DOM tree.
+
+        Reviewed by Dimitri Glazkov.
+
+        Test: fast/css/style-scoped/registering-shadowroot.html
+
+        * WebCore.exp.in:
+        * dom/Element.cpp:
+        (WebCore::Element::willRemove):
+        * dom/Element.h:
+        (Element):
+        * dom/ElementRareData.h:
+        (ElementRareData):
+        (WebCore::ElementRareData::ElementRareData):
+        * dom/Node.cpp:
+        (WebCore):
+        (WebCore::Node::hasScopedHTMLStyleChild):
+        (WebCore::Node::numberOfScopedHTMLStyleChildren):
+        (WebCore::Node::registerScopedHTMLStyleChild):
+        (WebCore::Node::unregisterScopedHTMLStyleChild):
+        * dom/Node.h:
+        (Node):
+        * dom/NodeRareData.h:
+        (WebCore::NodeRareData::NodeRareData):
+        (NodeRareData):
+        (WebCore::NodeRareData::registerScopedHTMLStyleChild):
+        (WebCore::NodeRareData::unregisterScopedHTMLStyleChild):
+        (WebCore::NodeRareData::hasScopedHTMLStyleChild):
+        (WebCore::NodeRareData::numberOfScopedHTMLStyleChildren):
+        * dom/ShadowRootList.cpp:
+        (WebCore::ShadowRootList::willRemove):
+        (WebCore):
+        * dom/ShadowRootList.h:
+        (ShadowRootList):
+        * html/HTMLStyleElement.cpp:
+        (WebCore::HTMLStyleElement::registerWithScopingNode):
+        (WebCore::HTMLStyleElement::unregisterWithScopingNode):
+        * testing/Internals.cpp:
+        (WebCore::Internals::numberOfScopedHTMLStyleChildren):
+        * testing/Internals.h:
+        (Internals):
+        * testing/Internals.idl:
+
 2012-02-14  Pavel Feldman  <[email protected]>
 
         Web Inspector: implement redo for DOM actions.

Modified: trunk/Source/WebCore/WebCore.exp.in (107792 => 107793)


--- trunk/Source/WebCore/WebCore.exp.in	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/WebCore.exp.in	2012-02-15 09:17:20 UTC (rev 107793)
@@ -2088,6 +2088,4 @@
 __ZNK7WebCore20ScrollingCoordinator13scrollingTreeEv
 #endif
 
-#if ENABLE(STYLE_SCOPED)
-__ZNK7WebCore7Element31numberOfScopedHTMLStyleChildrenEv
-#endif
+__ZNK7WebCore4Node31numberOfScopedHTMLStyleChildrenEv

Modified: trunk/Source/WebCore/dom/Element.cpp (107792 => 107793)


--- trunk/Source/WebCore/dom/Element.cpp	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/dom/Element.cpp	2012-02-15 09:17:20 UTC (rev 107793)
@@ -865,6 +865,8 @@
     if (containsFullScreenElement())
         setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(false);
 #endif
+    if (ShadowRootList* shadowRoots = shadowRootList())
+        shadowRoots->willRemove();
     ContainerNode::willRemove();
 }
 
@@ -1764,30 +1766,6 @@
     return count;
 }
 
-#if ENABLE(STYLE_SCOPED)
-bool Element::hasScopedHTMLStyleChild() const
-{
-    return hasRareData() && rareData()->hasScopedHTMLStyleChild();
-}
-
-size_t Element::numberOfScopedHTMLStyleChildren() const
-{
-    return hasRareData() ? rareData()->numberOfScopedHTMLStyleChildren() : 0;
-}
-
-void Element::registerScopedHTMLStyleChild()
-{
-    ensureRareData()->registerScopedHTMLStyleChild();
-}
-
-void Element::unregisterScopedHTMLStyleChild()
-{
-    ASSERT(hasRareData());
-    if (hasRareData())
-        rareData()->unregisterScopedHTMLStyleChild();
-}
-#endif
-
 bool Element::webkitMatchesSelector(const String& selector, ExceptionCode& ec)
 {
     if (selector.isEmpty()) {

Modified: trunk/Source/WebCore/dom/Element.h (107792 => 107793)


--- trunk/Source/WebCore/dom/Element.h	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/dom/Element.h	2012-02-15 09:17:20 UTC (rev 107793)
@@ -326,13 +326,6 @@
     Element* nextElementSibling() const;
     unsigned childElementCount() const;
 
-#if ENABLE(STYLE_SCOPED)
-    void registerScopedHTMLStyleChild();
-    void unregisterScopedHTMLStyleChild();
-    bool hasScopedHTMLStyleChild() const;
-    size_t numberOfScopedHTMLStyleChildren() const;
-#endif
-
     bool webkitMatchesSelector(const String& selectors, ExceptionCode&);
 
     DOMTokenList* classList();

Modified: trunk/Source/WebCore/dom/ElementRareData.h (107792 => 107793)


--- trunk/Source/WebCore/dom/ElementRareData.h	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/dom/ElementRareData.h	2012-02-15 09:17:20 UTC (rev 107793)
@@ -39,13 +39,6 @@
 
     void resetComputedStyle();
 
-#if ENABLE(STYLE_SCOPED)
-    void registerScopedHTMLStyleChild();
-    void unregisterScopedHTMLStyleChild();
-    bool hasScopedHTMLStyleChild() const;
-    size_t numberOfScopedHTMLStyleChildren() const;
-#endif
-
     using NodeRareData::needsFocusAppearanceUpdateSoonAfterAttach;
     using NodeRareData::setNeedsFocusAppearanceUpdateSoonAfterAttach;
 
@@ -74,10 +67,6 @@
     ShadowRootList m_shadowRootList;
     AtomicString m_shadowPseudoId;
 
-#if ENABLE(STYLE_SCOPED)
-    size_t m_numberOfScopedHTMLStyleChildren;
-#endif
-
     OwnPtr<DatasetDOMStringMap> m_datasetDOMStringMap;
     OwnPtr<ClassList> m_classList;
 
@@ -94,10 +83,8 @@
 }
 
 inline ElementRareData::ElementRareData()
-    : m_minimumSizeForResizing(defaultMinimumSizeForResizing())
-#if ENABLE(STYLE_SCOPED)
-    , m_numberOfScopedHTMLStyleChildren(0)
-#endif
+    : NodeRareData()
+    , m_minimumSizeForResizing(defaultMinimumSizeForResizing())
     , m_styleAffectedByEmpty(false)
 #if ENABLE(FULLSCREEN_API)
     , m_containsFullScreenElement(false)
@@ -115,29 +102,5 @@
     m_computedStyle.clear();
 }
 
-#if ENABLE(STYLE_SCOPED)
-inline void ElementRareData::registerScopedHTMLStyleChild()
-{
-    ++m_numberOfScopedHTMLStyleChildren;
 }
-
-inline void ElementRareData::unregisterScopedHTMLStyleChild()
-{
-    ASSERT(m_numberOfScopedHTMLStyleChildren > 0);
-    if (m_numberOfScopedHTMLStyleChildren > 0)
-        --m_numberOfScopedHTMLStyleChildren;
-}
-
-inline bool ElementRareData::hasScopedHTMLStyleChild() const
-{
-    return m_numberOfScopedHTMLStyleChildren;
-}
-
-inline size_t ElementRareData::numberOfScopedHTMLStyleChildren() const
-{
-    return m_numberOfScopedHTMLStyleChildren;
-}
-#endif
-
-}
 #endif // ElementRareData_h

Modified: trunk/Source/WebCore/dom/Node.cpp (107792 => 107793)


--- trunk/Source/WebCore/dom/Node.cpp	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/dom/Node.cpp	2012-02-15 09:17:20 UTC (rev 107793)
@@ -2717,7 +2717,40 @@
 }
 #endif // ENABLE(MUTATION_OBSERVERS)
 
+#if ENABLE(STYLE_SCOPED)
+bool Node::hasScopedHTMLStyleChild() const
+{
+    return hasRareData() && rareData()->hasScopedHTMLStyleChild();
+}
 
+size_t Node::numberOfScopedHTMLStyleChildren() const
+{
+    return hasRareData() ? rareData()->numberOfScopedHTMLStyleChildren() : 0;
+}
+
+void Node::registerScopedHTMLStyleChild()
+{
+    ensureRareData()->registerScopedHTMLStyleChild();
+}
+
+void Node::unregisterScopedHTMLStyleChild()
+{
+    ASSERT(hasRareData());
+    if (hasRareData())
+        rareData()->unregisterScopedHTMLStyleChild();
+}
+#else
+bool Node::hasScopedHTMLStyleChild() const
+{
+    return 0;
+}
+
+size_t Node::numberOfScopedHTMLStyleChildren() const
+{
+    return 0;
+}
+#endif
+
 void Node::handleLocalEvents(Event* event)
 {
     if (!hasRareData() || !rareData()->eventTargetData())

Modified: trunk/Source/WebCore/dom/Node.h (107792 => 107793)


--- trunk/Source/WebCore/dom/Node.h	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/dom/Node.h	2012-02-15 09:17:20 UTC (rev 107793)
@@ -638,6 +638,13 @@
     void notifyMutationObserversNodeWillDetach();
 #endif // ENABLE(MUTATION_OBSERVERS)
 
+#if ENABLE(STYLE_SCOPED)
+    void registerScopedHTMLStyleChild();
+    void unregisterScopedHTMLStyleChild();
+#endif
+    bool hasScopedHTMLStyleChild() const;
+    size_t numberOfScopedHTMLStyleChildren() const;
+
 private:
     enum NodeFlags {
         IsTextFlag = 1,

Modified: trunk/Source/WebCore/dom/NodeRareData.h (107792 => 107793)


--- trunk/Source/WebCore/dom/NodeRareData.h	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/dom/NodeRareData.h	2012-02-15 09:17:20 UTC (rev 107793)
@@ -100,6 +100,9 @@
         , m_tabIndexWasSetExplicitly(false)
         , m_isFocused(false)
         , m_needsFocusAppearanceUpdateSoonAfterAttach(false)
+#if ENABLE(STYLE_SCOPED)
+        , m_numberOfScopedHTMLStyleChildren(0)
+#endif
     {
     }
 
@@ -226,6 +229,30 @@
     }
 #endif
 
+#if ENABLE(STYLE_SCOPED)
+    void registerScopedHTMLStyleChild()
+    {
+        ++m_numberOfScopedHTMLStyleChildren;
+    }
+
+    void unregisterScopedHTMLStyleChild()
+    {
+        ASSERT(m_numberOfScopedHTMLStyleChildren > 0);
+        if (m_numberOfScopedHTMLStyleChildren > 0)
+            --m_numberOfScopedHTMLStyleChildren;
+    }
+
+    bool hasScopedHTMLStyleChild() const
+    {
+        return m_numberOfScopedHTMLStyleChildren;
+    }
+
+    size_t numberOfScopedHTMLStyleChildren() const
+    {
+        return m_numberOfScopedHTMLStyleChildren;
+    }
+#endif
+
     bool isFocused() const { return m_isFocused; }
     void setFocused(bool focused) { m_isFocused = focused; }
 
@@ -257,6 +284,10 @@
     mutable RefPtr<DOMSettableTokenList> m_itemType;
     mutable OwnPtr<HTMLPropertiesCollection> m_properties;
 #endif
+
+#if ENABLE(STYLE_SCOPED)
+    size_t m_numberOfScopedHTMLStyleChildren;
+#endif
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/dom/ShadowRootList.cpp (107792 => 107793)


--- trunk/Source/WebCore/dom/ShadowRootList.cpp	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/dom/ShadowRootList.cpp	2012-02-15 09:17:20 UTC (rev 107793)
@@ -83,6 +83,12 @@
         root->removedFromTree(deep);
 }
 
+void ShadowRootList::willRemove()
+{
+    for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadowRoot())
+        root->willRemove();
+}
+
 void ShadowRootList::hostChildrenChanged()
 {
     for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadowRoot())

Modified: trunk/Source/WebCore/dom/ShadowRootList.h (107792 => 107793)


--- trunk/Source/WebCore/dom/ShadowRootList.h	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/dom/ShadowRootList.h	2012-02-15 09:17:20 UTC (rev 107793)
@@ -52,6 +52,7 @@
     void removedFromDocument();
     void insertedIntoTree(bool deep);
     void removedFromTree(bool deep);
+    void willRemove();
 
     void hostChildrenChanged();
 

Modified: trunk/Source/WebCore/html/HTMLStyleElement.cpp (107792 => 107793)


--- trunk/Source/WebCore/html/HTMLStyleElement.cpp	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/html/HTMLStyleElement.cpp	2012-02-15 09:17:20 UTC (rev 107793)
@@ -88,9 +88,15 @@
     ASSERT(!m_isRegisteredWithScopingNode);
     ASSERT(inDocument());
     if (!m_isRegisteredWithScopingNode) {
-        Element* scope = parentElement();
+        ContainerNode* scope = parentNode();
         if (!scope)
             return;
+        if (!scope->isElementNode() && !scope->isShadowRoot()) {
+            // DocumentFragment nodes should never be inDocument,
+            // <style> should not be a child of Document, PI or some such.
+            ASSERT_NOT_REACHED();
+            return;
+        }
 
         scope->registerScopedHTMLStyleChild();
         scope->setNeedsStyleRecalc();
@@ -107,7 +113,7 @@
     // Therefore we cannot rely on scoped()!
     ASSERT(m_isRegisteredWithScopingNode);
     if (m_isRegisteredWithScopingNode) {
-        Element* scope = parentElement();
+        ContainerNode* scope = parentNode();
         ASSERT(scope);
         if (scope) {
             ASSERT(scope->hasScopedHTMLStyleChild());

Modified: trunk/Source/WebCore/testing/Internals.cpp (107792 => 107793)


--- trunk/Source/WebCore/testing/Internals.cpp	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/testing/Internals.cpp	2012-02-15 09:17:20 UTC (rev 107793)
@@ -166,11 +166,11 @@
     return representation;
 }
 
-size_t Internals::numberOfScopedHTMLStyleChildren(const Element* element, ExceptionCode& ec) const
+size_t Internals::numberOfScopedHTMLStyleChildren(const Node* scope, ExceptionCode& ec) const
 {
-    if (element)
+    if (scope && (scope->isElementNode() || scope->isShadowRoot()))
 #if ENABLE(STYLE_SCOPED)
-        return element->numberOfScopedHTMLStyleChildren();
+        return scope->numberOfScopedHTMLStyleChildren();
 #else
         return 0;
 #endif

Modified: trunk/Source/WebCore/testing/Internals.h (107792 => 107793)


--- trunk/Source/WebCore/testing/Internals.h	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/testing/Internals.h	2012-02-15 09:17:20 UTC (rev 107793)
@@ -57,7 +57,7 @@
 
     bool isPreloaded(Document*, const String& url);
 
-    size_t numberOfScopedHTMLStyleChildren(const Element*, ExceptionCode&) const;
+    size_t numberOfScopedHTMLStyleChildren(const Node*, ExceptionCode&) const;
 
 #if ENABLE(SHADOW_DOM)
     typedef ShadowRoot ShadowRootIfShadowDOMEnabledOrNode;

Modified: trunk/Source/WebCore/testing/Internals.idl (107792 => 107793)


--- trunk/Source/WebCore/testing/Internals.idl	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebCore/testing/Internals.idl	2012-02-15 09:17:20 UTC (rev 107793)
@@ -30,7 +30,7 @@
         DOMString elementRenderTreeAsText(in Element element) raises(DOMException);
         boolean isPreloaded(in Document document, in DOMString url);
 
-        unsigned long numberOfScopedHTMLStyleChildren(in Element element) raises(DOMException);
+        unsigned long numberOfScopedHTMLStyleChildren(in Node scope) raises(DOMException);
 
 #if defined(ENABLE_SHADOW_DOM)
         ShadowRoot ensureShadowRoot(in Element host) raises (DOMException);

Modified: trunk/Source/WebKit2/ChangeLog (107792 => 107793)


--- trunk/Source/WebKit2/ChangeLog	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebKit2/ChangeLog	2012-02-15 09:17:20 UTC (rev 107793)
@@ -1,3 +1,15 @@
+2012-02-15  Roland Steiner  <[email protected]>
+
+        <style scoped>: Allow <style scoped> as a direct child of a ShadowRoot
+        https://bugs.webkit.org/show_bug.cgi?id=77853
+
+        numberOfScopedHTMLStyleChildren got moved from Element into Node.
+
+        Reviewed by Dimitri Glazkov.
+
+        * win/WebKit2.def:
+        * win/WebKit2CFLite.def:
+
 2012-02-15  No'am Rosenthal  <[email protected]>
 
         [Texmap] Divide TextureMapperNode.cpp to 3 files.

Modified: trunk/Source/WebKit2/win/WebKit2.def (107792 => 107793)


--- trunk/Source/WebKit2/win/WebKit2.def	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebKit2/win/WebKit2.def	2012-02-15 09:17:20 UTC (rev 107793)
@@ -170,7 +170,7 @@
         ?markersFor@DocumentMarkerController@WebCore@@QAE?AV?$Vector@PAVDocumentMarker@WebCore@@$0A@@WTF@@PAVNode@2@VMarkerTypes@DocumentMarker@2@@Z
         ?observeFrame@FrameDestructionObserver@WebCore@@IAEXPAVFrame@2@@Z
         ?overrideUserPreferredLanguages@WebCore@@YAXABV?$Vector@VString@WTF@@$0A@@WTF@@@Z
-        ; ?numberOfScopedHTMLStyleChildren@Element@WebCore@@QBEIXZ
+        ?numberOfScopedHTMLStyleChildren@Node@WebCore@@QBEIXZ
         ?page@Document@WebCore@@QBEPAVPage@2@XZ
         ?paintControlTints@FrameView@WebCore@@AAEXXZ
         ?rangeFromLocationAndLength@TextIterator@WebCore@@SA?AV?$PassRefPtr@VRange@WebCore@@@WTF@@PAVElement@2@HH_N@Z

Modified: trunk/Source/WebKit2/win/WebKit2CFLite.def (107792 => 107793)


--- trunk/Source/WebKit2/win/WebKit2CFLite.def	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/WebKit2/win/WebKit2CFLite.def	2012-02-15 09:17:20 UTC (rev 107793)
@@ -165,7 +165,7 @@
         ?markersFor@DocumentMarkerController@WebCore@@QAE?AV?$Vector@PAVDocumentMarker@WebCore@@$0A@@WTF@@PAVNode@2@VMarkerTypes@DocumentMarker@2@@Z
         ?observeFrame@FrameDestructionObserver@WebCore@@IAEXPAVFrame@2@@Z
         ?overrideUserPreferredLanguages@WebCore@@YAXABV?$Vector@VString@WTF@@$0A@@WTF@@@Z
-        ; ?numberOfScopedHTMLStyleChildren@Element@WebCore@@QBEIXZ
+        ?numberOfScopedHTMLStyleChildren@Node@WebCore@@QBEIXZ
         ?page@Document@WebCore@@QBEPAVPage@2@XZ
         ?paintControlTints@FrameView@WebCore@@AAEXXZ
         ?rangeFromLocationAndLength@TextIterator@WebCore@@SA?AV?$PassRefPtr@VRange@WebCore@@@WTF@@PAVElement@2@HH_N@Z

Modified: trunk/Source/autotools/symbols.filter (107792 => 107793)


--- trunk/Source/autotools/symbols.filter	2012-02-15 09:12:15 UTC (rev 107792)
+++ trunk/Source/autotools/symbols.filter	2012-02-15 09:17:20 UTC (rev 107793)
@@ -71,6 +71,7 @@
 _ZN7WebCore9JSElement10putVirtualEPN3JSC9ExecStateERKNS1_10IdentifierENS1_7JSValueERNS1_15PutPropertySlotE;
 _ZN7WebCore9JSElement6s_infoE;
 _ZN7WebCore9toElementEN3JSC7JSValueE;
+_ZNK7WebCore4Node31numberOfScopedHTMLStyleChildrenEv;
 _ZNK7WebCore12RenderObject23absoluteBoundingBoxRectEb;
 _ZNK7WebCore16HTMLInputElement14suggestedValueEv;
 _ZNK7WebCore17JSDOMGlobalObject22scriptExecutionContextEv;
@@ -78,7 +79,6 @@
 _ZNK7WebCore26HTMLTextFormControlElement21lastChangeWasUserEditEv;
 _ZNK7WebCore5Frame8settingsEv;
 _ZNK7WebCore6JSNode21pushEventHandlerScopeEPN3JSC9ExecStateEPNS1_14ScopeChainNodeE;
-_ZNK7WebCore7Element31numberOfScopedHTMLStyleChildrenEv;
 _ZNK7WebCore7Element13hasShadowRootEv;
 _ZNK7WebCore7Element14shadowRootListEv;
 _ZNK7WebCore8Document4pageEv;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to