Commit 74f4a814 authored by Hiroki Nakagawa's avatar Hiroki Nakagawa Committed by Chromium LUCI CQ

Prerender: Abort prerendering triggered by <link rel=next>

NoStatePrefetch now disables prefetching triggered by <link rel=next>
(see https://crbug.com/1161545). To be aligned with that, this CL makes
Prerender2 abort prerendering triggered by <link rel=next> as well.

Bug: 1155925
Change-Id: I3986e9520154adf380da50bcf5e261d2fdcfca4d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2626609
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#843472}
parent db367b20
...@@ -38,6 +38,16 @@ void PrerenderProcessor::Start( ...@@ -38,6 +38,16 @@ void PrerenderProcessor::Start(
} }
state_ = State::kStarted; state_ = State::kStarted;
// Prerendering is only supported for <link rel=prerender>.
// We may want to support it for <link rel=next> if NoStatePrefetch re-enables
// it again. See https://crbug.com/1161545.
switch (attributes->rel_type) {
case blink::mojom::PrerenderRelType::kPrerender:
break;
case blink::mojom::PrerenderRelType::kNext:
return;
}
// TODO(https://crbug.com/1132746): Validate the origin, etc and send // TODO(https://crbug.com/1132746): Validate the origin, etc and send
// mojo::ReportBadMessage() if necessary like the legacy prerender // mojo::ReportBadMessage() if necessary like the legacy prerender
// `prerender::PrerenderProcessorImpl::Start()`. // `prerender::PrerenderProcessorImpl::Start()`.
......
...@@ -205,5 +205,48 @@ TEST_F(PrerenderProcessorTest, CancelBeforeStart) { ...@@ -205,5 +205,48 @@ TEST_F(PrerenderProcessorTest, CancelBeforeStart) {
EXPECT_EQ(bad_message_error, "PP_CANCEL_BEFORE_START"); EXPECT_EQ(bad_message_error, "PP_CANCEL_BEFORE_START");
} }
// Tests that prerendering triggered by <link rel=next> is aborted. This trigger
// is not supported for now, but we may want to support it if NoStatePrefetch
// re-enables it again. See https://crbug.com/1161545.
TEST_F(PrerenderProcessorTest, RelTypeNext) {
RenderFrameHostImpl* render_frame_host = GetRenderFrameHost();
PrerenderHostRegistry* registry = GetPrerenderHostRegistry();
mojo::Remote<blink::mojom::PrerenderProcessor> remote;
render_frame_host->BindPrerenderProcessor(
render_frame_host, remote.BindNewPipeAndPassReceiver());
// Set up the error handler for bad mojo messages.
std::string bad_message_error;
mojo::SetDefaultProcessErrorHandler(
base::BindLambdaForTesting([&](const std::string& error) {
EXPECT_FALSE(error.empty());
EXPECT_TRUE(bad_message_error.empty());
bad_message_error = error;
}));
const GURL kPrerenderingUrl("https://example.com/next");
auto attributes = blink::mojom::PrerenderAttributes::New();
attributes->url = kPrerenderingUrl;
// Set kNext instead of the default kPrerender.
attributes->rel_type = blink::mojom::PrerenderRelType::kNext;
attributes->referrer = blink::mojom::Referrer::New();
// Start() call with kNext should be aborted.
EXPECT_FALSE(registry->FindHostByUrlForTesting(kPrerenderingUrl));
remote->Start(std::move(attributes));
remote.FlushForTesting();
EXPECT_FALSE(registry->FindHostByUrlForTesting(kPrerenderingUrl));
// Start() call with kNext is a valid request, currently it's not supported
// though. The request shouldn't result in a bad message failure.
EXPECT_TRUE(bad_message_error.empty());
// Cancel() call should not be reported as a bad mojo message as well.
remote->Cancel();
remote.FlushForTesting();
EXPECT_TRUE(bad_message_error.empty());
}
} // namespace } // namespace
} // namespace content } // namespace content
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