Chromium Code Reviews| Index: content/browser/renderer_host/render_message_filter.cc |
| diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc |
| index 780d930fb1b522303c03b22719aa15fd3c55cbdc..6dbd4585a87fe0201dc89f97fe6817798f39a171 100644 |
| --- a/content/browser/renderer_host/render_message_filter.cc |
| +++ b/content/browser/renderer_host/render_message_filter.cc |
| @@ -331,10 +331,10 @@ RenderMessageFilter::~RenderMessageFilter() { |
| // This function should be called on the IO thread. |
|
piman
2014/06/09 18:35:05
I think this invariant is violated now, because we
jbauman
2014/06/09 19:22:25
We already do this in RenderMessageFilter::OnLoadF
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| DCHECK(plugin_host_clients_.empty()); |
| + HostSharedBitmapManager::current()->ProcessRemoved(PeerHandle()); |
| } |
| void RenderMessageFilter::OnChannelClosing() { |
| - HostSharedBitmapManager::current()->ProcessRemoved(PeerHandle()); |
| #if defined(ENABLE_PLUGINS) |
| for (std::set<OpenChannelToNpapiPluginCallback*>::iterator it = |
| plugin_host_clients_.begin(); it != plugin_host_clients_.end(); ++it) { |
| @@ -409,8 +409,8 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message) { |
| OnCheckNotificationPermission) |
| IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SyncAllocateSharedMemory, |
| OnAllocateSharedMemory) |
| - IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SyncAllocateSharedBitmap, |
| - OnAllocateSharedBitmap) |
| + IPC_MESSAGE_HANDLER_DELAY_REPLY( |
| + ChildProcessHostMsg_SyncAllocateSharedBitmap, OnAllocateSharedBitmap) |
| IPC_MESSAGE_HANDLER(ChildProcessHostMsg_AllocatedSharedBitmap, |
| OnAllocatedSharedBitmap) |
| IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DeletedSharedBitmap, |
| @@ -900,12 +900,29 @@ void RenderMessageFilter::OnAllocateSharedMemory( |
| buffer_size, PeerHandle(), handle); |
| } |
| -void RenderMessageFilter::OnAllocateSharedBitmap( |
| +void RenderMessageFilter::AllocateSharedBitmapOnFileThread( |
| uint32 buffer_size, |
| const cc::SharedBitmapId& id, |
| - base::SharedMemoryHandle* handle) { |
| + IPC::Message* reply_msg) { |
| + base::SharedMemoryHandle handle; |
| HostSharedBitmapManager::current()->AllocateSharedBitmapForChild( |
| - PeerHandle(), buffer_size, id, handle); |
| + PeerHandle(), buffer_size, id, &handle); |
| + ChildProcessHostMsg_SyncAllocateSharedBitmap::WriteReplyParams(reply_msg, |
| + handle); |
| + Send(reply_msg); |
| +} |
| + |
| +void RenderMessageFilter::OnAllocateSharedBitmap(uint32 buffer_size, |
| + const cc::SharedBitmapId& id, |
| + IPC::Message* reply_msg) { |
| + BrowserThread::PostTask( |
| + BrowserThread::FILE_USER_BLOCKING, |
| + FROM_HERE, |
| + base::Bind(&RenderMessageFilter::AllocateSharedBitmapOnFileThread, |
| + this, |
| + buffer_size, |
| + id, |
| + reply_msg)); |
| } |
| void RenderMessageFilter::OnAllocatedSharedBitmap( |