Commit eaa56600 authored by sigbjornf's avatar sigbjornf Committed by Commit bot

Oilpan: move BaseChooserOnlyDateAndTimeInputType to the heap.

Move this !ENABLE(INPUT_MULTIPLE_FIELDS_UI) object to the Oilpan heap,
where it belongs as it derives from the on-heap BaseDateAndTimeInputType
class.

At the same time, turn DateTimeChooserClient into a GC mixin.

R=haraken
BUG=553613

Review URL: https://codereview.chromium.org/1466113002

Cr-Commit-Position: refs/heads/master@{#361071}
parent 42ee07bf
...@@ -38,9 +38,27 @@ ...@@ -38,9 +38,27 @@
namespace blink { namespace blink {
BaseChooserOnlyDateAndTimeInputType::BaseChooserOnlyDateAndTimeInputType(HTMLInputElement& element)
: BaseDateAndTimeInputType(element)
{
#if ENABLE(OILPAN)
ThreadState::current()->registerPreFinalizer(this);
#endif
}
BaseChooserOnlyDateAndTimeInputType::~BaseChooserOnlyDateAndTimeInputType() BaseChooserOnlyDateAndTimeInputType::~BaseChooserOnlyDateAndTimeInputType()
{ {
#if !ENABLE(OILPAN)
closeDateTimeChooser(); closeDateTimeChooser();
#endif
ASSERT(!m_dateTimeChooser);
}
DEFINE_TRACE(BaseChooserOnlyDateAndTimeInputType)
{
visitor->trace(m_dateTimeChooser);
BaseDateAndTimeInputType::trace(visitor);
DateTimeChooserClient::trace(visitor);
} }
void BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent(Event*) void BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent(Event*)
......
...@@ -31,14 +31,19 @@ ...@@ -31,14 +31,19 @@
#include "core/html/forms/BaseDateAndTimeInputType.h" #include "core/html/forms/BaseDateAndTimeInputType.h"
#include "core/html/forms/DateTimeChooser.h" #include "core/html/forms/DateTimeChooser.h"
#include "core/html/forms/DateTimeChooserClient.h" #include "core/html/forms/DateTimeChooserClient.h"
#include "platform/heap/Handle.h"
namespace blink { namespace blink {
class BaseChooserOnlyDateAndTimeInputType : public BaseDateAndTimeInputType, public DateTimeChooserClient { class BaseChooserOnlyDateAndTimeInputType : public BaseDateAndTimeInputType, public DateTimeChooserClient {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(BaseChooserOnlyDateAndTimeInputType);
WILL_BE_USING_PRE_FINALIZER(BaseChooserOnlyDateAndTimeInputType, closeDateTimeChooser);
protected: protected:
BaseChooserOnlyDateAndTimeInputType(HTMLInputElement& element) : BaseDateAndTimeInputType(element) { } BaseChooserOnlyDateAndTimeInputType(HTMLInputElement&);
~BaseChooserOnlyDateAndTimeInputType() override; ~BaseChooserOnlyDateAndTimeInputType() override;
DECLARE_VIRTUAL_TRACE();
private: private:
void closeDateTimeChooser(); void closeDateTimeChooser();
...@@ -59,9 +64,10 @@ private: ...@@ -59,9 +64,10 @@ private:
void didChooseValue(double) override; void didChooseValue(double) override;
void didEndChooser() override; void didEndChooser() override;
RefPtr<DateTimeChooser> m_dateTimeChooser; RefPtrWillBeMember<DateTimeChooser> m_dateTimeChooser;
}; };
} } // namespace blink
#endif
#endif #endif // ENABLE(INPUT_MULTIPLE_FIELDS_UI)
#endif // BaseChooserOnlyDateAndTimeInputType_h
...@@ -47,7 +47,8 @@ public: ...@@ -47,7 +47,8 @@ public:
static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&); static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&);
private: private:
DateInputType(HTMLInputElement&); explicit DateInputType(HTMLInputElement&);
void countUsage() override; void countUsage() override;
const AtomicString& formControlType() const override; const AtomicString& formControlType() const override;
StepRange createStepRange(AnyStepHandling) const override; StepRange createStepRange(AnyStepHandling) const override;
......
...@@ -31,15 +31,17 @@ ...@@ -31,15 +31,17 @@
#ifndef DateTimeChooserClient_h #ifndef DateTimeChooserClient_h
#define DateTimeChooserClient_h #define DateTimeChooserClient_h
#include "wtf/text/WTFString.h" #include "platform/heap/Handle.h"
#include "wtf/Forward.h"
namespace blink { namespace blink {
class Element; class Element;
class DateTimeChooserClient { class DateTimeChooserClient : public WillBeGarbageCollectedMixin {
public: public:
virtual ~DateTimeChooserClient(); virtual ~DateTimeChooserClient();
DEFINE_INLINE_VIRTUAL_TRACE() { }
virtual Element& ownerElement() const = 0; virtual Element& ownerElement() const = 0;
// Called when user picked a value. // Called when user picked a value.
......
...@@ -49,7 +49,8 @@ public: ...@@ -49,7 +49,8 @@ public:
static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&); static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&);
private: private:
DateTimeLocalInputType(HTMLInputElement& element) : BaseDateTimeLocalInputType(element) { } explicit DateTimeLocalInputType(HTMLInputElement& element) : BaseDateTimeLocalInputType(element) { }
void countUsage() override; void countUsage() override;
const AtomicString& formControlType() const override; const AtomicString& formControlType() const override;
double valueAsDate() const override; double valueAsDate() const override;
......
...@@ -47,7 +47,8 @@ public: ...@@ -47,7 +47,8 @@ public:
static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&); static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&);
private: private:
MonthInputType(HTMLInputElement& element) : BaseMonthInputType(element) { } explicit MonthInputType(HTMLInputElement& element) : BaseMonthInputType(element) { }
void countUsage() override; void countUsage() override;
const AtomicString& formControlType() const override; const AtomicString& formControlType() const override;
double valueAsDate() const override; double valueAsDate() const override;
......
...@@ -47,7 +47,8 @@ public: ...@@ -47,7 +47,8 @@ public:
static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&); static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&);
private: private:
TimeInputType(HTMLInputElement&); explicit TimeInputType(HTMLInputElement&);
void countUsage() override; void countUsage() override;
const AtomicString& formControlType() const override; const AtomicString& formControlType() const override;
Decimal defaultValueForStepUp() const override; Decimal defaultValueForStepUp() const override;
...@@ -56,8 +57,8 @@ private: ...@@ -56,8 +57,8 @@ private:
bool setMillisecondToDateComponents(double, DateComponents*) const override; bool setMillisecondToDateComponents(double, DateComponents*) const override;
void warnIfValueIsInvalid(const String&) const override; void warnIfValueIsInvalid(const String&) const override;
String localizeValue(const String&) const override; String localizeValue(const String&) const override;
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
// BaseMultipleFieldsDateAndTimeInputType functions // BaseMultipleFieldsDateAndTimeInputType functions
String formatDateTimeFieldsState(const DateTimeFieldsState&) const override; String formatDateTimeFieldsState(const DateTimeFieldsState&) const override;
void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const override; void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const override;
......
...@@ -47,7 +47,8 @@ public: ...@@ -47,7 +47,8 @@ public:
static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&); static PassRefPtrWillBeRawPtr<InputType> create(HTMLInputElement&);
private: private:
WeekInputType(HTMLInputElement& element) : BaseWeekInputType(element) { } explicit WeekInputType(HTMLInputElement& element) : BaseWeekInputType(element) { }
void countUsage() override; void countUsage() override;
const AtomicString& formControlType() const override; const AtomicString& formControlType() const override;
StepRange createStepRange(AnyStepHandling) const override; StepRange createStepRange(AnyStepHandling) const override;
......
...@@ -187,8 +187,9 @@ DEFINE_TRACE(PickerIndicatorElement) ...@@ -187,8 +187,9 @@ DEFINE_TRACE(PickerIndicatorElement)
visitor->trace(m_pickerIndicatorOwner); visitor->trace(m_pickerIndicatorOwner);
visitor->trace(m_chooser); visitor->trace(m_chooser);
HTMLDivElement::trace(visitor); HTMLDivElement::trace(visitor);
DateTimeChooserClient::trace(visitor);
} }
} } // namespace blink
#endif #endif // ENABLE(INPUT_MULTIPLE_FIELDS_UI)
...@@ -41,6 +41,7 @@ namespace blink { ...@@ -41,6 +41,7 @@ namespace blink {
class HTMLInputElement; class HTMLInputElement;
class PickerIndicatorElement final : public HTMLDivElement, public DateTimeChooserClient { class PickerIndicatorElement final : public HTMLDivElement, public DateTimeChooserClient {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(PickerIndicatorElement);
public: public:
// PickerIndicatorOwner implementer must call removePickerIndicatorOwner when // PickerIndicatorOwner implementer must call removePickerIndicatorOwner when
// it doesn't handle event, e.g. at destruction. // it doesn't handle event, e.g. at destruction.
......
...@@ -70,6 +70,7 @@ DateTimeChooserImpl::~DateTimeChooserImpl() ...@@ -70,6 +70,7 @@ DateTimeChooserImpl::~DateTimeChooserImpl()
DEFINE_TRACE(DateTimeChooserImpl) DEFINE_TRACE(DateTimeChooserImpl)
{ {
visitor->trace(m_chromeClient); visitor->trace(m_chromeClient);
visitor->trace(m_client);
DateTimeChooser::trace(visitor); DateTimeChooser::trace(visitor);
} }
...@@ -204,7 +205,7 @@ void DateTimeChooserImpl::closePopup() ...@@ -204,7 +205,7 @@ void DateTimeChooserImpl::closePopup()
void DateTimeChooserImpl::didClosePopup() void DateTimeChooserImpl::didClosePopup()
{ {
ASSERT(m_client); ASSERT(m_client);
m_popup = 0; m_popup = nullptr;
m_client->didEndChooser(); m_client->didEndChooser();
} }
......
...@@ -65,7 +65,7 @@ private: ...@@ -65,7 +65,7 @@ private:
void didClosePopup() override; void didClosePopup() override;
RawPtrWillBeMember<ChromeClientImpl> m_chromeClient; RawPtrWillBeMember<ChromeClientImpl> m_chromeClient;
DateTimeChooserClient* m_client; RawPtrWillBeMember<DateTimeChooserClient> m_client;
PagePopup* m_popup; PagePopup* m_popup;
DateTimeChooserParameters m_parameters; DateTimeChooserParameters m_parameters;
OwnPtr<Locale> m_locale; OwnPtr<Locale> m_locale;
......
...@@ -63,23 +63,29 @@ private: ...@@ -63,23 +63,29 @@ private:
delete this; delete this;
} }
RefPtr<ExternalDateTimeChooser> m_chooser; RefPtrWillBePersistent<ExternalDateTimeChooser> m_chooser;
}; };
ExternalDateTimeChooser::~ExternalDateTimeChooser() ExternalDateTimeChooser::~ExternalDateTimeChooser()
{ {
} }
DEFINE_TRACE(ExternalDateTimeChooser)
{
visitor->trace(m_client);
DateTimeChooser::trace(visitor);
}
ExternalDateTimeChooser::ExternalDateTimeChooser(DateTimeChooserClient* client) ExternalDateTimeChooser::ExternalDateTimeChooser(DateTimeChooserClient* client)
: m_client(client) : m_client(client)
{ {
ASSERT(client); ASSERT(client);
} }
PassRefPtr<ExternalDateTimeChooser> ExternalDateTimeChooser::create(ChromeClientImpl* chromeClient, WebViewClient* webViewClient, DateTimeChooserClient* client, const DateTimeChooserParameters& parameters) PassRefPtrWillBeRawPtr<ExternalDateTimeChooser> ExternalDateTimeChooser::create(ChromeClientImpl* chromeClient, WebViewClient* webViewClient, DateTimeChooserClient* client, const DateTimeChooserParameters& parameters)
{ {
ASSERT(chromeClient); ASSERT(chromeClient);
RefPtr<ExternalDateTimeChooser> chooser = adoptRef(new ExternalDateTimeChooser(client)); RefPtrWillBeRawPtr<ExternalDateTimeChooser> chooser = adoptRefWillBeNoop(new ExternalDateTimeChooser(client));
if (!chooser->openDateTimeChooser(chromeClient, webViewClient, parameters)) if (!chooser->openDateTimeChooser(chromeClient, webViewClient, parameters))
chooser.clear(); chooser.clear();
return chooser.release(); return chooser.release();
...@@ -162,13 +168,13 @@ void ExternalDateTimeChooser::didCancelChooser() ...@@ -162,13 +168,13 @@ void ExternalDateTimeChooser::didCancelChooser()
void ExternalDateTimeChooser::endChooser() void ExternalDateTimeChooser::endChooser()
{ {
DateTimeChooserClient* client = m_client; DateTimeChooserClient* client = m_client;
m_client = 0; m_client = nullptr;
client->didEndChooser(); client->didEndChooser();
} }
AXObject* ExternalDateTimeChooser::rootAXObject() AXObject* ExternalDateTimeChooser::rootAXObject()
{ {
return 0; return nullptr;
} }
} // namespace blink } // namespace blink
......
...@@ -40,6 +40,7 @@ class ExternalDateTimeChooser final : public DateTimeChooser { ...@@ -40,6 +40,7 @@ class ExternalDateTimeChooser final : public DateTimeChooser {
public: public:
static PassRefPtrWillBeRawPtr<ExternalDateTimeChooser> create(ChromeClientImpl*, WebViewClient*, DateTimeChooserClient*, const DateTimeChooserParameters&); static PassRefPtrWillBeRawPtr<ExternalDateTimeChooser> create(ChromeClientImpl*, WebViewClient*, DateTimeChooserClient*, const DateTimeChooserParameters&);
~ExternalDateTimeChooser() override; ~ExternalDateTimeChooser() override;
DECLARE_VIRTUAL_TRACE();
// The following functions are for DateTimeChooserCompletion. // The following functions are for DateTimeChooserCompletion.
void didChooseValue(const WebString&); void didChooseValue(const WebString&);
...@@ -54,7 +55,7 @@ private: ...@@ -54,7 +55,7 @@ private:
void endChooser() override; void endChooser() override;
AXObject* rootAXObject() override; AXObject* rootAXObject() override;
DateTimeChooserClient* m_client; RawPtrWillBeMember<DateTimeChooserClient> m_client;
}; };
} }
......
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