15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_RENDERER_RENDER_WIDGET_FULLSCREEN_PEPPER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_RENDERER_RENDER_WIDGET_FULLSCREEN_PEPPER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/mouse_lock_dispatcher.h"
10bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/renderer/pepper/fullscreen_container.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_widget_fullscreen.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebWidget.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebLayer;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
1958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass PepperPluginInstanceImpl;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A RenderWidget that hosts a fullscreen pepper plugin. This provides a
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FullscreenContainer that the plugin instance can callback into to e.g.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// invalidate rects.
2458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass RenderWidgetFullscreenPepper : public RenderWidgetFullscreen,
2558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch                                     public FullscreenContainer {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static RenderWidgetFullscreenPepper* Create(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int32 opener_id,
2958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch      PepperPluginInstanceImpl* plugin,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& active_url,
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebScreenInfo& screen_info);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // pepper::FullscreenContainer API.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Invalidate() OVERRIDE;
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void InvalidateRect(const blink::WebRect& rect) OVERRIDE;
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void ScrollRect(int dx, int dy, const blink::WebRect& rect) OVERRIDE;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Destroy() OVERRIDE;
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void DidChangeCursor(const blink::WebCursorInfo& cursor) OVERRIDE;
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void SetLayer(blink::WebLayer* layer) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IPC::Listener implementation. This overrides the implementation
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in RenderWidgetFullscreen.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Could be NULL when this widget is closing.
4658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch  PepperPluginInstanceImpl* plugin() const { return plugin_; }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MouseLockDispatcher* mouse_lock_dispatcher() const {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return mouse_lock_dispatcher_.get();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
5358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch  RenderWidgetFullscreenPepper(PepperPluginInstanceImpl* plugin,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const GURL& active_url,
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                               const blink::WebScreenInfo& screen_info);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~RenderWidgetFullscreenPepper();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // RenderWidget API.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidInitiatePaint() OVERRIDE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidFlushPaint() OVERRIDE;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Close() OVERRIDE;
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void OnResize(const ViewMsg_Resize_Params& params) OVERRIDE;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // RenderWidgetFullscreen API.
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebWidget* CreateWebWidget() OVERRIDE;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // RenderWidget overrides.
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual GURL GetURLForGraphicsContext3D() OVERRIDE;
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetDeviceScaleFactor(float device_scale_factor) OVERRIDE;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URL that is responsible for this widget, passed to ggl::CreateViewContext.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL active_url_;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The plugin instance this widget wraps.
7658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch  PepperPluginInstanceImpl* plugin_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebLayer* layer_;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<MouseLockDispatcher> mouse_lock_dispatcher_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RenderWidgetFullscreenPepper);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_RENDERER_RENDER_WIDGET_FULLSCREEN_PEPPER_H_
88