| Index: Source/web/WebPluginContainerImpl.h
 | 
| diff --git a/Source/web/WebPluginContainerImpl.h b/Source/web/WebPluginContainerImpl.h
 | 
| index 5f390335640575b745605eefe4bba6c2d88cb172..c94a34557e359b7802f46ba9c2a201ef4d0a009f 100644
 | 
| --- a/Source/web/WebPluginContainerImpl.h
 | 
| +++ b/Source/web/WebPluginContainerImpl.h
 | 
| @@ -54,6 +54,7 @@ class MouseEvent;
 | 
|  class PlatformGestureEvent;
 | 
|  class ResourceError;
 | 
|  class ResourceResponse;
 | 
| +class ScriptController;
 | 
|  class ScrollbarGroup;
 | 
|  class TouchEvent;
 | 
|  class WebPlugin;
 | 
| @@ -63,17 +64,12 @@ class WheelEvent;
 | 
|  class Widget;
 | 
|  struct WebPrintParams;
 | 
|  
 | 
| -class WebPluginContainerImpl final
 | 
| -    : public PluginView
 | 
| -    , public WebPluginContainer
 | 
| -#if !ENABLE(OILPAN)
 | 
| -    , public FrameDestructionObserver
 | 
| -#endif
 | 
| -    {
 | 
| +class WebPluginContainerImpl final : public PluginView, public WebPluginContainer, public FrameDestructionObserver {
 | 
| +    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(WebPluginContainerImpl);
 | 
|  public:
 | 
| -    static PassRefPtr<WebPluginContainerImpl> create(HTMLPlugInElement* element, WebPlugin* webPlugin)
 | 
| +    static PassRefPtrWillBeRawPtr<WebPluginContainerImpl> create(HTMLPlugInElement* element, WebPlugin* webPlugin)
 | 
|      {
 | 
| -        return adoptRef(new WebPluginContainerImpl(element, webPlugin));
 | 
| +        return adoptRefWillBeNoop(new WebPluginContainerImpl(element, webPlugin));
 | 
|      }
 | 
|  
 | 
|      // PluginView methods
 | 
| @@ -169,8 +165,12 @@ public:
 | 
|  
 | 
|      bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&);
 | 
|  
 | 
| +    virtual void trace(Visitor*) override;
 | 
| +    virtual void dispose() override;
 | 
| +
 | 
|  #if ENABLE(OILPAN)
 | 
| -    virtual void detach() override;
 | 
| +    virtual LocalFrame* pluginFrame() const override { return frame(); }
 | 
| +    virtual void shouldDisposePlugin() override;
 | 
|  #endif
 | 
|  
 | 
|  private:
 | 
| @@ -198,25 +198,7 @@ private:
 | 
|          const IntRect& frameRect,
 | 
|          Vector<IntRect>& cutOutRects);
 | 
|  
 | 
| -#if ENABLE(OILPAN)
 | 
| -    // FIXME: Oilpan: consider moving Widget to the heap, allowing this
 | 
| -    // container object to be a FrameDestructionObserver. And thereby
 | 
| -    // keep a traced member reference to the frame rather than as a
 | 
| -    // bare pointer. Instead, the owning object (HTMLFrameOwnerElement)
 | 
| -    // explicitly deletes this object when it is disconnected from its
 | 
| -    // frame. Any access to an invalid frame via this bare pointer
 | 
| -    // is therefore not possible.
 | 
| -    //
 | 
| -    // See the HTMLFrameOwnerElement::disconnectContentFrame comment for
 | 
| -    // (even) more.
 | 
| -    LocalFrame* m_frame;
 | 
| -
 | 
| -    LocalFrame* frame() const { return m_frame; }
 | 
| -#endif
 | 
| -
 | 
| -    // FIXME: see above; for the time being, a bare pointer to the owning
 | 
| -    // HTMLPlugInElement and managed as such.
 | 
| -    HTMLPlugInElement* m_element;
 | 
| +    RawPtrWillBeMember<HTMLPlugInElement> m_element;
 | 
|      WebPlugin* m_webPlugin;
 | 
|      Vector<WebPluginLoadObserver*> m_pluginLoadObservers;
 | 
|  
 | 
| @@ -228,6 +210,12 @@ private:
 | 
|  
 | 
|      TouchEventRequestType m_touchEventRequestType;
 | 
|      bool m_wantsWheelEvents;
 | 
| +
 | 
| +#if ENABLE(OILPAN)
 | 
| +    // Oilpan: if true, the plugin container must dispose
 | 
| +    // of its plugin when being finalized.
 | 
| +    bool m_shouldDisposePlugin;
 | 
| +#endif
 | 
|  };
 | 
|  
 | 
|  DEFINE_TYPE_CASTS(WebPluginContainerImpl, Widget, widget, widget->isPluginContainer(), widget.isPluginContainer());
 | 
| 
 |