Index: chrome/browser/renderer_host/browser_render_process_host.cc |
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc |
index 5e254e5150122ec79f62d458f07eeba72c1bfe88..aed96e05d7e3c4aa7fe8f78ed1ded33ed1c7873a 100644 |
--- a/chrome/browser/renderer_host/browser_render_process_host.cc |
+++ b/chrome/browser/renderer_host/browser_render_process_host.cc |
@@ -778,23 +778,20 @@ bool BrowserRenderProcessHost::SendWithTimeout(IPC::Message* msg, |
// This is a platform specific function for mapping a transport DIB given its id |
TransportDIB* BrowserRenderProcessHost::MapTransportDIB( |
- TransportDIB::Id dib_id) { |
-#if defined(OS_WIN) |
- // On Windows we need to duplicate the handle from the remote process |
- HANDLE section = win_util::GetSectionFromProcess( |
- dib_id.handle, GetHandle(), false /* read write */); |
- return TransportDIB::Map(section); |
-#elif defined(OS_MACOSX) |
+ TransportDIB::Id dib_id, TransportDIB::Handle dib_handle) { |
+ TransportDIB::ScopedHandle scoped_handle(dib_handle); |
+#if defined(OS_MACOSX) |
// On OSX, the browser allocates all DIBs and keeps a file descriptor around |
// for each. |
return widget_helper_->MapTransportDIB(dib_id); |
-#elif defined(OS_POSIX) |
- return TransportDIB::Map(dib_id); |
-#endif // defined(OS_POSIX) |
+#else |
+ return TransportDIB::Map(scoped_handle.release()); |
+#endif |
} |
TransportDIB* BrowserRenderProcessHost::GetTransportDIB( |
- TransportDIB::Id dib_id) { |
+ TransportDIB::Id dib_id, TransportDIB::Handle dib_handle) { |
+ TransportDIB::ScopedHandle scoped_handle(dib_handle); |
const std::map<TransportDIB::Id, TransportDIB*>::iterator |
i = cached_dibs_.find(dib_id); |
if (i != cached_dibs_.end()) { |
@@ -802,7 +799,7 @@ TransportDIB* BrowserRenderProcessHost::GetTransportDIB( |
return i->second; |
} |
- TransportDIB* dib = MapTransportDIB(dib_id); |
+ TransportDIB* dib = MapTransportDIB(dib_id, scoped_handle.release()); |
if (!dib) |
return NULL; |