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 6984a0d179015df883c49ed1ede37f6ceffcf46c..7b992670317025f0f0e38e836ec5efedcf7b4858 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. |