diff options
Diffstat (limited to 'webkit/plugins/ppapi')
-rw-r--r-- | webkit/plugins/ppapi/gfx_conversion.h | 48 | ||||
-rw-r--r-- | webkit/plugins/ppapi/plugin_module.cc | 9 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppapi_plugin_instance.cc | 139 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppapi_plugin_instance.h | 47 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppapi_unittest.cc | 4 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_graphics_2d_impl.cc | 4 |
6 files changed, 173 insertions, 78 deletions
diff --git a/webkit/plugins/ppapi/gfx_conversion.h b/webkit/plugins/ppapi/gfx_conversion.h new file mode 100644 index 0000000..ad4006b --- /dev/null +++ b/webkit/plugins/ppapi/gfx_conversion.h @@ -0,0 +1,48 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_PLUGINS_PPAPI_GFX_CONVERSION_H_
+#define WEBKIT_PLUGINS_PPAPI_GFX_CONVERSION_H_
+
+#include "ppapi/c/pp_point.h"
+#include "ppapi/c/pp_rect.h"
+#include "ppapi/c/pp_size.h"
+#include "ui/gfx/point.h"
+#include "ui/gfx/rect.h"
+#include "ui/gfx/size.h"
+
+// Conversions for graphics types between our gfx library and PPAPI.
+// The style of naming is to match the PP_Bool conversions.
+
+namespace webkit {
+namespace ppapi {
+
+inline gfx::Point PP_ToGfxPoint(const PP_Point& p) {
+ return gfx::Point(p.x, p.y);
+}
+
+inline PP_Point PP_FromGfxPoint(const gfx::Point& p) {
+ return PP_MakePoint(p.x(), p.y());
+}
+
+inline gfx::Rect PP_ToGfxRect(const PP_Rect& r) {
+ return gfx::Rect(r.point.x, r.point.y, r.size.width, r.size.height);
+}
+
+inline PP_Rect PP_FromGfxRect(const gfx::Rect& r) {
+ return PP_MakeRectFromXYWH(r.x(), r.y(), r.width(), r.height());
+}
+
+inline gfx::Size PP_ToGfxSize(const PP_Size& s) {
+ return gfx::Size(s.width, s.height);
+}
+
+inline PP_Size PP_FromGfxSize(const gfx::Size& s) {
+ return PP_MakeSize(s.width(), s.height());
+}
+
+} // namespace ppapi
+} // namespace webkit
+
+#endif // WEBKIT_PLUGINS_PPAPI_GFX_CONVERSION_H_
diff --git a/webkit/plugins/ppapi/plugin_module.cc b/webkit/plugins/ppapi/plugin_module.cc index 3e08385d..2340200 100644 --- a/webkit/plugins/ppapi/plugin_module.cc +++ b/webkit/plugins/ppapi/plugin_module.cc @@ -60,6 +60,7 @@ #include "ppapi/c/ppb_url_request_info.h" #include "ppapi/c/ppb_url_response_info.h" #include "ppapi/c/ppb_var.h" +#include "ppapi/c/ppb_view.h" #include "ppapi/c/ppp.h" #include "ppapi/c/ppp_instance.h" #include "ppapi/c/private/ppb_file_ref_private.h" @@ -513,10 +514,14 @@ PluginModule::GetInterfaceFunc PluginModule::GetLocalGetInterfaceFunc() { PluginInstance* PluginModule::CreateInstance(PluginDelegate* delegate) { PluginInstance* instance(NULL); - const void* ppp_instance = GetPluginInterface(PPP_INSTANCE_INTERFACE_1_0); + const void* ppp_instance = GetPluginInterface(PPP_INSTANCE_INTERFACE_1_1); if (ppp_instance) { + instance = PluginInstance::Create1_1(delegate, this, ppp_instance); + } else if ((ppp_instance = GetPluginInterface(PPP_INSTANCE_INTERFACE_1_0))) { instance = PluginInstance::Create1_0(delegate, this, ppp_instance); - } if (!instance) { + } + + if (!instance) { LOG(WARNING) << "Plugin doesn't support instance interface, failing."; return NULL; } diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc index 9229d10..c5c52ce 100644 --- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc +++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc @@ -27,7 +27,10 @@ #include "ppapi/c/private/ppp_instance_private.h" #include "ppapi/shared_impl/ppb_input_event_shared.h" #include "ppapi/shared_impl/ppb_url_util_shared.h" +#include "ppapi/shared_impl/ppb_view_shared.h" #include "ppapi/shared_impl/ppp_instance_combined.h" +#include "ppapi/shared_impl/resource.h" +#include "ppapi/shared_impl/scoped_pp_resource.h" #include "ppapi/shared_impl/time_conversion.h" #include "ppapi/shared_impl/var.h" #include "ppapi/thunk/enter.h" @@ -52,6 +55,7 @@ #include "webkit/plugins/ppapi/common.h" #include "webkit/plugins/ppapi/event_conversion.h" #include "webkit/plugins/ppapi/fullscreen_container.h" +#include "webkit/plugins/ppapi/gfx_conversion.h" #include "webkit/plugins/ppapi/host_globals.h" #include "webkit/plugins/ppapi/message_channel.h" #include "webkit/plugins/ppapi/npapi_glue.h" @@ -91,6 +95,8 @@ using base::StringPrintf; using ppapi::InputEventData; using ppapi::PPB_InputEvent_Shared; using ppapi::PpapiGlobals; +using ppapi::PPB_View_Shared; +using ppapi::ScopedPPResource; using ppapi::StringVar; using ppapi::thunk::EnterResourceNoLock; using ppapi::thunk::PPB_Buffer_API; @@ -99,6 +105,7 @@ using ppapi::thunk::PPB_Graphics3D_API; using ppapi::thunk::PPB_ImageData_API; using ppapi::thunk::PPB_Instance_FunctionAPI; using ppapi::Var; +using ppapi::ViewData; using WebKit::WebBindings; using WebKit::WebCanvas; using WebKit::WebConsoleMessage; @@ -219,11 +226,6 @@ COMPILE_ASSERT_MATCHING_ENUM(TypeGrabbing, PP_CURSORTYPE_GRABBING); // Do not assert WebCursorInfo::TypeCustom == PP_CURSORTYPE_CUSTOM; // PP_CURSORTYPE_CUSTOM is pinned to allow new cursor types. -void RectToPPRect(const gfx::Rect& input, PP_Rect* output) { - *output = PP_MakeRectFromXYWH(input.x(), input.y(), - input.width(), input.height()); -} - // Sets |*security_origin| to be the WebKit security origin associated with the // document containing the given plugin instance. On success, returns true. If // the instance is invalid, returns false and |*security_origin| will be @@ -253,6 +255,18 @@ PluginInstance* PluginInstance::Create1_0(PluginDelegate* delegate, new ::ppapi::PPP_Instance_Combined(*instance)); } +// static +PluginInstance* PluginInstance::Create1_1(PluginDelegate* delegate, + PluginModule* module, + const void* ppp_instance_if_1_1) { + const PPP_Instance_1_1* instance = + static_cast<const PPP_Instance_1_1*>(ppp_instance_if_1_1); + return new PluginInstance( + delegate, + module, + new ::ppapi::PPP_Instance_Combined(*instance)); +} + PluginInstance::PluginInstance( PluginDelegate* delegate, PluginModule* module, @@ -263,7 +277,8 @@ PluginInstance::PluginInstance( pp_instance_(0), container_(NULL), full_frame_(false), - sent_did_change_view_(false), + sent_initial_did_change_view_(false), + suppress_did_change_view_(false), has_webkit_focus_(false), has_content_area_focus_(false), find_identifier_(-1), @@ -283,7 +298,6 @@ PluginInstance::PluginInstance( fullscreen_container_(NULL), flash_fullscreen_(false), desired_fullscreen_state_(false), - fullscreen_(false), message_channel_(NULL), sad_plugin_(NULL), input_event_mask_(0), @@ -368,7 +382,8 @@ void PluginInstance::InvalidateRect(const gfx::Rect& rect) { else fullscreen_container_->InvalidateRect(rect); } else { - if (!container_ || position_.IsEmpty()) + if (!container_ || + view_data_.rect.size.width == 0 || view_data_.rect.size.height == 0) return; // Nothing to do. if (rect.IsEmpty()) container_->invalidate(); @@ -630,7 +645,9 @@ bool PluginInstance::IsPluginAcceptingCompositionEvents() const { gfx::Rect PluginInstance::GetCaretBounds() const { if (!text_input_caret_set_) { // If it is never set by the plugin, use the bottom left corner. - return gfx::Rect(position().x(), position().y()+position().height(), 0, 0); + return gfx::Rect(view_data_.rect.point.x, + view_data_.rect.point.y + view_data_.rect.size.height, + 0, 0); } // TODO(kinaba) Take CSS transformation into accont. @@ -639,7 +656,7 @@ gfx::Rect PluginInstance::GetCaretBounds() const { // passed to IME. Currently, we pass only the caret rectangle because // it is the only information supported uniformly in Chromium. gfx::Rect caret(text_input_caret_); - caret.Offset(position().origin()); + caret.Offset(view_data_.rect.point.x, view_data_.rect.point.y); return caret; } @@ -720,41 +737,41 @@ void PluginInstance::ViewChanged(const gfx::Rect& position, if (!clip.IsEmpty()) new_clip = clip; - // Don't notify the plugin if we've already sent these same params before. - if (sent_did_change_view_ && position == position_ && new_clip == clip_) - return; + ViewData previous_view = view_data_; + + view_data_.rect = PP_FromGfxRect(position); + view_data_.clip_rect = PP_FromGfxRect(clip); - if (desired_fullscreen_state_ || fullscreen_) { + if (desired_fullscreen_state_ || view_data_.is_fullscreen) { WebElement element = container_->element(); WebDocument document = element.document(); bool is_fullscreen_element = (element == document.fullScreenElement()); - if (!fullscreen_ && desired_fullscreen_state_ && + if (!view_data_.is_fullscreen && desired_fullscreen_state_ && delegate()->IsInFullscreenMode() && is_fullscreen_element) { // Entered fullscreen. Only possible via SetFullscreen(). - fullscreen_ = true; - } else if (fullscreen_ && !is_fullscreen_element) { + view_data_.is_fullscreen = true; + } else if (view_data_.is_fullscreen && !is_fullscreen_element) { // Exited fullscreen. Possible via SetFullscreen() or F11/link, // so desired_fullscreen_state might be out-of-date. desired_fullscreen_state_ = false; - fullscreen_ = false; + view_data_.is_fullscreen = false; + + // This operation will cause the plugin to re-layout which will send more + // DidChangeView updates. Schedule an asynchronous update and suppress + // notifications until that completes to avoid sending intermediate sizes + // to the plugins. + ScheduleAsyncDidChangeView(previous_view); + // Reset the size attributes that we hacked to fill in the screen and // retrigger ViewChanged. Make sure we don't forward duplicates of // this view to the plugin. ResetSizeAttributesAfterFullscreen(); - SetSentDidChangeView(position, new_clip); - MessageLoop::current()->PostTask( - FROM_HERE, base::Bind(&PluginInstance::ReportGeometry, this)); return; } } - SetSentDidChangeView(position, new_clip); flash_fullscreen_ = (fullscreen_container_ != NULL); - - PP_Rect pp_position, pp_clip; - RectToPPRect(position_, &pp_position); - RectToPPRect(clip_, &pp_clip); - instance_interface_->DidChangeView(pp_instance(), &pp_position, &pp_clip); + SendDidChangeView(previous_view); } void PluginInstance::SetWebKitFocus(bool has_focus) { @@ -812,11 +829,12 @@ bool PluginInstance::GetBitmapForOptimizedPluginPaint( // store when seeing if we cover the given paint bounds, since the backing // store could be smaller than the declared plugin area. PPB_ImageData_Impl* image_data = GetBoundGraphics2D()->image_data(); - gfx::Rect plugin_backing_store_rect(position_.origin(), - gfx::Size(image_data->width(), - image_data->height())); - gfx::Rect clip_page(clip_); - clip_page.Offset(position_.origin()); + gfx::Rect plugin_backing_store_rect( + PP_ToGfxPoint(view_data_.rect.point), + gfx::Size(image_data->width(), image_data->height())); + + gfx::Rect clip_page = PP_ToGfxRect(view_data_.clip_rect); + clip_page.Offset(PP_ToGfxPoint(view_data_.rect.point)); gfx::Rect plugin_paint_rect = plugin_backing_store_rect.Intersect(clip_page); if (!plugin_paint_rect.Contains(paint_bounds)) return false; @@ -993,6 +1011,38 @@ bool PluginInstance::PluginHasFocus() const { return has_webkit_focus_ && has_content_area_focus_; } +void PluginInstance::ScheduleAsyncDidChangeView( + const ::ppapi::ViewData& previous_view) { + if (suppress_did_change_view_) + return; // Already scheduled. + suppress_did_change_view_ = true; + MessageLoop::current()->PostTask( + FROM_HERE, base::Bind(&PluginInstance::SendAsyncDidChangeView, + this, previous_view)); +} + +void PluginInstance::SendAsyncDidChangeView(const ViewData& previous_view) { + DCHECK(suppress_did_change_view_); + suppress_did_change_view_ = false; + SendDidChangeView(previous_view); +} + +void PluginInstance::SendDidChangeView(const ViewData& previous_view) { + if (suppress_did_change_view_ || + (sent_initial_did_change_view_ && previous_view.Equals(view_data_))) + return; // Nothing to update. + + sent_initial_did_change_view_ = true; + ScopedPPResource resource( + ScopedPPResource::PassRef(), + (new PPB_View_Shared(PPB_View_Shared::InitAsImpl(), + pp_instance(), view_data_))->GetReference()); + + instance_interface_->DidChangeView(pp_instance(), resource, + &view_data_.rect, + &view_data_.clip_rect); +} + void PluginInstance::ReportGeometry() { // If this call was delayed, we may have transitioned back to fullscreen in // the mean time, so only report the geometry if we are actually in normal @@ -1045,7 +1095,7 @@ int PluginInstance::PrintBegin(const gfx::Rect& printable_area, int num_pages = 0; PP_PrintSettings_Dev print_settings; - RectToPPRect(printable_area, &print_settings.printable_area); + print_settings.printable_area = PP_FromGfxRect(printable_area); print_settings.dpi = printer_dpi; print_settings.orientation = PP_PRINTORIENTATION_NORMAL; print_settings.grayscale = PP_FALSE; @@ -1151,7 +1201,7 @@ bool PluginInstance::SetFullscreen(bool fullscreen) { // Check whether we are trying to switch while the state is in transition. // The 2nd request gets dropped while messing up the internal state, so // disallow this. - if (fullscreen_ != desired_fullscreen_state_) + if (view_data_.is_fullscreen != desired_fullscreen_state_) return false; // The browser will allow us to go into fullscreen mode only when processing @@ -1582,8 +1632,8 @@ void PluginInstance::SimulateInputEvent(const InputEventData& input_event) { std::vector<linked_ptr<WebInputEvent> > events = CreateSimulatedWebInputEvents( input_event, - position().x() + position().width() / 2, - position().y() + position().height() / 2); + view_data_.rect.point.x + view_data_.rect.size.width / 2, + view_data_.rect.point.y + view_data_.rect.size.height / 2); for (std::vector<linked_ptr<WebInputEvent> >::iterator it = events.begin(); it != events.end(); ++it) { web_view->handleInputEvent(*it->get()); @@ -1615,7 +1665,7 @@ PP_Bool PluginInstance::BindGraphics(PP_Instance instance, // Refuse to bind if in transition to fullscreen with PPB_FlashFullscreen or // to/from fullscreen with PPB_Fullscreen. if ((fullscreen_container_ && !flash_fullscreen_) || - desired_fullscreen_state_ != fullscreen_) + desired_fullscreen_state_ != view_data_.is_fullscreen) return PP_FALSE; EnterResourceNoLock<PPB_Graphics2D_API> enter_2d(device, false); @@ -1656,6 +1706,10 @@ PP_Bool PluginInstance::IsFullFrame(PP_Instance instance) { return PP_FromBool(full_frame()); } +const ViewData* PluginInstance::GetViewData(PP_Instance instance) { + return &view_data_; +} + PP_Var PluginInstance::GetWindowObject(PP_Instance instance) { if (!container_) return PP_MakeUndefined(); @@ -1779,10 +1833,6 @@ void PluginInstance::SelectedFindResultChanged(PP_Instance instance, delegate_->SelectedFindResultChanged(find_identifier_, index); } -PP_Bool PluginInstance::IsFullscreen(PP_Instance instance) { - return PP_FromBool(fullscreen_); -} - PP_Bool PluginInstance::FlashIsFullscreen(PP_Instance instance) { return PP_FromBool(flash_fullscreen_); } @@ -1957,13 +2007,6 @@ bool PluginInstance::CanAccessMainFrame() const { main_document.securityOrigin()); } -void PluginInstance::SetSentDidChangeView(const gfx::Rect& position, - const gfx::Rect& clip) { - sent_did_change_view_ = true; - position_ = position; - clip_ = clip; -} - void PluginInstance::KeepSizeAttributesBeforeFullscreen() { WebElement element = container_->element(); width_before_fullscreen_ = element.getAttribute(WebString::fromUTF8(kWidth)); diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.h b/webkit/plugins/ppapi/ppapi_plugin_instance.h index 2dfc21d..bb43a9d 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,7 @@ 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 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 +332,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 +386,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 +450,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 +472,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_; + bool sent_initial_did_change_view_; - // 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_; @@ -556,8 +558,9 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : // flash_fullscreen_ is false (see above). FullscreenContainer* fullscreen_container_; - // True if we are in fullscreen mode. False if we are in normal mode or - // in transition to fullscreen. + // True if we are in "flash" fullscreen mode. False if we are in normal mode + // or in transition to fullscreen. Normal fullscreen mode is indicated in + // the ViewData. bool flash_fullscreen_; // Implementation of PPB_Fullscreen. @@ -568,10 +571,6 @@ class WEBKIT_PLUGINS_EXPORT PluginInstance : // fullscreen. bool desired_fullscreen_state_; - // True if we are in fullscreen mode. False if we are in normal mode. - // It reflects the previous state when in transition. - bool fullscreen_; - // WebKit does not resize the plugin when going into fullscreen mode, so we do // this here by modifying the various plugin attributes and then restoring // them on exit. diff --git a/webkit/plugins/ppapi/ppapi_unittest.cc b/webkit/plugins/ppapi/ppapi_unittest.cc index d2bc625..e245727 100644 --- a/webkit/plugins/ppapi/ppapi_unittest.cc +++ b/webkit/plugins/ppapi/ppapi_unittest.cc @@ -38,9 +38,7 @@ PP_Bool Instance_DidCreate(PP_Instance pp_instance, void Instance_DidDestroy(PP_Instance instance) { } -void Instance_DidChangeView(PP_Instance pp_instance, - const PP_Rect* position, - const PP_Rect* clip) { +void Instance_DidChangeView(PP_Instance pp_instance, PP_Resource view) { } void Instance_DidChangeFocus(PP_Instance pp_instance, PP_Bool has_focus) { diff --git a/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc b/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc index a209e1f..dec85d0 100644 --- a/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc +++ b/webkit/plugins/ppapi/ppb_graphics_2d_impl.cc @@ -22,6 +22,7 @@ #include "ui/gfx/point.h" #include "ui/gfx/rect.h" #include "webkit/plugins/ppapi/common.h" +#include "webkit/plugins/ppapi/gfx_conversion.h" #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" #include "webkit/plugins/ppapi/ppb_image_data_impl.h" #include "webkit/plugins/ppapi/resource_helper.h" @@ -330,7 +331,8 @@ int32_t PPB_Graphics2D_Impl::Flush(PP_CompletionCallback callback) { // ViewInitiatedPaint/ViewFlushedPaint calls, leaving our callback stranded. gfx::Rect visible_changed_rect; if (bound_instance_ && !op_rect.IsEmpty()) - visible_changed_rect = bound_instance_->clip().Intersect(op_rect); + visible_changed_rect =PP_ToGfxRect(bound_instance_->view_data().clip_rect). + Intersect(op_rect); if (bound_instance_ && !visible_changed_rect.IsEmpty()) { if (operation.type == QueuedOperation::SCROLL) { |