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

Unified Diff: content/renderer/browser_plugin/browser_plugin.cc

Issue 10965048: [BrowserTag] Send dib info with NavigateGuest message, (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Unit test now checks for damage_buffer to be of correct size. Created 8 years, 3 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
Index: content/renderer/browser_plugin/browser_plugin.cc
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index ebcbd3ab8c797924889f28827003f22fba36afcb..96c9d074cfcaecd566ab478877389abb75e9d7e4 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -102,7 +102,7 @@ void BrowserPlugin::SetSrcAttribute(const std::string& src) {
instance_id_,
parent_frame_,
src,
- gfx::Size(width(), height())));
+ *GetPendingResizeParams()));
Fady Samuel 2012/09/24 22:16:58 Shouldn't this get freed after we send it?
lazyboy 2012/09/25 17:57:22 Done.
// Record that we sent a NavigateGuest message to embedder. Once we send
// such a message, subsequent SetSrcAttribute() calls must always send
// NavigateGuest messages to the embedder (even if |src| is empty), so
@@ -362,11 +362,6 @@ void BrowserPlugin::updateGeometry(
old_height == window_rect.height) {
return;
}
- // Until an actual navigation occurs, there is no browser side embedder
- // present to notify about geometry updates. In this case, after we've updated
- // the BrowserPlugin's state we are done and can return immediately.
- if (!navigate_src_sent_)
- return;
const size_t stride = skia::PlatformCanvas::StrideForWidth(window_rect.width);
// Make sure the size of the damage buffer is at least four bytes so that we
@@ -399,26 +394,55 @@ void BrowserPlugin::updateGeometry(
// Insert the magic word.
*static_cast<unsigned int*>(new_damage_buffer->memory()) = 0xdeadbeef;
- BrowserPluginHostMsg_ResizeGuest_Params params;
- params.damage_buffer_id = new_damage_buffer->id();
-#if defined(OS_WIN)
- params.damage_buffer_size = size;
-#endif
- params.width = window_rect.width;
- params.height = window_rect.height;
- params.resize_pending = resize_pending_;
- params.scale_factor = GetDeviceScaleFactor();
- BrowserPluginManager::Get()->Send(new BrowserPluginHostMsg_ResizeGuest(
- render_view_->GetRoutingID(),
- instance_id_,
- params));
- resize_pending_ = true;
-
if (damage_buffer_) {
RenderProcess::current()->FreeTransportDIB(damage_buffer_);
damage_buffer_ = NULL;
}
damage_buffer_ = new_damage_buffer;
+
+ pending_resize_params_.reset();
+
+ scoped_ptr<BrowserPluginHostMsg_ResizeGuest_Params> params(
+ new BrowserPluginHostMsg_ResizeGuest_Params);
+ params->damage_buffer_id = new_damage_buffer->id();
+#if defined(OS_WIN)
+ params->damage_buffer_size = size;
+#endif
+ params->width = window_rect.width;
+ params->height = window_rect.height;
+ params->resize_pending = resize_pending_;
+ params->scale_factor = GetDeviceScaleFactor();
+
+ // Until an actual navigation occurs, there is no browser side embedder
+ // present to notify about geometry updates. In this case, after we've updated
+ // the BrowserPlugin's state we are done and we do not send a resize message
+ // to the browser.
+ if (navigate_src_sent_) {
+ resize_pending_ = true;
+ BrowserPluginManager::Get()->Send(new BrowserPluginHostMsg_ResizeGuest(
+ render_view_->GetRoutingID(),
+ instance_id_,
+ *(params.get())));
+ } else {
+ pending_resize_params_.reset(params.release());
+ }
+}
+
+BrowserPluginHostMsg_ResizeGuest_Params*
+ BrowserPlugin::GetPendingResizeParams() {
+ if (pending_resize_params_.get()) {
+ return pending_resize_params_.release();
+ } else {
+ BrowserPluginHostMsg_ResizeGuest_Params* params =
+ new BrowserPluginHostMsg_ResizeGuest_Params;
+
+ // We don't have a pending resize to send, so we send an invalid transport
+ // dib Id.
+ params->damage_buffer_id = TransportDIB::Id();
+ params->width = width();
+ params->height = height();
+ return params;
+ }
}
void BrowserPlugin::updateFocus(bool focused) {

Powered by Google App Engine
This is Rietveld 408576698