Index: webkit/plugins/ppapi/ppapi_plugin_instance.h |
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.h b/webkit/plugins/ppapi/ppapi_plugin_instance.h |
index 2dfc21d76b67ca8f2d7556beb117305f2dfc81d7..ee6b437cf6ba7be165f320d8dfe921324340d41a 100644 |
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.h |
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.h |
@@ -24,6 +24,7 @@ |
#include "ppapi/c/ppb_input_event.h" |
#include "ppapi/shared_impl/function_group_base.h" |
#include "ppapi/shared_impl/ppb_instance_shared.h" |
+#include "ppapi/shared_impl/ppb_view_shared.h" |
#include "ppapi/thunk/ppb_instance_api.h" |
#include "third_party/skia/include/core/SkRefCnt.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCanvas.h" |
@@ -85,10 +86,13 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
public ::ppapi::PPB_Instance_Shared { |
public: |
// Create and return a PluginInstance object which supports the |
- // PPP_Instance_1_0 interface. |
+ // given version. |
static PluginInstance* Create1_0(PluginDelegate* delegate, |
PluginModule* module, |
const void* ppp_instance_if_1_0); |
+ static PluginInstance* Create1_1(PluginDelegate* delegate, |
+ PluginModule* module, |
+ const void* ppp_instance_if_1_1); |
// Delete should be called by the WebPlugin before this destructor. |
virtual ~PluginInstance(); |
@@ -99,9 +103,6 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
WebKit::WebPluginContainer* container() const { return container_; } |
- const gfx::Rect& position() const { return position_; } |
- const gfx::Rect& clip() const { return clip_; } |
- |
void set_always_on_top(bool on_top) { always_on_top_ = on_top; } |
// Returns the PP_Instance uniquely identifying this instance. Guaranteed |
@@ -144,6 +145,7 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
// PPB_Instance and PPB_Instance_Private implementation. |
const GURL& plugin_url() const { return plugin_url_; } |
bool full_frame() const { return full_frame_; } |
+ const ::ppapi::ViewData& view_data() const { return view_data_; } |
// If |type| is not PP_CURSORTYPE_CUSTOM, |custom_image| and |hot_spot| are |
// ignored. |
bool SetCursor(PP_CursorType_Dev type, |
@@ -306,6 +308,8 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
virtual PP_Bool BindGraphics(PP_Instance instance, |
PP_Resource device) OVERRIDE; |
virtual PP_Bool IsFullFrame(PP_Instance instance) OVERRIDE; |
+ virtual PP_Resource GetView(PP_Instance instance) OVERRIDE; |
+ virtual const ::ppapi::ViewData* GetViewData(PP_Instance instance) OVERRIDE; |
virtual PP_Var GetWindowObject(PP_Instance instance) OVERRIDE; |
virtual PP_Var GetOwnerElementObject(PP_Instance instance) OVERRIDE; |
virtual PP_Var ExecuteScript(PP_Instance instance, |
@@ -329,7 +333,6 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
PP_Bool fullscreen) OVERRIDE; |
virtual PP_Bool FlashGetScreenSize(PP_Instance instance, |
PP_Size* size) OVERRIDE; |
- virtual PP_Bool IsFullscreen(PP_Instance instance) OVERRIDE; |
virtual PP_Bool SetFullscreen(PP_Instance instance, |
PP_Bool fullscreen) OVERRIDE; |
virtual PP_Bool GetScreenSize(PP_Instance instance, PP_Size* size) |
@@ -384,6 +387,10 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
// (see has_webkit_focus_ below). |
bool PluginHasFocus() const; |
+ void ScheduleAsyncDidChangeView(const ::ppapi::ViewData& previous_view); |
+ void SendAsyncDidChangeView(const ::ppapi::ViewData& previous_view); |
+ void SendDidChangeView(const ::ppapi::ViewData& previous_view); |
+ |
// Reports the current plugin geometry to the plugin by calling |
// DidChangeView. |
void ReportGeometry(); |
@@ -444,9 +451,6 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
// compositing path. |
bool IsViewAccelerated(); |
- // Remember view parameters that were sent to the plugin. |
- void SetSentDidChangeView(const gfx::Rect& position, const gfx::Rect& clip); |
- |
// Track, set and reset size attributes to control the size of the plugin |
// in and out of fullscreen mode. |
void KeepSizeAttributesBeforeFullscreen(); |
@@ -469,20 +473,19 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : |
// an entire document rather than an embed tag. |
bool full_frame_; |
+ // Stores the current state of the plugin view. |
+ ::ppapi::ViewData view_data_; |
+ |
// Indicates if we've ever sent a didChangeView to the plugin. This ensure we |
// always send an initial notification, even if the position and clip are the |
// same as the default values. |
bool sent_did_change_view_; |
- // Position in the viewport (which moves as the page is scrolled) of this |
- // plugin. This will be a 0-sized rectangle if the plugin has not yet been |
- // laid out. |
- gfx::Rect position_; |
- |
- // Current clip rect. This will be empty if the plugin is not currently |
- // visible. This is in the plugin's coordinate system, so fully visible will |
- // be (0, 0, w, h) regardless of scroll position. |
- gfx::Rect clip_; |
+ // Set to true when we've scheduled an asynchronous DidChangeView update for |
+ // the purposes of consolidating updates. When this is set, code should |
+ // update the view_data_ but not send updates. It will be cleared once the |
+ // asynchronous update has been sent out. |
+ bool suppress_did_change_view_; |
// The current device context for painting in 2D or 3D. |
scoped_refptr< ::ppapi::Resource> bound_graphics_; |