diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp index 40aec28a852..1c838a2683a 100644 --- a/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp +++ b/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp @@ -37,6 +37,7 @@ #include "core/page/Chrome.h" #include "core/page/Page.h" #include "core/rendering/RenderDetailsMarker.h" +#include "wtf/TemporaryChange.h" using namespace WTF::Unicode; @@ -47,21 +48,20 @@ using namespace HTMLNames; inline PickerIndicatorElement::PickerIndicatorElement(Document& document, PickerIndicatorOwner& pickerIndicatorOwner) : HTMLDivElement(document) , m_pickerIndicatorOwner(&pickerIndicatorOwner) + , m_isInOpenPopup(false) { } -PassRefPtr<PickerIndicatorElement> PickerIndicatorElement::create(Document& document, PickerIndicatorOwner& pickerIndicatorOwner) +PassRefPtrWillBeRawPtr<PickerIndicatorElement> PickerIndicatorElement::create(Document& document, PickerIndicatorOwner& pickerIndicatorOwner) { - RefPtr<PickerIndicatorElement> element = adoptRef(new PickerIndicatorElement(document, pickerIndicatorOwner)); - element->setPseudo(AtomicString("-webkit-calendar-picker-indicator", AtomicString::ConstructFromLiteral)); + RefPtrWillBeRawPtr<PickerIndicatorElement> element = adoptRefWillBeNoop(new PickerIndicatorElement(document, pickerIndicatorOwner)); + element->setShadowPseudoId(AtomicString("-webkit-calendar-picker-indicator", AtomicString::ConstructFromLiteral)); element->setAttribute(idAttr, ShadowElementNames::pickerIndicator()); return element.release(); } PickerIndicatorElement::~PickerIndicatorElement() { - closePopup(); - ASSERT(!m_chooser); } RenderObject* PickerIndicatorElement::createRenderer(RenderStyle*) @@ -113,6 +113,12 @@ void PickerIndicatorElement::didEndChooser() void PickerIndicatorElement::openPopup() { + // The m_isInOpenPopup flag is unnecessary in production. + // MockPagePopupDriver allows to execute JavaScript code in + // DateTimeChooserImpl constructor. It might create another DateTimeChooser. + if (m_isInOpenPopup) + return; + TemporaryChange<bool> reentrancyProtector(m_isInOpenPopup, true); if (m_chooser) return; if (!document().page()) @@ -143,6 +149,14 @@ bool PickerIndicatorElement::isPickerIndicatorElement() const return true; } +void PickerIndicatorElement::trace(Visitor* visitor) +{ + visitor->trace(m_pickerIndicatorOwner); + visitor->trace(m_chooser); + HTMLDivElement::trace(visitor); + DateTimeChooserClient::trace(visitor); +} + } #endif |