Refactor subresource redirect to use feature
Allow subresource redirect to be enabled via field trial
Bug: 1013776
Change-Id: I72e8221a584005cb8d351b65d9a53c6c8be1e744
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1861276
Commit-Queue: rajendrant <[email protected]>
Reviewed-by: Tarun Bansal <[email protected]>
Reviewed-by: Kinuko Yasuda <[email protected]>
Reviewed-by: John Abd-El-Malek <[email protected]>
Reviewed-by: Robert Ogden <[email protected]>
Cr-Commit-Position: refs/heads/master@{#707622}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index dbb4418f..959ba7d 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2095,7 +2095,7 @@
{"enable-subresource-redirect",
flag_descriptions::kEnableSubresourceRedirectName,
flag_descriptions::kEnableSubresourceRedirectDescription, kOsAll,
- SINGLE_VALUE_TYPE(switches::kEnableSubresourceRedirect)},
+ FEATURE_VALUE_TYPE(blink::features::kSubresourceRedirect)},
#if defined(OS_ANDROID)
{"enable-offline-previews", flag_descriptions::kEnableOfflinePreviewsName,
flag_descriptions::kEnableOfflinePreviewsDescription, kOsAndroid,
diff --git a/chrome/browser/data_saver/subresource_redirect_browsertest.cc b/chrome/browser/data_saver/subresource_redirect_browsertest.cc
index e00d470..2706b0a 100644
--- a/chrome/browser/data_saver/subresource_redirect_browsertest.cc
+++ b/chrome/browser/data_saver/subresource_redirect_browsertest.cc
@@ -4,19 +4,27 @@
#include "base/task/thread_pool/thread_pool_instance.h"
#include "base/test/metrics/histogram_tester.h"
+#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h"
+#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h"
#include "chrome/browser/metrics/subprocess_metrics_provider.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
-#include "chrome/common/chrome_features.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/test/browser_test_utils.h"
#include "net/base/escape.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
+#include "third_party/blink/public/common/features.h"
namespace {
+// TODO(rajendrant): Add tests to verify subresource redirect is applied only
+// for data saver users and also not applied for incognito profiles.
+
// Retries fetching |histogram_name| until it contains at least |count| samples.
+// TODO(rajendrant): Convert the tests to wait for image load to complete or the
+// page load complete, instead of waiting on the histograms.
void RetryForHistogramUntilCountReached(base::HistogramTester* histogram_tester,
const std::string& histogram_name,
size_t count) {
@@ -41,50 +49,42 @@
class SubresourceRedirectBrowserTest : public InProcessBrowserTest {
public:
- SubresourceRedirectBrowserTest() {}
+ explicit SubresourceRedirectBrowserTest(
+ const std::string& included_path_suffixes = "")
+ : included_path_suffixes_(included_path_suffixes),
+ https_server_(net::EmbeddedTestServer::TYPE_HTTPS),
+ compression_server_(net::EmbeddedTestServer::TYPE_HTTPS) {}
void SetUp() override {
// |http_server| setup.
- http_server_.reset(
- new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTP));
- http_server_->ServeFilesFromSourceDirectory("chrome/test/data");
-
- ASSERT_TRUE(http_server_->Start());
-
- http_url_ = http_server_->GetURL("insecure.com", "/");
+ http_server_.ServeFilesFromSourceDirectory("chrome/test/data");
+ ASSERT_TRUE(http_server_.Start());
+ http_url_ = http_server_.GetURL("insecure.com", "/");
ASSERT_TRUE(http_url_.SchemeIs(url::kHttpScheme));
// |https_server| setup.
- https_server_.reset(
- new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
- https_server_->ServeFilesFromSourceDirectory("chrome/test/data");
-
- ASSERT_TRUE(https_server_->Start());
-
- https_url_ = https_server_->GetURL("secure.com", "/");
+ https_server_.ServeFilesFromSourceDirectory("chrome/test/data");
+ ASSERT_TRUE(https_server_.Start());
+ https_url_ = https_server_.GetURL("secure.com", "/");
ASSERT_TRUE(https_url_.SchemeIs(url::kHttpsScheme));
// |compression_server| setup.
- compression_server_.reset(
- new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
- compression_server_->RegisterRequestHandler(base::BindRepeating(
+ compression_server_.RegisterRequestHandler(base::BindRepeating(
&SubresourceRedirectBrowserTest::HandleCompressionServerRequest,
base::Unretained(this)));
-
- ASSERT_TRUE(compression_server_->Start());
-
- compression_url_ = compression_server_->GetURL("compression.com", "/");
+ ASSERT_TRUE(compression_server_.Start());
+ compression_url_ = compression_server_.GetURL("compression.com", "/");
ASSERT_TRUE(compression_url_.SchemeIs(url::kHttpsScheme));
+ scoped_feature_list_.InitAndEnableFeatureWithParameters(
+ blink::features::kSubresourceRedirect,
+ {{"included_path_suffixes", included_path_suffixes_},
+ {"lite_page_subresource_origin", compression_url_.spec()}});
+
InProcessBrowserTest::SetUp();
}
void SetUpCommandLine(base::CommandLine* command_line) override {
- command_line->AppendSwitchASCII("litepage-server-subresource-host",
- compression_url_.spec());
-
- command_line->AppendSwitch("enable-subresource-redirect");
-
// Need to resolve all 3 of the above servers to 127.0.0.1:port, and
// the servers themselves can't serve using 127.0.0.1:port as the
// compressed resource URLs rely on subdomains, and subdomains
@@ -112,10 +112,10 @@
GURL request_url() const { return request_url_; }
GURL HttpURLWithPath(const std::string& path) {
- return http_server_->GetURL("insecure.com", path);
+ return http_server_.GetURL("insecure.com", path);
}
GURL HttpsURLWithPath(const std::string& path) {
- return https_server_->GetURL("secure.com", path);
+ return https_server_.GetURL("secure.com", path);
}
void SetCompressionServerToFail() { compression_server_fail_ = true; }
@@ -124,7 +124,7 @@
private:
void TearDownOnMainThread() override {
- EXPECT_TRUE(https_server_->ShutdownAndWaitUntilComplete());
+ EXPECT_TRUE(https_server_.ShutdownAndWaitUntilComplete());
InProcessBrowserTest::TearDownOnMainThread();
}
@@ -163,14 +163,17 @@
return std::move(response);
}
+ base::test::ScopedFeatureList scoped_feature_list_;
+ const std::string included_path_suffixes_;
+
GURL compression_url_;
GURL http_url_;
GURL https_url_;
GURL request_url_;
- std::unique_ptr<net::EmbeddedTestServer> http_server_;
- std::unique_ptr<net::EmbeddedTestServer> https_server_;
- std::unique_ptr<net::EmbeddedTestServer> compression_server_;
+ net::EmbeddedTestServer http_server_;
+ net::EmbeddedTestServer https_server_;
+ net::EmbeddedTestServer compression_server_;
base::HistogramTester histogram_tester_;
@@ -182,15 +185,8 @@
class DifferentMediaInclusionSubresourceRedirectBrowserTest
: public SubresourceRedirectBrowserTest {
public:
- void SetUp() override {
- feature_list_.InitAndEnableFeatureWithParameters(
- features::kSubresourceRedirectIncludedMediaSuffixes,
- {{"included_path_suffixes", ".svg"}});
- SubresourceRedirectBrowserTest::SetUp();
- }
-
- private:
- base::test::ScopedFeatureList feature_list_;
+ DifferentMediaInclusionSubresourceRedirectBrowserTest()
+ : SubresourceRedirectBrowserTest(".svg") {}
};
// NOTE: It is indirectly verified that correct requests are being sent to
@@ -386,7 +382,7 @@
// SubresourceRedirectIncludedMediaSuffixes set to only allow .svg, so no
// internal redirect should occur.
IN_PROC_BROWSER_TEST_F(DifferentMediaInclusionSubresourceRedirectBrowserTest,
- NoTriggerWhenNotIncludedInMeidaSuffixes) {
+ NoTriggerWhenNotIncludedInMediaSuffixes) {
ui_test_utils::NavigateToURL(browser(),
HttpsURLWithPath("/load_image/image.html"));