diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2016-08-25 19:20:41 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-02-02 12:30:55 +0000 |
commit | 6882a04fb36642862b11efe514251d32070c3d65 (patch) | |
tree | b7959826000b061fd5ccc7512035c7478742f7b0 /Source/WebCore/html/HTMLProgressElement.cpp | |
parent | ab6df191029eeeb0b0f16f127d553265659f739e (diff) | |
download | qtwebkit-6882a04fb36642862b11efe514251d32070c3d65.tar.gz |
Imported QtWebKit TP3 (git b57bc6801f1876c3220d5a4bfea33d620d477443)
Change-Id: I3b1d8a2808782c9f34d50240000e20cb38d3680f
Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/WebCore/html/HTMLProgressElement.cpp')
-rw-r--r-- | Source/WebCore/html/HTMLProgressElement.cpp | 61 |
1 files changed, 27 insertions, 34 deletions
diff --git a/Source/WebCore/html/HTMLProgressElement.cpp b/Source/WebCore/html/HTMLProgressElement.cpp index 3d791c47e..91c15f18f 100644 --- a/Source/WebCore/html/HTMLProgressElement.cpp +++ b/Source/WebCore/html/HTMLProgressElement.cpp @@ -19,16 +19,13 @@ */ #include "config.h" -#if ENABLE(PROGRESS_ELEMENT) #include "HTMLProgressElement.h" -#include "Attribute.h" +#include "ElementIterator.h" #include "EventNames.h" #include "ExceptionCode.h" -#include "HTMLDivElement.h" #include "HTMLNames.h" #include "HTMLParserIdioms.h" -#include "NodeRenderingContext.h" #include "ProgressShadowElement.h" #include "RenderProgress.h" #include "ShadowRoot.h" @@ -40,45 +37,43 @@ using namespace HTMLNames; const double HTMLProgressElement::IndeterminatePosition = -1; const double HTMLProgressElement::InvalidPosition = -2; -HTMLProgressElement::HTMLProgressElement(const QualifiedName& tagName, Document* document) +HTMLProgressElement::HTMLProgressElement(const QualifiedName& tagName, Document& document) : LabelableElement(tagName, document) , m_value(0) { ASSERT(hasTagName(progressTag)); + setHasCustomStyleResolveCallbacks(); } HTMLProgressElement::~HTMLProgressElement() { } -PassRefPtr<HTMLProgressElement> HTMLProgressElement::create(const QualifiedName& tagName, Document* document) +Ref<HTMLProgressElement> HTMLProgressElement::create(const QualifiedName& tagName, Document& document) { - RefPtr<HTMLProgressElement> progress = adoptRef(new HTMLProgressElement(tagName, document)); + Ref<HTMLProgressElement> progress = adoptRef(*new HTMLProgressElement(tagName, document)); progress->ensureUserAgentShadowRoot(); - return progress.release(); + return progress; } -RenderObject* HTMLProgressElement::createRenderer(RenderArena* arena, RenderStyle* style) +RenderPtr<RenderElement> HTMLProgressElement::createElementRenderer(Ref<RenderStyle>&& style, const RenderTreePosition&) { - if (!style->hasAppearance() || hasAuthorShadowRoot()) - return RenderObject::createObject(this, style); + if (!style.get().hasAppearance()) + return RenderElement::createFor(*this, WTFMove(style)); - return new (arena) RenderProgress(this); + return createRenderer<RenderProgress>(*this, WTFMove(style)); } -bool HTMLProgressElement::childShouldCreateRenderer(const NodeRenderingContext& childContext) const +bool HTMLProgressElement::childShouldCreateRenderer(const Node& child) const { - return childContext.isOnUpperEncapsulationBoundary() && HTMLElement::childShouldCreateRenderer(childContext); + return hasShadowRootParent(child) && HTMLElement::childShouldCreateRenderer(child); } RenderProgress* HTMLProgressElement::renderProgress() const { - if (renderer() && renderer()->isProgress()) - return static_cast<RenderProgress*>(renderer()); - - RenderObject* renderObject = userAgentShadowRoot()->firstChild()->renderer(); - ASSERT_WITH_SECURITY_IMPLICATION(!renderObject || renderObject->isProgress()); - return static_cast<RenderProgress*>(renderObject); + if (is<RenderProgress>(renderer())) + return downcast<RenderProgress>(renderer()); + return downcast<RenderProgress>(descendantsOfType<Element>(*userAgentShadowRoot()).first()->renderer()); } void HTMLProgressElement::parseAttribute(const QualifiedName& name, const AtomicString& value) @@ -91,9 +86,8 @@ void HTMLProgressElement::parseAttribute(const QualifiedName& name, const Atomic LabelableElement::parseAttribute(name, value); } -void HTMLProgressElement::attach(const AttachContext& context) +void HTMLProgressElement::didAttachRenderers() { - LabelableElement::attach(context); if (RenderProgress* render = renderProgress()) render->updateFromElement(); } @@ -110,12 +104,12 @@ void HTMLProgressElement::setValue(double value, ExceptionCode& ec) ec = NOT_SUPPORTED_ERR; return; } - setAttribute(valueAttr, String::number(value >= 0 ? value : 0)); + setAttribute(valueAttr, AtomicString::number(value >= 0 ? value : 0)); } double HTMLProgressElement::max() const { - double max = parseToDoubleForNumberType(getAttribute(maxAttr)); + double max = parseToDoubleForNumberType(fastGetAttribute(maxAttr)); return !std::isfinite(max) || max <= 0 ? 1 : max; } @@ -125,7 +119,7 @@ void HTMLProgressElement::setMax(double max, ExceptionCode& ec) ec = NOT_SUPPORTED_ERR; return; } - setAttribute(maxAttr, String::number(max > 0 ? max : 1)); + setAttribute(maxAttr, AtomicString::number(max > 0 ? max : 1)); } double HTMLProgressElement::position() const @@ -147,7 +141,7 @@ void HTMLProgressElement::didElementStateChange() bool wasDeterminate = render->isDeterminate(); render->updateFromElement(); if (wasDeterminate != isDeterminate()) - didAffectSelector(AffectedSelectorIndeterminate); + setNeedsStyleRecalc(); } } @@ -155,16 +149,16 @@ void HTMLProgressElement::didAddUserAgentShadowRoot(ShadowRoot* root) { ASSERT(!m_value); - RefPtr<ProgressInnerElement> inner = ProgressInnerElement::create(document()); - root->appendChild(inner); + Ref<ProgressInnerElement> inner = ProgressInnerElement::create(document()); + root->appendChild(inner.copyRef()); - RefPtr<ProgressBarElement> bar = ProgressBarElement::create(document()); - RefPtr<ProgressValueElement> value = ProgressValueElement::create(document()); - m_value = value.get(); + Ref<ProgressBarElement> bar = ProgressBarElement::create(document()); + Ref<ProgressValueElement> value = ProgressValueElement::create(document()); + m_value = value.ptr(); m_value->setWidthPercentage(HTMLProgressElement::IndeterminatePosition * 100); - bar->appendChild(m_value, ASSERT_NO_EXCEPTION); + bar->appendChild(*m_value, ASSERT_NO_EXCEPTION); - inner->appendChild(bar, ASSERT_NO_EXCEPTION); + inner->appendChild(WTFMove(bar), ASSERT_NO_EXCEPTION); } bool HTMLProgressElement::shouldAppearIndeterminate() const @@ -173,4 +167,3 @@ bool HTMLProgressElement::shouldAppearIndeterminate() const } } // namespace -#endif |