Commit 040a2146 authored by Hiroki Nakagawa's avatar Hiroki Nakagawa Committed by Chromium LUCI CQ

Prerender: Explicitly avoid activation for prerendering navigation

Before this CL, activation for prerendering navigation is avoided by the
order of prerender start and map insertion in
PrerenderHostRegistry::StartPrerendering().

After this CL, it's explicitly avoided by checking
RenderFrameHostImpl::IsPrerendering() in
PrerenderHostRegistry::SelectForNavigation().

Bug: 1132746
Change-Id: I112cab26f6abd004554ef0033613ee5e919c5552
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2626683Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#843044}
parent f4c75709
...@@ -33,16 +33,7 @@ void PrerenderHostRegistry::CreateAndStartHost( ...@@ -33,16 +33,7 @@ void PrerenderHostRegistry::CreateAndStartHost(
auto prerender_host = std::make_unique<PrerenderHost>( auto prerender_host = std::make_unique<PrerenderHost>(
std::move(attributes), initiator_render_frame_host_id, initiator_origin); std::move(attributes), initiator_render_frame_host_id, initiator_origin);
// Start prerendering before adding the host to the map to make sure
// navigation for prerendering doesn't select itself.
// TODO(https://crbug.com/1132746): SelectForNavigation() should avoid select
// a prerender host when the current NavigationRequest is for prerendering
// regardless of the calling order of StartPrerendering(). This modification
// would require the proper `is_prerendering` state in NavigationRequest,
// RenderFrameHostImpl, or somewhere else.
prerender_host->StartPrerendering(); prerender_host->StartPrerendering();
prerender_host_by_url_[prerendering_url] = std::move(prerender_host); prerender_host_by_url_[prerendering_url] = std::move(prerender_host);
} }
...@@ -55,6 +46,10 @@ std::unique_ptr<PrerenderHost> PrerenderHostRegistry::SelectForNavigation( ...@@ -55,6 +46,10 @@ std::unique_ptr<PrerenderHost> PrerenderHostRegistry::SelectForNavigation(
FrameTreeNode& frame_tree_node) { FrameTreeNode& frame_tree_node) {
RenderFrameHostImpl* render_frame_host = frame_tree_node.current_frame_host(); RenderFrameHostImpl* render_frame_host = frame_tree_node.current_frame_host();
// Disallow activation when the navigation is for prerendering.
if (render_frame_host->IsPrerendering())
return nullptr;
// Disallow activation when the render frame host is for a nested browsing // Disallow activation when the render frame host is for a nested browsing
// context (e.g., iframes). This is because nested browsing contexts are // context (e.g., iframes). This is because nested browsing contexts are
// supposed to be created in the parent's browsing context group and can // supposed to be created in the parent's browsing context group and can
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment