Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(664)

Unified Diff: webkit/glue/plugins/pepper_plugin_instance.cc

Issue 2712002: First pass at implementing real Flush callbacks. This does not currently... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/glue/plugins/pepper_plugin_instance.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/plugins/pepper_plugin_instance.cc
===================================================================
--- webkit/glue/plugins/pepper_plugin_instance.cc (revision 49266)
+++ webkit/glue/plugins/pepper_plugin_instance.cc (working copy)
@@ -19,6 +19,7 @@
#include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
#include "third_party/WebKit/WebKit/chromium/public/WebInputEvent.h"
#include "third_party/WebKit/WebKit/chromium/public/WebPluginContainer.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
#include "webkit/glue/plugins/pepper_device_context_2d.h"
#include "webkit/glue/plugins/pepper_plugin_module.h"
#include "webkit/glue/plugins/pepper_resource_tracker.h"
@@ -172,6 +173,15 @@
device_context_2d_->Paint(canvas, plugin_rect, paint_rect);
}
+void PluginInstance::InvalidateRect(const gfx::Rect& rect) {
+ if (!container_ || position_.IsEmpty())
+ return; // Nothing to do.
+ if (rect.IsEmpty())
+ container_->invalidate();
+ else
+ container_->invalidateRect(rect);
+}
+
PP_Var PluginInstance::GetWindowObject() {
if (!container_)
return PP_MakeVoid();
@@ -191,6 +201,16 @@
}
bool PluginInstance::BindGraphicsDeviceContext(PP_Resource device_id) {
+ if (!device_id) {
+ // Special-case clearing the current device.
+ if (device_context_2d_) {
+ device_context_2d_->BindToInstance(NULL);
+ device_context_2d_ = NULL;
+ InvalidateRect(gfx::Rect());
+ }
+ return true;
+ }
+
scoped_refptr<Resource> device_resource =
ResourceTracker::Get()->GetResource(device_id);
if (!device_resource.get())
@@ -198,8 +218,10 @@
DeviceContext2D* device_2d = device_resource->AsDeviceContext2D();
if (device_2d) {
+ if (!device_2d->BindToInstance(this))
+ return false; // Can't bind to more than one instance.
device_context_2d_ = device_2d;
- // TODO(brettw) repaint the plugin.
+ // BindToInstance will have invalidated the plugin if necessary.
}
return true;
@@ -270,10 +292,31 @@
void PluginInstance::ViewChanged(const gfx::Rect& position,
const gfx::Rect& clip) {
+ position_ = position;
+ if (clip.IsEmpty()) {
+ // WebKit can give weird (x,y) positions for empty clip rects (since the
+ // position technically doesn't matter). But we want to make these
+ // consistent since this is given to the plugin, so force everything to 0
+ // in the "everything is clipped" case.
+ clip_ = gfx::Rect();
+ } else {
+ clip_ = clip;
+ }
+
PP_Rect pp_position, pp_clip;
- RectToPPRect(position, &pp_position);
- RectToPPRect(clip, &pp_clip);
+ RectToPPRect(position_, &pp_position);
+ RectToPPRect(clip_, &pp_clip);
instance_interface_->ViewChanged(GetPPInstance(), &pp_position, &pp_clip);
}
+void PluginInstance::ViewInitiatedPaint() {
+ if (device_context_2d_)
+ device_context_2d_->ViewInitiatedPaint();
+}
+
+void PluginInstance::ViewFlushedPaint() {
+ if (device_context_2d_)
+ device_context_2d_->ViewFlushedPaint();
+}
+
} // namespace pepper
« no previous file with comments | « webkit/glue/plugins/pepper_plugin_instance.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698