Commit 28732ec2 authored by Tarun Bansal's avatar Tarun Bansal Committed by Commit Bot

Extend Fallback from prerender requests to preconnect for non-omnibox requests

Fallback prerender requests to preconnect when it's not possible
to do a prerender. This primarily affects low memory devices.
This is behind kPrerenderFallbackToPreconnect feature.
Currently, this fallback is enabled for only the prerenders initiated by
omnibox. This CL extends it to other cases as well.

Change-Id: Iaf51b73d10a6c8f90f06ab4629ecf7d13f4a992f
Bug: 943442
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1920430Reviewed-by: default avatarRobert Ogden <robertogden@chromium.org>
Commit-Queue: Tarun Bansal <tbansal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#716355}
parent c60f8714
...@@ -787,11 +787,6 @@ void PrerenderManager::MaybePreconnect(Origin origin, ...@@ -787,11 +787,6 @@ void PrerenderManager::MaybePreconnect(Origin origin,
return; return;
} }
// Currently, the fallback is only enabled for prerenders initiated by
// omnibox.
if (origin != ORIGIN_OMNIBOX)
return;
auto* loading_predictor = predictors::LoadingPredictorFactory::GetForProfile( auto* loading_predictor = predictors::LoadingPredictorFactory::GetForProfile(
Profile::FromBrowserContext(profile_)); Profile::FromBrowserContext(profile_));
if (loading_predictor) { if (loading_predictor) {
......
...@@ -1246,7 +1246,7 @@ TEST_F(PrerenderTest, OmniboxAllowedWhenNotDisabled_LowMemory_FeatureDisabled) { ...@@ -1246,7 +1246,7 @@ TEST_F(PrerenderTest, OmniboxAllowedWhenNotDisabled_LowMemory_FeatureDisabled) {
// Test that when prerender fails and the // Test that when prerender fails and the
// kPrerenderFallbackToPreconnect experiment is enabled, a // kPrerenderFallbackToPreconnect experiment is enabled, a
// prerender initiated by omnibox actually results in preconnect. // prerender initiated by omnibox actually results in preconnect.
TEST_F(PrerenderTest, OmniboxAllowedWhenNotDisabled_LowMemory_FeatureEnabled) { TEST_F(PrerenderTest, Omnibox_AllowedWhenNotDisabled_LowMemory_FeatureEnabled) {
const GURL kURL(GURL("http://www.example.com")); const GURL kURL(GURL("http://www.example.com"));
base::test::ScopedFeatureList scoped_feature_list; base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature( scoped_feature_list.InitAndEnableFeature(
...@@ -1273,6 +1273,37 @@ TEST_F(PrerenderTest, OmniboxAllowedWhenNotDisabled_LowMemory_FeatureEnabled) { ...@@ -1273,6 +1273,37 @@ TEST_F(PrerenderTest, OmniboxAllowedWhenNotDisabled_LowMemory_FeatureEnabled) {
EXPECT_NE(it, active_hints.end()); EXPECT_NE(it, active_hints.end());
} }
// Test that when prerender fails and the
// kPrerenderFallbackToPreconnect experiment is enabled, a
// prerender initiated by an external request actually results in preconnect.
TEST_F(PrerenderTest,
ExternalRequest_AllowedWhenNotDisabled_LowMemory_FeatureEnabled) {
const GURL kURL(GURL("http://www.example.com"));
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(
features::kPrerenderFallbackToPreconnect);
predictors::LoadingPredictorConfig config;
PopulateTestConfig(&config);
auto* loading_predictor = predictors::LoadingPredictorFactory::GetForProfile(
Profile::FromBrowserContext(profile()));
loading_predictor->StartInitialization();
content::RunAllTasksUntilIdle();
// Prerender should be disabled on low memory devices.
prerender_manager()->SetIsLowEndDevice(true);
EXPECT_FALSE(prerender_manager()->AddPrerenderFromExternalRequest(
kURL, content::Referrer(), nullptr, gfx::Rect(kSize)));
// Verify that the prerender request falls back to a preconnect request.
EXPECT_EQ(1u, loading_predictor->GetActiveHintsSizeForTesting());
auto& active_hints = loading_predictor->active_hints_for_testing();
auto it = active_hints.find(kURL);
EXPECT_NE(it, active_hints.end());
}
TEST_F(PrerenderTest, LinkRelStillAllowedWhenDisabled) { TEST_F(PrerenderTest, LinkRelStillAllowedWhenDisabled) {
DisablePrerender(); DisablePrerender();
GURL url("http://www.google.com/"); GURL url("http://www.google.com/");
......
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