Index: content/browser/renderer_host/render_view_host_impl.cc |
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc |
index 7613dcfd42b69bf5517ba666fdf81a44d781f3c3..e79d8da86c9832e43a4afda964d9298a905a8926 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" |
@@ -827,7 +828,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. |