summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/gpu_process_host.cc34
-rw-r--r--chrome/browser/gpu_process_host.h2
2 files changed, 31 insertions, 5 deletions
diff --git a/chrome/browser/gpu_process_host.cc b/chrome/browser/gpu_process_host.cc
index f4c6164..8e2242e 100644
--- a/chrome/browser/gpu_process_host.cc
+++ b/chrome/browser/gpu_process_host.cc
@@ -177,7 +177,7 @@ void GpuProcessHost::OnControlMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected,
OnGraphicsInfoCollected)
#if defined(OS_LINUX)
- IPC_MESSAGE_HANDLER(GpuHostMsg_GetViewXID, OnGetViewXID)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_GetViewXID, OnGetViewXID)
#elif defined(OS_MACOSX)
IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface,
OnAcceleratedSurfaceSetIOSurface)
@@ -210,12 +210,38 @@ void GpuProcessHost::OnGraphicsInfoCollected(const GPUInfo& gpu_info) {
}
#if defined(OS_LINUX)
-void GpuProcessHost::OnGetViewXID(gfx::NativeViewId id, unsigned long* xid) {
+
+namespace {
+
+void SendDelayedReply(IPC::Message* reply_msg) {
+ GpuProcessHost::Get()->Send(reply_msg);
+}
+
+void GetViewXIDDispatcher(gfx::NativeViewId id, IPC::Message* reply_msg) {
+ unsigned long xid;
+
GtkNativeViewManager* manager = Singleton<GtkNativeViewManager>::get();
- if (!manager->GetXIDForId(xid, id)) {
+ if (!manager->GetPermanentXIDForId(&xid, id)) {
DLOG(ERROR) << "Can't find XID for view id " << id;
- *xid = 0;
+ xid = 0;
}
+
+ GpuHostMsg_GetViewXID::WriteReplyParams(reply_msg, xid);
+
+ // Have to reply from IO thread.
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableFunction(&SendDelayedReply, reply_msg));
+}
+
+}
+
+void GpuProcessHost::OnGetViewXID(gfx::NativeViewId id,
+ IPC::Message *reply_msg) {
+ // Have to request a permanent overlay from UI thread.
+ ChromeThread::PostTask(
+ ChromeThread::UI, FROM_HERE,
+ NewRunnableFunction(&GetViewXIDDispatcher, id, reply_msg));
}
#elif defined(OS_MACOSX)
diff --git a/chrome/browser/gpu_process_host.h b/chrome/browser/gpu_process_host.h
index e4d4559..a5268ba 100644
--- a/chrome/browser/gpu_process_host.h
+++ b/chrome/browser/gpu_process_host.h
@@ -95,7 +95,7 @@ class GpuProcessHost : public BrowserChildProcessHost {
void OnSynchronizeReply();
void OnGraphicsInfoCollected(const GPUInfo& gpu_info);
#if defined(OS_LINUX)
- void OnGetViewXID(gfx::NativeViewId id, unsigned long* xid);
+ void OnGetViewXID(gfx::NativeViewId id, IPC::Message* reply_msg);
#elif defined(OS_MACOSX)
void OnAcceleratedSurfaceSetIOSurface(
const GpuHostMsg_AcceleratedSurfaceSetIOSurface_Params& params);