Oilpan: trace ColorChooserPopupUIController::m_chromeClient
R=haraken
BUG=553613
Review URL: https://codereview.chromium.org/1442543003
Cr-Commit-Position: refs/heads/master@{#361043}
diff --git a/third_party/WebKit/Source/web/ColorChooserPopupUIController.cpp b/third_party/WebKit/Source/web/ColorChooserPopupUIController.cpp
index e790461..2d8f22d 100644
--- a/third_party/WebKit/Source/web/ColorChooserPopupUIController.cpp
+++ b/third_party/WebKit/Source/web/ColorChooserPopupUIController.cpp
@@ -47,17 +47,34 @@
ColorChooserPopupUIController::ColorChooserPopupUIController(LocalFrame* frame, ChromeClientImpl* chromeClient, ColorChooserClient* client)
: ColorChooserUIController(frame, client)
, m_chromeClient(chromeClient)
- , m_popup(0)
+ , m_popup(nullptr)
, m_locale(Locale::defaultLocale())
{
+#if ENABLE(OILPAN)
+ ThreadState::current()->registerPreFinalizer(this);
+#endif
}
ColorChooserPopupUIController::~ColorChooserPopupUIController()
{
+#if !ENABLE(OILPAN)
closePopup();
+#endif
// ~ColorChooserUIController ends the ColorChooser.
}
+void ColorChooserPopupUIController::dispose()
+{
+ // Finalized earlier so as to access m_chromeClient while alive.
+ closePopup();
+}
+
+DEFINE_TRACE(ColorChooserPopupUIController)
+{
+ visitor->trace(m_chromeClient);
+ ColorChooserUIController::trace(visitor);
+}
+
void ColorChooserPopupUIController::openUI()
{
if (m_client->shouldShowSuggestions())
@@ -76,7 +93,7 @@
AXObject* ColorChooserPopupUIController::rootAXObject()
{
- return m_popup ? m_popup->rootAXObject() : 0;
+ return m_popup ? m_popup->rootAXObject() : nullptr;
}
void ColorChooserPopupUIController::writeDocument(SharedBuffer* data)
@@ -128,7 +145,7 @@
void ColorChooserPopupUIController::didClosePopup()
{
- m_popup = 0;
+ m_popup = nullptr;
if (!m_chooser)
didEndChooser();
diff --git a/third_party/WebKit/Source/web/ColorChooserPopupUIController.h b/third_party/WebKit/Source/web/ColorChooserPopupUIController.h
index 155210b..30995601 100644
--- a/third_party/WebKit/Source/web/ColorChooserPopupUIController.h
+++ b/third_party/WebKit/Source/web/ColorChooserPopupUIController.h
@@ -37,7 +37,7 @@
class PagePopup;
class ColorChooserPopupUIController final : public ColorChooserUIController, public PagePopupClient {
-
+ WILL_BE_USING_PRE_FINALIZER(ColorChooserPopupUIController, dispose);
public:
static PassOwnPtrWillBeRawPtr<ColorChooserPopupUIController> create(LocalFrame* frame, ChromeClientImpl* chromeClient, ColorChooserClient* client)
{
@@ -45,6 +45,7 @@
}
~ColorChooserPopupUIController() override;
+ DECLARE_VIRTUAL_TRACE();
// ColorChooserUIController functions:
void openUI() override;
@@ -67,8 +68,9 @@
ColorChooserPopupUIController(LocalFrame*, ChromeClientImpl*, ColorChooserClient*);
void openPopup();
+ void dispose();
- ChromeClientImpl* m_chromeClient;
+ RawPtrWillBeMember<ChromeClientImpl> m_chromeClient;
PagePopup* m_popup;
Locale& m_locale;
};