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

Unified Diff: content/browser/browser_plugin/browser_plugin_guest.cc

Issue 12207144: Apply merge from @fsamuel. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1364/src/
Patch Set: Created 7 years, 10 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/browser/browser_plugin/browser_plugin_guest.cc
===================================================================
--- content/browser/browser_plugin/browser_plugin_guest.cc (revision 182101)
+++ content/browser/browser_plugin/browser_plugin_guest.cc (working copy)
@@ -49,10 +49,8 @@
: WebContentsObserver(web_contents),
embedder_web_contents_(NULL),
instance_id_(instance_id),
-#if defined(OS_WIN)
+ damage_buffer_sequence_id_(0),
damage_buffer_size_(0),
- remote_damage_buffer_handle_(0),
-#endif
damage_buffer_scale_factor_(1.0f),
pending_update_counter_(0),
guest_hang_timeout_(
@@ -274,69 +272,44 @@
RenderWidgetHostImpl* render_widget_host =
RenderWidgetHostImpl::From(web_contents()->GetRenderViewHost());
render_widget_host->ResetSizeAndRepaintPendingFlags();
- if (!TransportDIB::is_valid_id(params.damage_buffer_id)) {
- // Invalid transport dib, so just resize the WebContents.
+ if (!base::SharedMemory::IsHandleValid(params.damage_buffer_handle)) {
+ // Invalid damage buffer, so just resize the WebContents.
if (!params.view_size.IsEmpty())
web_contents()->GetView()->SizeContents(params.view_size);
return;
}
- TransportDIB* damage_buffer =
- GetDamageBufferFromEmbedder(embedder_rvh, params);
- SetDamageBuffer(damage_buffer,
-#if defined(OS_WIN)
- params.damage_buffer_size,
- params.damage_buffer_id.handle,
-#endif
- params.view_size,
- params.scale_factor);
+ SetDamageBuffer(params);
web_contents()->GetView()->SizeContents(params.view_size);
}
-TransportDIB* BrowserPluginGuest::GetDamageBufferFromEmbedder(
- RenderViewHost* embedder_rvh,
+base::SharedMemory* BrowserPluginGuest::GetDamageBufferFromEmbedder(
const BrowserPluginHostMsg_ResizeGuest_Params& params) {
- TransportDIB* damage_buffer = NULL;
#if defined(OS_WIN)
- // On Windows we need to duplicate the handle from the remote process.
- HANDLE section;
- DuplicateHandle(embedder_rvh->GetProcess()->GetHandle(),
- params.damage_buffer_id.handle,
- GetCurrentProcess(),
- &section,
- STANDARD_RIGHTS_REQUIRED | FILE_MAP_READ | FILE_MAP_WRITE,
- FALSE,
- 0);
- damage_buffer = TransportDIB::Map(section);
-#elif defined(OS_MACOSX)
- // On OSX, we need the handle to map the transport dib.
- damage_buffer = TransportDIB::Map(params.damage_buffer_handle);
-#elif defined(OS_ANDROID)
- damage_buffer = TransportDIB::Map(params.damage_buffer_id);
-#elif defined(OS_POSIX)
- damage_buffer = TransportDIB::Map(params.damage_buffer_id.shmkey);
-#endif // defined(OS_POSIX)
- DCHECK(damage_buffer);
- return damage_buffer;
+ base::ProcessHandle handle =
+ embedder_web_contents_->GetRenderProcessHost()->GetHandle();
+ scoped_ptr<base::SharedMemory> shared_buf(
+ new base::SharedMemory(params.damage_buffer_handle, false, handle));
+ #elif defined(OS_POSIX)
+ scoped_ptr<base::SharedMemory> shared_buf(
+ new base::SharedMemory(params.damage_buffer_handle, false));
+#endif
+ if (!shared_buf->Map(params.damage_buffer_size)) {
+ NOTREACHED();
+ return NULL;
+ }
+ return shared_buf.release();
}
void BrowserPluginGuest::SetDamageBuffer(
- TransportDIB* damage_buffer,
-#if defined(OS_WIN)
- int damage_buffer_size,
- TransportDIB::Handle remote_handle,
-#endif
- const gfx::Size& damage_view_size,
- float scale_factor) {
+ const BrowserPluginHostMsg_ResizeGuest_Params& params) {
+ damage_buffer_.reset(GetDamageBufferFromEmbedder(params));
// Sanity check: Verify that we've correctly shared the damage buffer memory
// between the embedder and browser processes.
- DCHECK(*static_cast<unsigned int*>(damage_buffer->memory()) == 0xdeadbeef);
- damage_buffer_.reset(damage_buffer);
-#if defined(OS_WIN)
- damage_buffer_size_ = damage_buffer_size;
- remote_damage_buffer_handle_ = remote_handle;
-#endif
- damage_view_size_ = damage_view_size;
- damage_buffer_scale_factor_ = scale_factor;
+ DCHECK(*static_cast<unsigned int*>(damage_buffer_->memory()) == 0xdeadbeef);
+ damage_buffer_sequence_id_ = params.damage_buffer_sequence_id;
+ damage_buffer_size_ = params.damage_buffer_size;
+ damage_view_size_ = params.view_size;
+ damage_buffer_scale_factor_ = params.scale_factor;
}
gfx::Point BrowserPluginGuest::GetScreenCoordinates(
@@ -397,14 +370,14 @@
TransportDIB* dib = render_view_host->GetProcess()->
GetTransportDIB(params.bitmap);
if (dib) {
+ size_t guest_damage_buffer_size =
#if defined(OS_WIN)
- size_t guest_damage_buffer_size = params.bitmap_rect.width() *
- params.bitmap_rect.height() * 4;
- size_t embedder_damage_buffer_size = damage_buffer_size_;
+ params.bitmap_rect.width() *
+ params.bitmap_rect.height() * 4;
#else
- size_t guest_damage_buffer_size = dib->size();
- size_t embedder_damage_buffer_size = damage_buffer_->size();
+ dib->size();
#endif
+ size_t embedder_damage_buffer_size = damage_buffer_size_;
void* guest_memory = dib->memory();
void* embedder_memory = damage_buffer_->memory();
size_t size = std::min(guest_damage_buffer_size,
@@ -413,15 +386,7 @@
}
}
BrowserPluginMsg_UpdateRect_Params relay_params;
-#if defined(OS_MACOSX)
- relay_params.damage_buffer_identifier = damage_buffer_->id();
-#elif defined(OS_WIN)
- // On Windows, the handle used locally differs from the handle received from
- // the embedder process, since we duplicate the remote handle.
- relay_params.damage_buffer_identifier = remote_damage_buffer_handle_;
-#else
- relay_params.damage_buffer_identifier = damage_buffer_->handle();
-#endif
+ relay_params.damage_buffer_sequence_id = damage_buffer_sequence_id_;
relay_params.bitmap_rect = params.bitmap_rect;
relay_params.scroll_delta = params.scroll_delta;
relay_params.scroll_rect = params.scroll_rect;
« no previous file with comments | « content/browser/browser_plugin/browser_plugin_guest.h ('k') | content/browser/browser_plugin/test_browser_plugin_guest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698