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,
-                                            &params->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);