Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Unified Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 1708583003: Pass data saver pref value into embedded worker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed nits Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_browsertest.cc
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 6129a10d67b9406c7036a95cc9b07ad3e7b66c3f..dda9572e0f216d339fda5c9838c54f601b47f8f7 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -4,6 +4,7 @@
#include <stddef.h>
#include <stdint.h>
+#include <map>
#include <utility>
#include "base/bind.h"
@@ -31,19 +32,24 @@
#include "content/common/service_worker/service_worker_types.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_process_host.h"
+#include "content/public/browser/render_view_host.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_client.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/referrer.h"
#include "content/public/common/security_style.h"
#include "content/public/common/ssl_status.h"
+#include "content/public/common/web_preferences.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/content_browser_test.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
#include "content/shell/browser/shell_content_browser_client.h"
+#include "content/test/test_content_browser_client.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
@@ -194,6 +200,25 @@ scoped_ptr<net::test_server::HttpResponse> VerifyServiceWorkerHeaderInRequest(
return std::move(http_response);
}
+scoped_ptr<net::test_server::HttpResponse> VerifySaveDataHeaderInRequest(
+ const net::test_server::HttpRequest& request) {
+ auto it = request.headers.find("Save-Data");
+ EXPECT_NE(request.headers.end(), it);
+ EXPECT_EQ("on", it->second);
+
+ scoped_ptr<net::test_server::BasicHttpResponse> http_response(
+ new net::test_server::BasicHttpResponse());
+ http_response->set_content_type("text/javascript");
+ return std::move(http_response);
+}
+
+scoped_ptr<net::test_server::HttpResponse> VerifySaveDataHeaderNotInRequest(
+ const net::test_server::HttpRequest& request) {
+ auto it = request.headers.find("Save-Data");
+ EXPECT_EQ(request.headers.end(), it);
+ return make_scoped_ptr(new net::test_server::BasicHttpResponse());
+}
+
// The ImportsBustMemcache test requires that the imported script
// would naturally be cached in blink's memcache, but the embedded
// test server doesn't produce headers that allow the blink's memcache
@@ -1002,6 +1027,128 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
ASSERT_FALSE(blob_data_handle);
}
+class MockContentBrowserClient : public TestContentBrowserClient {
+ public:
+ MockContentBrowserClient()
+ : TestContentBrowserClient(), data_saver_enabled_(false) {}
+
+ ~MockContentBrowserClient() override {}
+
+ void set_data_saver_enabled(bool enabled) { data_saver_enabled_ = enabled; }
+
+ // ContentBrowserClient overrides:
+ bool IsDataSaverEnabled(BrowserContext* context) override {
+ return data_saver_enabled_;
+ }
+
+ void OverrideWebkitPrefs(RenderViewHost* render_view_host,
+ WebPreferences* prefs) override {
+ prefs->data_saver_enabled = data_saver_enabled_;
+ }
+
+ private:
+ bool data_saver_enabled_;
+};
+
+IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchWithSaveData) {
+ embedded_test_server()->RegisterRequestHandler(
+ base::Bind(&VerifySaveDataHeaderInRequest));
+ MockContentBrowserClient content_browser_client;
+ content_browser_client.set_data_saver_enabled(true);
+ ContentBrowserClient* old_client =
+ SetBrowserClientForTesting(&content_browser_client);
+ InstallTestHelper("/service_worker/fetch_in_install.js", SERVICE_WORKER_OK);
+ SetBrowserClientForTesting(old_client);
+}
+
+IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
+ RequestWorkerScriptWithSaveData) {
+ embedded_test_server()->RegisterRequestHandler(
+ base::Bind(&VerifySaveDataHeaderInRequest));
+ MockContentBrowserClient content_browser_client;
+ content_browser_client.set_data_saver_enabled(true);
+ ContentBrowserClient* old_client =
+ SetBrowserClientForTesting(&content_browser_client);
+ InstallTestHelper("/service_worker/generated_sw.js", SERVICE_WORKER_OK);
+ SetBrowserClientForTesting(old_client);
+}
+
+IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchWithoutSaveData) {
+ embedded_test_server()->RegisterRequestHandler(
+ base::Bind(&VerifySaveDataHeaderNotInRequest));
+ MockContentBrowserClient content_browser_client;
+ ContentBrowserClient* old_client =
+ SetBrowserClientForTesting(&content_browser_client);
+ InstallTestHelper("/service_worker/fetch_in_install.js", SERVICE_WORKER_OK);
+ SetBrowserClientForTesting(old_client);
+}
+
+IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, FetchPageWithSaveData) {
+ const char kPageUrl[] = "/service_worker/handle_fetch.html";
+ const char kWorkerUrl[] = "/service_worker/add_save_data_to_title.js";
+ MockContentBrowserClient content_browser_client;
+ content_browser_client.set_data_saver_enabled(true);
+ ContentBrowserClient* old_client =
+ SetBrowserClientForTesting(&content_browser_client);
+ shell()->web_contents()->GetRenderViewHost()->OnWebkitPreferencesChanged();
+ scoped_refptr<WorkerActivatedObserver> observer =
+ new WorkerActivatedObserver(wrapper());
+ observer->Init();
+ public_context()->RegisterServiceWorker(
+ embedded_test_server()->GetURL(kPageUrl),
+ embedded_test_server()->GetURL(kWorkerUrl),
+ base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing)));
+ observer->Wait();
+
+ const base::string16 title1 = base::ASCIIToUTF16("save-data=on");
+ TitleWatcher title_watcher1(shell()->web_contents(), title1);
+ NavigateToURL(shell(), embedded_test_server()->GetURL(kPageUrl));
+ EXPECT_EQ(title1, title_watcher1.WaitAndGetTitle());
+
+ SetBrowserClientForTesting(old_client);
+ shell()->Close();
+
+ base::RunLoop run_loop;
+ public_context()->UnregisterServiceWorker(
+ embedded_test_server()->GetURL(kPageUrl),
+ base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure()));
+ run_loop.Run();
+}
+
+IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest,
+ FetchPageWithSaveDataPassThroughOnFetch) {
+ const char kPageUrl[] = "/service_worker/pass_through_fetch.html";
+ const char kWorkerUrl[] = "/service_worker/fetch_event_pass_through.js";
+ MockContentBrowserClient content_browser_client;
+ content_browser_client.set_data_saver_enabled(true);
+ ContentBrowserClient* old_client =
+ SetBrowserClientForTesting(&content_browser_client);
+ shell()->web_contents()->GetRenderViewHost()->OnWebkitPreferencesChanged();
+ scoped_refptr<WorkerActivatedObserver> observer =
+ new WorkerActivatedObserver(wrapper());
+ observer->Init();
+ public_context()->RegisterServiceWorker(
+ embedded_test_server()->GetURL(kPageUrl),
+ embedded_test_server()->GetURL(kWorkerUrl),
+ base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing)));
+ observer->Wait();
+
+ embedded_test_server()->RegisterRequestHandler(
+ base::Bind(&VerifySaveDataHeaderInRequest));
+
+ NavigateToURLBlockUntilNavigationsComplete(
+ shell(), embedded_test_server()->GetURL(kPageUrl), 1);
+
+ SetBrowserClientForTesting(old_client);
+ shell()->Close();
+
+ base::RunLoop run_loop;
+ public_context()->UnregisterServiceWorker(
+ embedded_test_server()->GetURL(kPageUrl),
+ base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure()));
+ run_loop.Run();
+}
+
IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, Reload) {
const char kPageUrl[] = "/service_worker/reload.html";
const char kWorkerUrl[] = "/service_worker/fetch_event_reload.js";

Powered by Google App Engine
This is Rietveld 408576698