summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/html/HTMLProgressElement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/HTMLProgressElement.cpp')
-rw-r--r--Source/WebCore/html/HTMLProgressElement.cpp31
1 files changed, 22 insertions, 9 deletions
diff --git a/Source/WebCore/html/HTMLProgressElement.cpp b/Source/WebCore/html/HTMLProgressElement.cpp
index 4a55a1e..cab0429 100644
--- a/Source/WebCore/html/HTMLProgressElement.cpp
+++ b/Source/WebCore/html/HTMLProgressElement.cpp
@@ -26,9 +26,11 @@
#include "EventNames.h"
#include "ExceptionCode.h"
#include "FormDataList.h"
+#include "HTMLDivElement.h"
#include "HTMLFormElement.h"
#include "HTMLNames.h"
#include "HTMLParserIdioms.h"
+#include "ProgressBarValueElement.h"
#include "RenderProgress.h"
#include <wtf/StdLibExtras.h>
@@ -60,21 +62,19 @@ const AtomicString& HTMLProgressElement::formControlType() const
void HTMLProgressElement::parseMappedAttribute(Attribute* attribute)
{
- if (attribute->name() == valueAttr) {
- if (renderer())
- renderer()->updateFromElement();
- } else if (attribute->name() == maxAttr) {
- if (renderer())
- renderer()->updateFromElement();
- } else
+ if (attribute->name() == valueAttr)
+ didElementStateChange();
+ else if (attribute->name() == maxAttr)
+ didElementStateChange();
+ else
HTMLFormControlElement::parseMappedAttribute(attribute);
}
void HTMLProgressElement::attach()
{
+ createShadowSubtreeIfNeeded();
HTMLFormControlElement::attach();
- if (renderer())
- renderer()->updateFromElement();
+ didElementStateChange();
}
double HTMLProgressElement::value() const
@@ -121,5 +121,18 @@ double HTMLProgressElement::position() const
return value() / max();
}
+void HTMLProgressElement::didElementStateChange()
+{
+ if (renderer())
+ renderer()->updateFromElement();
+}
+
+void HTMLProgressElement::createShadowSubtreeIfNeeded()
+{
+ if (shadowRoot())
+ return;
+ setShadowRoot(ProgressBarValueElement::create(document()).get());
+}
+
} // namespace
#endif