Pass frame token to content.mojom.CreateFrameParams

... to replace |opener_routing_id|.

This CL switches content.mojom.CreateFrameParams::opener_routing_id
to use mojo_base.mojom.UnguessableToken.

Note that it is a step forward toward stopping representing |opener
frames| through its routing ID when doing mojo communications between
browser -> renderer.

The next CL will move callers of CreateViewParams::opener_frame_route_id
to also use mojo_base.mojom.UnguessableToken (ie base::UnguessableToken).
That will allow the removal of RenderFrameHostManager::GetOpenerRoutingID()
altogether.

BUG=1051144
[email protected], [email protected], [email protected], [email protected]

Change-Id: Ib0789617cb35234c28cd59584064b4ac84c76bef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2210635
Commit-Queue: Antonio Gomes <[email protected]>
Reviewed-by: Avi Drissman <[email protected]>
Reviewed-by: Kentaro Hara <[email protected]>
Reviewed-by: Dominick Ng <[email protected]>
Reviewed-by: Dave Tapuska <[email protected]>
Cr-Commit-Position: refs/heads/master@{#771607}
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index e2ea71ed..fd47808a 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -2008,10 +2008,11 @@
   return frame_input_handler_.get();
 }
 
-bool RenderFrameHostImpl::CreateRenderFrame(int previous_routing_id,
-                                            int opener_routing_id,
-                                            int parent_routing_id,
-                                            int previous_sibling_routing_id) {
+bool RenderFrameHostImpl::CreateRenderFrame(
+    int previous_routing_id,
+    const base::Optional<base::UnguessableToken>& opener_frame_token,
+    int parent_routing_id,
+    int previous_sibling_routing_id) {
   TRACE_EVENT0("navigation", "RenderFrameHostImpl::CreateRenderFrame");
   DCHECK(!IsRenderFrameLive()) << "Creating frame twice";
 
@@ -2040,7 +2041,7 @@
 
   params->routing_id = routing_id_;
   params->previous_routing_id = previous_routing_id;
-  params->opener_routing_id = opener_routing_id;
+  params->opener_frame_token = opener_frame_token;
   params->parent_routing_id = parent_routing_id;
   params->previous_sibling_routing_id = previous_sibling_routing_id;
   params->replication_state = frame_tree_node()->current_replication_state();
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index a748eb33..fde7c64 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -447,10 +447,11 @@
   }
 
   // Creates a RenderFrame in the renderer process.
-  bool CreateRenderFrame(int previous_routing_id,
-                         int opener_routing_id,
-                         int parent_routing_id,
-                         int previous_sibling_routing_id);
+  bool CreateRenderFrame(
+      int previous_routing_id,
+      const base::Optional<base::UnguessableToken>& opener_frame_token,
+      int parent_routing_id,
+      int previous_sibling_routing_id);
 
   // Deletes the RenderFrame in the renderer process.
   // Postcondition: |is_active()| will return false.
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index 7bb200e5..98475dc 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -2503,9 +2503,9 @@
 
   SiteInstance* site_instance = render_frame_host->GetSiteInstance();
 
-  int opener_routing_id = MSG_ROUTING_NONE;
+  base::Optional<base::UnguessableToken> opener_frame_token;
   if (frame_tree_node_->opener())
-    opener_routing_id = GetOpenerRoutingID(site_instance);
+    opener_frame_token = GetOpenerFrameToken(site_instance);
 
   int parent_routing_id = MSG_ROUTING_NONE;
   if (frame_tree_node_->parent()) {
@@ -2552,7 +2552,7 @@
   }
 
   return delegate_->CreateRenderFrameForRenderManager(
-      render_frame_host, previous_routing_id, opener_routing_id,
+      render_frame_host, previous_routing_id, opener_frame_token,
       parent_routing_id, previous_sibling_routing_id);
 }
 
diff --git a/content/browser/frame_host/render_frame_host_manager.h b/content/browser/frame_host/render_frame_host_manager.h
index 2f699112c..21d6ea3 100644
--- a/content/browser/frame_host/render_frame_host_manager.h
+++ b/content/browser/frame_host/render_frame_host_manager.h
@@ -126,7 +126,7 @@
     virtual bool CreateRenderFrameForRenderManager(
         RenderFrameHost* render_frame_host,
         int proxy_routing_id,
-        int opener_routing_id,
+        const base::Optional<base::UnguessableToken>& opener_frame_token,
         int parent_routing_id,
         int previous_sibling_routing_id) = 0;
     virtual void BeforeUnloadFiredFromRenderManager(
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index 389c111a..d2968dd 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -6198,7 +6198,7 @@
     ignore_result(params->interface_bundle->browser_interface_broker
                       .InitWithNewPipeAndPassReceiver());
     params->previous_routing_id = previous_routing_id;
-    params->opener_routing_id = IPC::mojom::kRoutingIdNone;
+    params->opener_frame_token = base::nullopt;
     params->parent_routing_id =
         shell()->web_contents()->GetMainFrame()->GetRoutingID();
     params->previous_sibling_routing_id = IPC::mojom::kRoutingIdNone;
@@ -6270,7 +6270,7 @@
     ignore_result(params->interface_bundle->browser_interface_broker
                       .InitWithNewPipeAndPassReceiver());
     params->previous_routing_id = IPC::mojom::kRoutingIdNone;
-    params->opener_routing_id = IPC::mojom::kRoutingIdNone;
+    params->opener_frame_token = base::nullopt;
     params->parent_routing_id = parent_routing_id;
     params->previous_sibling_routing_id = IPC::mojom::kRoutingIdNone;
     params->frame_owner_properties = blink::mojom::FrameOwnerProperties::New();
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index b7493e2..a9c62d7 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -6570,7 +6570,7 @@
 bool WebContentsImpl::CreateRenderFrameForRenderManager(
     RenderFrameHost* render_frame_host,
     int previous_routing_id,
-    int opener_routing_id,
+    const base::Optional<base::UnguessableToken>& opener_frame_token,
     int parent_routing_id,
     int previous_sibling_routing_id) {
   TRACE_EVENT0("browser,navigation",
@@ -6578,9 +6578,10 @@
 
   RenderFrameHostImpl* rfh =
       static_cast<RenderFrameHostImpl*>(render_frame_host);
-  if (!rfh->CreateRenderFrame(previous_routing_id, opener_routing_id,
-                              parent_routing_id, previous_sibling_routing_id))
+  if (!rfh->CreateRenderFrame(previous_routing_id, opener_frame_token,
+                              parent_routing_id, previous_sibling_routing_id)) {
     return false;
+  }
 
   // TODO(nasko): When RenderWidgetHost is owned by RenderFrameHost, the passed
   // RenderFrameHost will have to be associated with the appropriate
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 9053e8be..71ddac82 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -931,7 +931,7 @@
   bool CreateRenderFrameForRenderManager(
       RenderFrameHost* render_frame_host,
       int previous_routing_id,
-      int opener_routing_id,
+      const base::Optional<base::UnguessableToken>& opener_frame_token,
       int parent_routing_id,
       int previous_sibling_routing_id) override;
   void BeforeUnloadFiredFromRenderManager(