Title: [90026] trunk/Source/WebCore
Revision
90026
Author
[email protected]
Date
2011-06-29 10:46:56 -0700 (Wed, 29 Jun 2011)

Log Message

2011-06-29  Dimitri Glazkov  <[email protected]>

        Reviewed by Adam Barth.

        Extract setShadowRoot function, harden it in preparation to be exposed to script.
        https://bugs.webkit.org/show_bug.cgi?id=63596

        Refactoring, covered by existing tests.

        * dom/Element.cpp:
        (WebCore::validateShadowRoot): Added.
        (WebCore::Element::setShadowRoot): Extracted from ensureShadowRoot.
        (WebCore::Element::ensureShadowRoot): Changed to use setShadowRoot.
        * dom/Element.h: Added decl.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (90025 => 90026)


--- trunk/Source/WebCore/ChangeLog	2011-06-29 17:44:35 UTC (rev 90025)
+++ trunk/Source/WebCore/ChangeLog	2011-06-29 17:46:56 UTC (rev 90026)
@@ -1,3 +1,18 @@
+2011-06-29  Dimitri Glazkov  <[email protected]>
+
+        Reviewed by Adam Barth.
+
+        Extract setShadowRoot function, harden it in preparation to be exposed to script.
+        https://bugs.webkit.org/show_bug.cgi?id=63596
+
+        Refactoring, covered by existing tests.
+
+        * dom/Element.cpp:
+        (WebCore::validateShadowRoot): Added.
+        (WebCore::Element::setShadowRoot): Extracted from ensureShadowRoot.
+        (WebCore::Element::ensureShadowRoot): Changed to use setShadowRoot.
+        * dom/Element.h: Added decl.
+
 2011-06-29  Vsevolod Vlasov  <[email protected]>
 
         Reviewed by Pavel Feldman.

Modified: trunk/Source/WebCore/dom/Element.cpp (90025 => 90026)


--- trunk/Source/WebCore/dom/Element.cpp	2011-06-29 17:44:35 UTC (rev 90025)
+++ trunk/Source/WebCore/dom/Element.cpp	2011-06-29 17:46:56 UTC (rev 90026)
@@ -1196,19 +1196,49 @@
     return hasRareData() ? rareData()->m_shadowRoot : 0;
 }
 
+static bool validateShadowRoot(Document* document, ShadowRoot* shadowRoot, ExceptionCode& ec)
+{
+    if (!shadowRoot)
+        return true;
+
+    if (shadowRoot->shadowHost()) {
+        ec = HIERARCHY_REQUEST_ERR;
+        return false;
+    }
+
+    if (shadowRoot->document() != document) {
+        ec = WRONG_DOCUMENT_ERR;
+        return false;
+    }
+
+    return true;
+}
+
+void Element::setShadowRoot(PassRefPtr<ShadowRoot> prpShadowRoot, ExceptionCode& ec)
+{
+    RefPtr<ShadowRoot> shadowRoot = prpShadowRoot;
+    if (!validateShadowRoot(document(), shadowRoot.get(), ec))
+        return;
+
+    removeShadowRoot();
+
+    ensureRareData()->m_shadowRoot = shadowRoot.get();
+    shadowRoot->setShadowHost(this);
+    if (inDocument())
+        shadowRoot->insertedIntoDocument();
+    if (attached())
+        shadowRoot->lazyAttach();
+}
+
 ShadowRoot* Element::ensureShadowRoot()
 {
     if (ShadowRoot* existingRoot = shadowRoot())
         return existingRoot;
 
-    RefPtr<ShadowRoot> newRoot = ShadowRoot::create(document());
-    ensureRareData()->m_shadowRoot = newRoot.get();
-    newRoot->setShadowHost(this);
-    if (inDocument())
-        newRoot->insertedIntoDocument();
-    if (attached())
-        newRoot->lazyAttach();
-    return newRoot.get();
+    ExceptionCode ec = 0;
+    setShadowRoot(ShadowRoot::create(document()), ec);
+    ASSERT(!ec);
+    return shadowRoot();
 }
 
 void Element::removeShadowRoot()

Modified: trunk/Source/WebCore/dom/Element.h (90025 => 90026)


--- trunk/Source/WebCore/dom/Element.h	2011-06-29 17:44:35 UTC (rev 90025)
+++ trunk/Source/WebCore/dom/Element.h	2011-06-29 17:46:56 UTC (rev 90026)
@@ -231,6 +231,7 @@
     virtual void recalcStyle(StyleChange = NoChange);
 
     ShadowRoot* shadowRoot() const;
+    void setShadowRoot(PassRefPtr<ShadowRoot>, ExceptionCode&);
     ShadowRoot* ensureShadowRoot();
     void removeShadowRoot();
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to