Home | History | Annotate | Download | only in renderer
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_RENDERER_RENDER_WIDGET_FULLSCREEN_PEPPER_H_
      6 #define CONTENT_RENDERER_RENDER_WIDGET_FULLSCREEN_PEPPER_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "content/renderer/mouse_lock_dispatcher.h"
     10 #include "content/renderer/pepper/fullscreen_container.h"
     11 #include "content/renderer/render_widget_fullscreen.h"
     12 #include "third_party/WebKit/public/web/WebWidget.h"
     13 
     14 namespace blink {
     15 class WebLayer;
     16 }
     17 
     18 namespace content {
     19 class PepperPluginInstanceImpl;
     20 
     21 // A RenderWidget that hosts a fullscreen pepper plugin. This provides a
     22 // FullscreenContainer that the plugin instance can callback into to e.g.
     23 // invalidate rects.
     24 class RenderWidgetFullscreenPepper : public RenderWidgetFullscreen,
     25                                      public FullscreenContainer {
     26  public:
     27   static RenderWidgetFullscreenPepper* Create(
     28       int32 opener_id,
     29       PepperPluginInstanceImpl* plugin,
     30       const GURL& active_url,
     31       const blink::WebScreenInfo& screen_info);
     32 
     33   // pepper::FullscreenContainer API.
     34   virtual void Invalidate() OVERRIDE;
     35   virtual void InvalidateRect(const blink::WebRect& rect) OVERRIDE;
     36   virtual void ScrollRect(int dx, int dy, const blink::WebRect& rect) OVERRIDE;
     37   virtual void Destroy() OVERRIDE;
     38   virtual void DidChangeCursor(const blink::WebCursorInfo& cursor) OVERRIDE;
     39   virtual void SetLayer(blink::WebLayer* layer) OVERRIDE;
     40 
     41   // IPC::Listener implementation. This overrides the implementation
     42   // in RenderWidgetFullscreen.
     43   virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
     44 
     45   // Could be NULL when this widget is closing.
     46   PepperPluginInstanceImpl* plugin() const { return plugin_; }
     47 
     48   MouseLockDispatcher* mouse_lock_dispatcher() const {
     49     return mouse_lock_dispatcher_.get();
     50   }
     51 
     52  protected:
     53   RenderWidgetFullscreenPepper(PepperPluginInstanceImpl* plugin,
     54                                const GURL& active_url,
     55                                const blink::WebScreenInfo& screen_info);
     56   virtual ~RenderWidgetFullscreenPepper();
     57 
     58   // RenderWidget API.
     59   virtual void DidInitiatePaint() OVERRIDE;
     60   virtual void DidFlushPaint() OVERRIDE;
     61   virtual void Close() OVERRIDE;
     62   virtual void OnResize(const ViewMsg_Resize_Params& params) OVERRIDE;
     63 
     64   // RenderWidgetFullscreen API.
     65   virtual blink::WebWidget* CreateWebWidget() OVERRIDE;
     66 
     67   // RenderWidget overrides.
     68   virtual GURL GetURLForGraphicsContext3D() OVERRIDE;
     69   virtual void SetDeviceScaleFactor(float device_scale_factor) OVERRIDE;
     70 
     71  private:
     72   // URL that is responsible for this widget, passed to ggl::CreateViewContext.
     73   GURL active_url_;
     74 
     75   // The plugin instance this widget wraps.
     76   PepperPluginInstanceImpl* plugin_;
     77 
     78   blink::WebLayer* layer_;
     79 
     80   scoped_ptr<MouseLockDispatcher> mouse_lock_dispatcher_;
     81 
     82   DISALLOW_COPY_AND_ASSIGN(RenderWidgetFullscreenPepper);
     83 };
     84 
     85 }  // namespace content
     86 
     87 #endif  // CONTENT_RENDERER_RENDER_WIDGET_FULLSCREEN_PEPPER_H_
     88