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