| Index: Source/core/html/HTMLPlugInElement.cpp
|
| diff --git a/Source/core/html/HTMLPlugInElement.cpp b/Source/core/html/HTMLPlugInElement.cpp
|
| index 107e71308eda5e0c611ebd75b42bfd9485e59875..51d2cb231ead15ee4dc7e7e3b3a82018022c5184 100644
|
| --- a/Source/core/html/HTMLPlugInElement.cpp
|
| +++ b/Source/core/html/HTMLPlugInElement.cpp
|
| @@ -77,6 +77,11 @@ HTMLPlugInElement::~HTMLPlugInElement()
|
| ASSERT(!m_pluginWrapper); // cleared in detach()
|
| ASSERT(!m_isDelayingLoadEvent);
|
|
|
| +#if ENABLE(OILPAN)
|
| + if (m_persistedPluginWidget)
|
| + HTMLFrameOwnerElement::disposeWidget(m_persistedPluginWidget.get());
|
| +#endif
|
| +
|
| if (m_NPObject) {
|
| _NPN_ReleaseObject(m_NPObject);
|
| m_NPObject = 0;
|
| @@ -86,9 +91,19 @@ HTMLPlugInElement::~HTMLPlugInElement()
|
| void HTMLPlugInElement::trace(Visitor* visitor)
|
| {
|
| visitor->trace(m_imageLoader);
|
| + visitor->trace(m_persistedPluginWidget);
|
| HTMLFrameOwnerElement::trace(visitor);
|
| }
|
|
|
| +#if ENABLE(OILPAN)
|
| +void HTMLPlugInElement::disconnectContentFrame()
|
| +{
|
| + if (m_persistedPluginWidget)
|
| + HTMLFrameOwnerElement::disposeWidget(m_persistedPluginWidget.get());
|
| + HTMLFrameOwnerElement::disconnectContentFrame();
|
| +}
|
| +#endif
|
| +
|
| bool HTMLPlugInElement::canProcessDrag() const
|
| {
|
| return pluginWidget() && pluginWidget()->isPluginView() && toPluginView(pluginWidget())->canProcessDrag();
|
| @@ -202,12 +217,9 @@ void HTMLPlugInElement::detach(const AttachContext& context)
|
| Widget* plugin = ownedWidget();
|
| if (plugin && plugin->pluginShouldPersist())
|
| m_persistedPluginWidget = plugin;
|
| -#if ENABLE(OILPAN)
|
| - else if (plugin)
|
| - plugin->detach();
|
| -#endif
|
| +
|
| resetInstance();
|
| - // FIXME - is this next line necessary?
|
| + // Clear the widget; will trigger disposal of it with Oilpan.
|
| setWidget(nullptr);
|
|
|
| if (m_isCapturingMouseEvents) {
|
| @@ -335,7 +347,7 @@ void HTMLPlugInElement::defaultEventHandler(Event* event)
|
| if (toRenderEmbeddedObject(r)->showsUnavailablePluginIndicator())
|
| return;
|
| }
|
| - RefPtr<Widget> widget = toRenderWidget(r)->widget();
|
| + RefPtrWillBeRawPtr<Widget> widget = toRenderWidget(r)->widget();
|
| if (!widget)
|
| return;
|
| widget->handleEvent(event);
|
| @@ -475,7 +487,7 @@ bool HTMLPlugInElement::loadPlugin(const KURL& url, const String& mimeType, cons
|
| WTF_LOG(Plugins, " Loaded URL: %s", url.string().utf8().data());
|
| m_loadedUrl = url;
|
|
|
| - RefPtr<Widget> widget = m_persistedPluginWidget;
|
| + RefPtrWillBeRawPtr<Widget> widget = m_persistedPluginWidget;
|
| if (!widget) {
|
| bool loadManually = document().isPluginDocument() && !document().containsPlugins();
|
| FrameLoaderClient::DetachedPluginPolicy policy = requireRenderer ? FrameLoaderClient::FailOnDetachedPlugin : FrameLoaderClient::AllowDetachedPlugin;
|
|
|