Commit 8142249a authored by sigbjornf's avatar sigbjornf Committed by Commit bot

Oilpan: insist on persisted plugin disposal upon clearing.

Follow up r355010 and arrange for persisted plugin widget disposal
when the plugin is completely detached and removed from the tree.

r355010 restricted disposal to not happen for persisted widgets
when re-attaching, but also ended up not disposing for the
fully-detached persistent plugin widget case.

Lacking those, widgets would end up being finalized without their
required dispose() having been called first.

R=haraken
BUG=544175

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

Cr-Commit-Position: refs/heads/master@{#357142}
parent 113c0a97
......@@ -114,6 +114,8 @@ void HTMLPlugInElement::setPersistedPluginWidget(Widget* widget)
#if ENABLE(OILPAN)
unregisterAsRenderlessIfNeeded();
registerAsRenderless(widget);
if (m_persistedPluginWidget)
m_persistedPluginWidget->dispose();
#endif
m_persistedPluginWidget = widget;
}
......@@ -124,10 +126,6 @@ bool HTMLPlugInElement::unregisterAsRenderlessIfNeeded()
if (!m_persistedPluginWidget || !m_persistedPluginWidget->isPluginView())
return false;
// If we are in a renderer-less state, keep the registration.
if (!layoutEmbeddedObject())
return false;
LocalFrame* frame = toPluginView(m_persistedPluginWidget.get())->pluginFrame();
ASSERT(frame);
frame->unregisterPluginElement(this);
......@@ -148,7 +146,9 @@ void HTMLPlugInElement::registerAsRenderless(Widget* widget)
PassRefPtrWillBeRawPtr<Widget> HTMLPlugInElement::releasePersistedPluginWidget()
{
#if ENABLE(OILPAN)
unregisterAsRenderlessIfNeeded();
// If we are in a renderer-less state, keep the registration.
if (layoutEmbeddedObject())
unregisterAsRenderlessIfNeeded();
#endif
return m_persistedPluginWidget.release();
}
......
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