Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Unified Diff: content/browser/web_contents/web_contents_impl.cc

Issue 940493002: Fix (attempt) for crbug.com/459115. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: commentz Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/message_port_service.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/web_contents/web_contents_impl.cc
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 3c46724086182f256112f0cb2c3841faf15eb3fa..3b300b6e4f774eeb75b2580c72714c9d6a11a20d 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -41,7 +41,6 @@
#include "content/browser/media/audio_stream_monitor.h"
#include "content/browser/media/capture/web_contents_audio_muter.h"
#include "content/browser/message_port_message_filter.h"
-#include "content/browser/message_port_service.h"
#include "content/browser/plugin_content_origin_whitelist.h"
#include "content/browser/power_save_blocker_impl.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
@@ -3984,15 +3983,6 @@ void WebContentsImpl::RouteMessageEvent(
ViewMsg_PostMessage_Params new_params(params);
- if (!params.message_port_ids.empty()) {
- MessagePortMessageFilter* message_port_message_filter =
- static_cast<RenderProcessHostImpl*>(GetRenderProcessHost())
- ->message_port_message_filter();
- message_port_message_filter->UpdateMessagePortsWithNewRoutes(
- params.message_port_ids,
- &new_params.new_routing_ids);
- }
-
// If there is a source_routing_id, translate it to the routing ID for
// the equivalent swapped out RVH in the target process. If we need
// to create a swapped out RVH for the source tab, we create its opener
@@ -4027,7 +4017,24 @@ void WebContentsImpl::RouteMessageEvent(
// In most cases, we receive this from a swapped out RenderViewHost.
// It is possible to receive it from one that has just been swapped in,
// in which case we might as well deliver the message anyway.
- Send(new ViewMsg_PostMessageEvent(GetRoutingID(), new_params));
+ if (!params.message_port_ids.empty()) {
+ // Updating the message port information has to be done in the IO thread;
+ // MessagePortMessageFilter::RouteMessageEventWithMessagePorts will send
+ // ViewMsg_PostMessageEvent after it's done. Note that a trivial solution
+ // would've been to post a task on the IO thread to do the IO-thread-bound
+ // work, and make that post a task back to WebContentsImpl in the UI
+ // thread. But we cannot do that, since there's nothing to guarantee that
+ // WebContentsImpl stays alive during the round trip.
+ scoped_refptr<MessagePortMessageFilter> message_port_message_filter(
+ static_cast<RenderProcessHostImpl*>(GetRenderProcessHost())
Charlie Reis 2015/02/18 19:55:35 This will need to be updated for OOPIF, but it's f
+ ->message_port_message_filter());
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&MessagePortMessageFilter::RouteMessageEventWithMessagePorts,
+ message_port_message_filter, GetRoutingID(), new_params));
+ } else {
+ Send(new ViewMsg_PostMessageEvent(GetRoutingID(), new_params));
+ }
}
bool WebContentsImpl::AddMessageToConsole(int32 level,
« no previous file with comments | « content/browser/message_port_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698