diff options
Diffstat (limited to 'content/browser/renderer_host/render_view_host_impl.cc')
-rw-r--r-- | content/browser/renderer_host/render_view_host_impl.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc index 6984a0d..7b99267 100644 --- a/content/browser/renderer_host/render_view_host_impl.cc +++ b/content/browser/renderer_host/render_view_host_impl.cc @@ -29,6 +29,7 @@ #include "content/browser/renderer_host/render_process_host_impl.h" #include "content/browser/renderer_host/render_view_host_delegate.h" #include "content/common/accessibility_messages.h" +#include "content/common/browser_plugin_messages.h" #include "content/common/content_constants_internal.h" #include "content/common/desktop_notification_messages.h" #include "content/common/drag_messages.h" @@ -833,7 +834,17 @@ bool RenderViewHostImpl::SuddenTerminationAllowed() const { // RenderViewHostImpl, IPC message handlers: bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) { - if (!BrowserMessageFilter::CheckCanDispatchOnUI(msg, this)) + // Allow BrowserPluginHostMsg_* sync messages to run on the UI thread. + // Platform apps will not support windowed plugins so the deadlock cycle + // browser -> plugin -> renderer -> browser referred in + // BrowserMessageFilter::CheckCanDispatchOnUI() is not supposed to happen. If + // we want to support windowed plugins, sync messages in BrowserPlugin might + // need to be changed to async messages. + // TODO(fsamuel): Disallow BrowserPluginHostMsg_* sync messages to run on UI + // thread and make these messages async: http://crbug.com/149063. + if (msg.type() != BrowserPluginHostMsg_HandleInputEvent::ID && + msg.type() != BrowserPluginHostMsg_ResizeGuest::ID && + !BrowserMessageFilter::CheckCanDispatchOnUI(msg, this)) return true; // Filter out most IPC messages if this renderer is swapped out. |