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);
}