Commit dc4d746b authored by Robert Ogden's avatar Robert Ogden Committed by Commit Bot

Check DataSaver is enabled for IsolatedPrerenders

Checks in two separate places, the TabHelper and the
URLLoaderInterceptor.

Bug: 1023486
Change-Id: I93e5775f700e6da0852c4a956f0893b40b5808d8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2024494Reviewed-by: default avatarRyan Sturm <ryansturm@chromium.org>
Commit-Queue: Robert Ogden <robertogden@chromium.org>
Cr-Commit-Position: refs/heads/master@{#736077}
parent add2aa14
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h" #include "chrome/test/base/ui_test_utils.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h"
#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_task_traits.h"
#include "content/public/common/resource_type.h" #include "content/public/common/resource_type.h"
#include "content/public/test/browser_test_base.h" #include "content/public/test/browser_test_base.h"
...@@ -77,6 +78,12 @@ class IsolatedPrerenderBrowserTest ...@@ -77,6 +78,12 @@ class IsolatedPrerenderBrowserTest
cmd->AppendSwitchASCII("host-rules", "MAP * 127.0.0.1"); cmd->AppendSwitchASCII("host-rules", "MAP * 127.0.0.1");
} }
void SetDataSaverEnabled(bool enabled) {
data_reduction_proxy::DataReductionProxySettings::
SetDataSaverEnabledForTesting(browser()->profile()->GetPrefs(),
enabled);
}
std::unique_ptr<prerender::PrerenderHandle> StartPrerender(const GURL& url) { std::unique_ptr<prerender::PrerenderHandle> StartPrerender(const GURL& url) {
prerender::PrerenderManager* prerender_manager = prerender::PrerenderManager* prerender_manager =
prerender::PrerenderManagerFactory::GetForBrowserContext( prerender::PrerenderManagerFactory::GetForBrowserContext(
...@@ -146,6 +153,8 @@ class IsolatedPrerenderBrowserTest ...@@ -146,6 +153,8 @@ class IsolatedPrerenderBrowserTest
IN_PROC_BROWSER_TEST_F(IsolatedPrerenderBrowserTest, IN_PROC_BROWSER_TEST_F(IsolatedPrerenderBrowserTest,
DISABLE_ON_WIN_MAC_CHROMEOS(PrerenderIsIsolated)) { DISABLE_ON_WIN_MAC_CHROMEOS(PrerenderIsIsolated)) {
SetDataSaverEnabled(true);
base::HistogramTester histogram_tester; base::HistogramTester histogram_tester;
ASSERT_TRUE(content::SetCookie(browser()->profile(), GetOriginServerURL("/"), ASSERT_TRUE(content::SetCookie(browser()->profile(), GetOriginServerURL("/"),
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h" #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h"
#include "chrome/browser/prerender/isolated/isolated_prerender_features.h" #include "chrome/browser/prerender/isolated/isolated_prerender_features.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h"
#include "components/google/core/common/google_util.h" #include "components/google/core/common/google_util.h"
#include "components/search_engines/template_url_service.h" #include "components/search_engines/template_url_service.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
...@@ -222,6 +223,13 @@ void IsolatedPrerenderTabHelper::OnPredictionUpdated( ...@@ -222,6 +223,13 @@ void IsolatedPrerenderTabHelper::OnPredictionUpdated(
return; return;
} }
// DataSaver must be enabled by the user to use this feature.
if (!data_reduction_proxy::DataReductionProxySettings::
IsDataSaverEnabledByUser(profile_->IsOffTheRecord(),
profile_->GetPrefs())) {
return;
}
if (!prediction.has_value()) { if (!prediction.has_value()) {
return; return;
} }
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "chrome/browser/prerender/isolated/isolated_prerender_features.h" #include "chrome/browser/prerender/isolated/isolated_prerender_features.h"
#include "chrome/browser/prerender/isolated/prefetched_response_container.h" #include "chrome/browser/prerender/isolated/prefetched_response_container.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
#include "content/public/browser/storage_partition.h" #include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
...@@ -63,6 +64,13 @@ class IsolatedPrerenderTabHelperTest : public ChromeRenderViewHostTestHarness { ...@@ -63,6 +64,13 @@ class IsolatedPrerenderTabHelperTest : public ChromeRenderViewHostTestHarness {
IsolatedPrerenderTabHelper::FromWebContents(web_contents()) IsolatedPrerenderTabHelper::FromWebContents(web_contents())
->SetURLLoaderFactoryForTesting(test_shared_loader_factory_); ->SetURLLoaderFactoryForTesting(test_shared_loader_factory_);
SetDataSaverEnabled(true);
}
void SetDataSaverEnabled(bool enabled) {
data_reduction_proxy::DataReductionProxySettings::
SetDataSaverEnabledForTesting(profile()->GetPrefs(), enabled);
} }
void MakeNavigationPrediction(const content::WebContents* web_contents, void MakeNavigationPrediction(const content::WebContents* web_contents,
...@@ -175,6 +183,20 @@ TEST_F(IsolatedPrerenderTabHelperTest, FeatureDisabled) { ...@@ -175,6 +183,20 @@ TEST_F(IsolatedPrerenderTabHelperTest, FeatureDisabled) {
EXPECT_EQ(RequestCount(), 0); EXPECT_EQ(RequestCount(), 0);
} }
TEST_F(IsolatedPrerenderTabHelperTest, DataSaverDisabled) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(
features::kPrefetchSRPNavigationPredictions_HTMLOnly);
SetDataSaverEnabled(false);
GURL doc_url("https://www.google.com/search?q=cats");
GURL prediction_url("https://www.cat-food.com/");
MakeNavigationPrediction(web_contents(), doc_url, {prediction_url});
EXPECT_EQ(RequestCount(), 0);
}
TEST_F(IsolatedPrerenderTabHelperTest, GoogleSRPOnly) { TEST_F(IsolatedPrerenderTabHelperTest, GoogleSRPOnly) {
base::test::ScopedFeatureList scoped_feature_list; base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature( scoped_feature_list.InitAndEnableFeature(
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "chrome/browser/prerender/prerender_manager.h" #include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_manager_factory.h" #include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
#include "content/public/browser/storage_partition.h" #include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
...@@ -25,6 +26,13 @@ bool ShouldInterceptRequestForPrerender( ...@@ -25,6 +26,13 @@ bool ShouldInterceptRequestForPrerender(
if (!base::FeatureList::IsEnabled(features::kIsolatePrerenders)) if (!base::FeatureList::IsEnabled(features::kIsolatePrerenders))
return false; return false;
// Lite Mode must be enabled for this feature to be enabled.
Profile* profile = Profile::FromBrowserContext(browser_context);
bool ds_enabled = data_reduction_proxy::DataReductionProxySettings::
IsDataSaverEnabledByUser(profile->IsOffTheRecord(), profile->GetPrefs());
if (!ds_enabled)
return false;
// TODO(crbug.com/1023486): Add other triggering checks. // TODO(crbug.com/1023486): Add other triggering checks.
content::WebContents* web_contents = content::WebContents* web_contents =
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "chrome/browser/prerender/prerender_manager.h" #include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_manager_factory.h" #include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/common/resource_type.h" #include "content/public/common/resource_type.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -48,6 +49,16 @@ class IsolatedPrerenderURLLoaderInterceptorTest ...@@ -48,6 +49,16 @@ class IsolatedPrerenderURLLoaderInterceptorTest
IsolatedPrerenderURLLoaderInterceptorTest() = default; IsolatedPrerenderURLLoaderInterceptorTest() = default;
~IsolatedPrerenderURLLoaderInterceptorTest() override = default; ~IsolatedPrerenderURLLoaderInterceptorTest() override = default;
void SetDataSaverEnabled(bool enabled) {
data_reduction_proxy::DataReductionProxySettings::
SetDataSaverEnabledForTesting(profile()->GetPrefs(), enabled);
}
void SetUp() override {
ChromeRenderViewHostTestHarness::SetUp();
SetDataSaverEnabled(true);
}
void TearDown() override { void TearDown() override {
prerender::PrerenderManager* prerender_manager = prerender::PrerenderManager* prerender_manager =
prerender::PrerenderManagerFactory::GetForBrowserContext(profile()); prerender::PrerenderManagerFactory::GetForBrowserContext(profile());
...@@ -150,6 +161,39 @@ TEST_F(IsolatedPrerenderURLLoaderInterceptorTest, DISABLE_ASAN(FeatureOff)) { ...@@ -150,6 +161,39 @@ TEST_F(IsolatedPrerenderURLLoaderInterceptorTest, DISABLE_ASAN(FeatureOff)) {
EXPECT_FALSE(was_intercepted().value()); EXPECT_FALSE(was_intercepted().value());
} }
TEST_F(IsolatedPrerenderURLLoaderInterceptorTest,
DISABLE_ASAN(DataSaverDisabled)) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(features::kIsolatePrerenders);
SetDataSaverEnabled(false);
std::unique_ptr<prerender::PrerenderHandle> handle =
StartPrerender(TestURL());
std::unique_ptr<IsolatedPrerenderURLLoaderInterceptor> interceptor =
std::make_unique<IsolatedPrerenderURLLoaderInterceptor>(
handle->contents()
->prerender_contents()
->GetMainFrame()
->GetFrameTreeNodeId());
network::ResourceRequest request;
request.url = TestURL();
request.resource_type = static_cast<int>(content::ResourceType::kMainFrame);
request.method = "GET";
interceptor->MaybeCreateLoader(
request, profile(),
base::BindOnce(
&IsolatedPrerenderURLLoaderInterceptorTest::HandlerCallback,
base::Unretained(this)));
WaitForCallback();
EXPECT_TRUE(was_intercepted().has_value());
EXPECT_FALSE(was_intercepted().value());
}
TEST_F(IsolatedPrerenderURLLoaderInterceptorTest, DISABLE_ASAN(NotAPrerender)) { TEST_F(IsolatedPrerenderURLLoaderInterceptorTest, DISABLE_ASAN(NotAPrerender)) {
base::test::ScopedFeatureList scoped_feature_list; base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(features::kIsolatePrerenders); scoped_feature_list.InitAndEnableFeature(features::kIsolatePrerenders);
......
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