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