VTonNav: Plumb view transition state for pre-render activations.

This patch plumbs view transition state from the commit params to
pre-render navigation params, and start the transition on the renderer
side.

This implements the following design:
https://docs.google.com/document/d/1AxPeYd_LUuHGrmJBtwtU1_qWnoFRDDgINKqaSaWf7EI/edit?pli=1&resourcekey=0-r37M9sgGgmNMFZTLoOZCbg#heading=h.iw544xm71hvg

[email protected]

Bug: 1407700
Change-Id: I527faa20dc70889edf22d7bc2639976923c3a817
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4287036
Reviewed-by: danakj <[email protected]>
Reviewed-by: Rakina Zata Amni <[email protected]>
Reviewed-by: Hiroki Nakagawa <[email protected]>
Commit-Queue: Vladimir Levin <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1110407}
diff --git a/content/browser/renderer_host/page_impl.cc b/content/browser/renderer_host/page_impl.cc
index 03180d3..a4b876f 100644
--- a/content/browser/renderer_host/page_impl.cc
+++ b/content/browser/renderer_host/page_impl.cc
@@ -171,7 +171,8 @@
 }
 
 void PageImpl::ActivateForPrerendering(
-    StoredPage::RenderViewHostImplSafeRefSet& render_view_hosts) {
+    StoredPage::RenderViewHostImplSafeRefSet& render_view_hosts,
+    absl::optional<blink::ViewTransitionState> view_transition_state) {
   base::OnceClosure did_activate_render_views =
       base::BindOnce(&PageImpl::DidActivateAllRenderViewsForPrerendering,
                      weak_factory_.GetWeakPtr());
@@ -179,7 +180,8 @@
   base::RepeatingClosure barrier = base::BarrierClosure(
       render_view_hosts.size(), std::move(did_activate_render_views));
   for (const auto& rvh : render_view_hosts) {
-    base::TimeTicks navigation_start_to_send;
+    auto params = blink::mojom::PrerenderPageActivationParams::New();
+
     // Only send navigation_start to the RenderViewHost for the main frame to
     // avoid sending the info cross-origin. Only this RenderViewHost needs the
     // info, as we expect the other RenderViewHosts are made for cross-origin
@@ -188,16 +190,16 @@
     // not yet committed. These RenderViews still need to know about activation
     // so their documents are created in the non-prerendered state once their
     // navigation is committed.
-    if (main_document_->GetRenderViewHost() == &*rvh)
-      navigation_start_to_send = *activation_start_time_for_prerendering_;
+    if (main_document_->GetRenderViewHost() == &*rvh) {
+      params->activation_start = *activation_start_time_for_prerendering_;
+      params->view_transition_state = std::move(view_transition_state);
+    }
 
-    auto params = blink::mojom::PrerenderPageActivationParams::New();
     params->was_user_activated =
         main_document_->frame_tree_node()
                 ->has_received_user_gesture_before_nav()
             ? blink::mojom::WasActivatedOption::kYes
             : blink::mojom::WasActivatedOption::kNo;
-    params->activation_start = navigation_start_to_send;
     rvh->ActivatePrerenderedPage(std::move(params), barrier);
   }