Step two of optionally sending messages to/from message ports as base::Value.
This CL changes every place a MessagePort is transferred between process to
properly propagate the send_messages_as_values flag, as well as makes it
possible for NavigatorConnectContext to set this flag when setting up a
new connection.
This is part of a series of changes:
[1/5] Blink side changes in https://codereview.chromium.org/924983002/ that expose a needed v8 context
[2/5] https://codereview.chromium.org/921013002/ allow MessagePort to send messages as values
[3/5] This CL
[4/5] https://codereview.chromium.org/938403005/ which uses this for navigator.connect services and adds infrastructure for layout tests
[5/5] https://codereview.chromium.org/940423004/ adds layout tests to blink to test these new features
BUG=426458
Review URL: https://codereview.chromium.org/944443003
Cr-Commit-Position: refs/heads/master@{#318578}
diff --git a/content/browser/message_port_provider.cc b/content/browser/message_port_provider.cc
index 7abc7dc..63de381 100644
--- a/content/browser/message_port_provider.cc
+++ b/content/browser/message_port_provider.cc
@@ -16,49 +16,32 @@
namespace content {
-namespace {
-
-void PostMessageOnIOThread(MessagePortMessageFilter* filter,
- int routing_id,
- ViewMsg_PostMessage_Params* params) {
- if (!params->message_port_ids.empty()) {
- filter->UpdateMessagePortsWithNewRoutes(params->message_port_ids,
- ¶ms->new_routing_ids);
- }
- filter->Send(new ViewMsg_PostMessageEvent(routing_id, *params));
-}
-
-} // namespace
-
// static
void MessagePortProvider::PostMessageToFrame(
WebContents* web_contents,
const base::string16& source_origin,
const base::string16& target_origin,
const base::string16& data,
- const std::vector<int>& ports) {
+ const std::vector<TransferredMessagePort>& ports) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- ViewMsg_PostMessage_Params* params = new ViewMsg_PostMessage_Params();
- params->is_data_raw_string = true;
- params->data = data;
+ ViewMsg_PostMessage_Params params;
+ params.is_data_raw_string = true;
+ params.data = data;
// Blink requires a source frame to transfer ports. This is why a
// source routing id is set here. See WebDOMMessageEvent::initMessageEvent()
- params->source_routing_id = web_contents->GetRoutingID();
- params->source_origin = source_origin;
- params->target_origin = target_origin;
- params->message_port_ids = ports;
+ params.source_routing_id = web_contents->GetRoutingID();
+ params.source_origin = source_origin;
+ params.target_origin = target_origin;
+ params.message_ports = ports;
RenderProcessHostImpl* rph =
static_cast<RenderProcessHostImpl*>(web_contents->GetRenderProcessHost());
- MessagePortMessageFilter* mf = rph->message_port_message_filter();
BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- base::Bind(&PostMessageOnIOThread,
- make_scoped_refptr(mf),
- web_contents->GetRoutingID(),
- base::Owned(params)));
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&MessagePortMessageFilter::RouteMessageEventWithMessagePorts,
+ rph->message_port_message_filter(),
+ web_contents->GetRoutingID(), params));
}
// static
@@ -83,7 +66,7 @@
void MessagePortProvider::PostMessageToPort(
int sender_port_id,
const MessagePortMessage& message,
- const std::vector<int>& sent_ports) {
+ const std::vector<TransferredMessagePort>& sent_ports) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
MessagePortService* msp = MessagePortService::GetInstance();
msp->PostMessage(sender_port_id, message, sent_ports);