| Index: Source/core/html/HTMLDetailsElement.cpp
|
| diff --git a/Source/core/html/HTMLDetailsElement.cpp b/Source/core/html/HTMLDetailsElement.cpp
|
| index e88582f38346562b1a90eb2a2c08632017d8e353..0ae3e6c26dbd737293bfefe4738996b64ff05fe2 100644
|
| --- a/Source/core/html/HTMLDetailsElement.cpp
|
| +++ b/Source/core/html/HTMLDetailsElement.cpp
|
| @@ -47,11 +47,24 @@ PassRefPtr<HTMLDetailsElement> HTMLDetailsElement::create(Document& document)
|
|
|
| HTMLDetailsElement::HTMLDetailsElement(Document& document)
|
| : HTMLElement(detailsTag, document)
|
| + , m_toggleEventTimer(this, &HTMLDetailsElement::toggleEventTimerFired)
|
| , m_isOpen(false)
|
| {
|
| ScriptWrappable::init(this);
|
| }
|
|
|
| +void HTMLDetailsElement::toggleEventTimerFired(Timer<HTMLDetailsElement> *)
|
| +{
|
| + dispatchEvent(Event::create(EventTypeNames::toggle));
|
| +}
|
| +
|
| +void HTMLDetailsElement::dispatchToggleEventAsync()
|
| +{
|
| + if (m_toggleEventTimer.isActive())
|
| + m_toggleEventTimer.stop();
|
| + m_toggleEventTimer.startOneShot(0, FROM_HERE);
|
| +}
|
| +
|
| RenderObject* HTMLDetailsElement::createRenderer(RenderStyle*)
|
| {
|
| return new RenderBlockFlow(this);
|
| @@ -94,6 +107,10 @@ void HTMLDetailsElement::parseAttribute(const QualifiedName& name, const AtomicS
|
| m_isOpen = !value.isNull();
|
| if (m_isOpen == oldValue)
|
| return;
|
| +
|
| + // Dispatch toggle event asynchronously.
|
| + dispatchToggleEventAsync();
|
| +
|
| Element* content = ensureUserAgentShadowRoot().getElementById(ShadowElementNames::detailsContent());
|
| ASSERT(content);
|
| if (m_isOpen)
|
|
|