Index: content/browser/gpu/browser_gpu_channel_host_factory.cc |
=================================================================== |
--- content/browser/gpu/browser_gpu_channel_host_factory.cc (revision 132251) |
+++ content/browser/gpu/browser_gpu_channel_host_factory.cc (working copy) |
@@ -153,8 +153,10 @@ |
void BrowserGpuChannelHostFactory::GpuChannelEstablishedOnIO( |
EstablishRequest* request, |
const IPC::ChannelHandle& channel_handle, |
+ base::ProcessHandle gpu_process_handle, |
const GPUInfo& gpu_info) { |
request->channel_handle = channel_handle; |
+ request->gpu_process_handle = gpu_process_handle; |
request->gpu_info = gpu_info; |
request->event.Signal(); |
} |
@@ -189,12 +191,26 @@ |
request.gpu_process_handle == base::kNullProcessHandle) |
return NULL; |
+ base::ProcessHandle browser_process_for_gpu; |
+#if defined(OS_WIN) |
+ // Create a process handle that the GPU process can use to access our handles. |
+ DuplicateHandle(base::GetCurrentProcessHandle(), |
+ base::GetCurrentProcessHandle(), |
+ request.gpu_process_handle, |
+ &browser_process_for_gpu, |
+ PROCESS_DUP_HANDLE, |
+ FALSE, |
+ 0); |
+#else |
+ browser_process_for_gpu = base::GetCurrentProcessHandle(); |
+#endif |
+ |
gpu_channel_ = new GpuChannelHost(this, gpu_host_id_, gpu_client_id_); |
gpu_channel_->set_gpu_info(request.gpu_info); |
content::GetContentClient()->SetGpuInfo(request.gpu_info); |
// Connect to the GPU process if a channel name was received. |
- gpu_channel_->Connect(request.channel_handle); |
+ gpu_channel_->Connect(request.channel_handle, browser_process_for_gpu); |
return gpu_channel_.get(); |
} |