Stop calling Element::ensureShadowRoot() if it is used in construction phase.

https://bugs.webkit.org/show_bug.cgi?id=77929

Patch by Shinya Kawanaka <shinyak@google.com> on 2012-02-08
Reviewed by Hajime Morita.

ShadowRoot's life cycle can be consufing If Element::ensureShadowRoot() is used.
So we want to remove Element::ensureShadowRoot().
This patch replaces Element::ensureShadowRoot() if it is used in object construction phase.

No new tests, no change in behavior.

* html/HTMLDetailsElement.cpp:
(WebCore::HTMLDetailsElement::createShadowSubtree):
* html/HTMLKeygenElement.cpp:
(WebCore::HTMLKeygenElement::HTMLKeygenElement):
* html/HTMLMeterElement.cpp:
(WebCore::HTMLMeterElement::createShadowSubtree):
* html/HTMLProgressElement.cpp:
(WebCore::HTMLProgressElement::createShadowSubtree):
* html/HTMLSummaryElement.cpp:
(WebCore::HTMLSummaryElement::createShadowSubtree):
* html/HTMLTextAreaElement.cpp:
(WebCore::HTMLTextAreaElement::createShadowSubtree):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@107050 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent 525f5853
2012-02-08 Shinya Kawanaka <shinyak@google.com>
Stop calling Element::ensureShadowRoot() if it is used in construction phase.
https://bugs.webkit.org/show_bug.cgi?id=77929
Reviewed by Hajime Morita.
ShadowRoot's life cycle can be consufing If Element::ensureShadowRoot() is used.
So we want to remove Element::ensureShadowRoot().
This patch replaces Element::ensureShadowRoot() if it is used in object construction phase.
No new tests, no change in behavior.
* html/HTMLDetailsElement.cpp:
(WebCore::HTMLDetailsElement::createShadowSubtree):
* html/HTMLKeygenElement.cpp:
(WebCore::HTMLKeygenElement::HTMLKeygenElement):
* html/HTMLMeterElement.cpp:
(WebCore::HTMLMeterElement::createShadowSubtree):
* html/HTMLProgressElement.cpp:
(WebCore::HTMLProgressElement::createShadowSubtree):
* html/HTMLSummaryElement.cpp:
(WebCore::HTMLSummaryElement::createShadowSubtree):
* html/HTMLTextAreaElement.cpp:
(WebCore::HTMLTextAreaElement::createShadowSubtree):
2012-02-08 Nikolas Zimmermann <nzimmermann@rim.com>
Not reviewed. Add missing results for a new SVG test.
......@@ -109,8 +109,10 @@ RenderObject* HTMLDetailsElement::createRenderer(RenderArena* arena, RenderStyle
void HTMLDetailsElement::createShadowSubtree()
{
ASSERT(!shadowRoot());
ensureShadowRoot()->appendChild(DetailsSummaryElement::create(document()), ASSERT_NO_EXCEPTION, true);
ensureShadowRoot()->appendChild(DetailsContentElement::create(document()), ASSERT_NO_EXCEPTION, true);
RefPtr<ShadowRoot> root = ShadowRoot::create(this, ASSERT_NO_EXCEPTION);
root->appendChild(DetailsSummaryElement::create(document()), ASSERT_NO_EXCEPTION, true);
root->appendChild(DetailsContentElement::create(document()), ASSERT_NO_EXCEPTION, true);
}
Element* HTMLDetailsElement::findMainSummary() const
......
......@@ -85,7 +85,9 @@ inline HTMLKeygenElement::HTMLKeygenElement(const QualifiedName& tagName, Docume
option->appendChild(Text::create(document, keys[i]), ec);
}
ensureShadowRoot()->appendChild(select, ec);
ASSERT(!shadowRoot());
RefPtr<ShadowRoot> root = ShadowRoot::create(this, ASSERT_NO_EXCEPTION);
root->appendChild(select, ec);
}
PassRefPtr<HTMLKeygenElement> HTMLKeygenElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
......
......@@ -234,11 +234,15 @@ void HTMLMeterElement::didElementStateChange()
void HTMLMeterElement::createShadowSubtree()
{
ASSERT(!shadowRoot());
RefPtr<MeterBarElement> bar = MeterBarElement::create(document());
m_value = MeterValueElement::create(document());
ExceptionCode ec = 0;
bar->appendChild(m_value, ec);
ensureShadowRoot()->appendChild(bar, ec);
RefPtr<ShadowRoot> root = ShadowRoot::create(this, ASSERT_NO_EXCEPTION);
root->appendChild(bar, ec);
}
} // namespace
......
......@@ -153,11 +153,14 @@ void HTMLProgressElement::didElementStateChange()
void HTMLProgressElement::createShadowSubtree()
{
ASSERT(!shadowRoot());
RefPtr<ProgressBarElement> bar = ProgressBarElement::create(document());
m_value = ProgressValueElement::create(document());
ExceptionCode ec = 0;
bar->appendChild(m_value, ec);
ensureShadowRoot()->appendChild(bar, ec);
bar->appendChild(m_value, ASSERT_NO_EXCEPTION);
RefPtr<ShadowRoot> root = ShadowRoot::create(this, ASSERT_NO_EXCEPTION);
root->appendChild(bar, ASSERT_NO_EXCEPTION);
}
} // namespace
......
......@@ -73,9 +73,10 @@ RenderObject* HTMLSummaryElement::createRenderer(RenderArena* arena, RenderStyle
void HTMLSummaryElement::createShadowSubtree()
{
ExceptionCode ec = 0;
ensureShadowRoot()->appendChild(DetailsMarkerControl::create(document()), ec, true);
ensureShadowRoot()->appendChild(SummaryContentElement::create(document()), ec, true);
ASSERT(!shadowRoot());
RefPtr<ShadowRoot> root = ShadowRoot::create(this, ASSERT_NO_EXCEPTION);
root->appendChild(DetailsMarkerControl::create(document()), ASSERT_NO_EXCEPTION, true);
root->appendChild(SummaryContentElement::create(document()), ASSERT_NO_EXCEPTION, true);
}
HTMLDetailsElement* HTMLSummaryElement::detailsElement() const
......
......@@ -84,8 +84,9 @@ PassRefPtr<HTMLTextAreaElement> HTMLTextAreaElement::create(const QualifiedName&
void HTMLTextAreaElement::createShadowSubtree()
{
ExceptionCode ec = 0;
ensureShadowRoot()->appendChild(TextControlInnerTextElement::create(document()), ec);
ASSERT(!shadowRoot());
RefPtr<ShadowRoot> root = ShadowRoot::create(this, ASSERT_NO_EXCEPTION);
root->appendChild(TextControlInnerTextElement::create(document()), ASSERT_NO_EXCEPTION);
}
const AtomicString& HTMLTextAreaElement::formControlType() const
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment