1 // Copyright 2018 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/strings/utf_string_conversions.h"
6 #include "build/build_config.h"
7 #include "chrome/browser/profiles/profile.h"
8 #include "chrome/browser/ui/browser.h"
9 #include "chrome/browser/ui/tabs/tab_strip_model.h"
10 #include "chrome/common/pref_names.h"
11 #include "chrome/test/base/in_process_browser_test.h"
12 #include "chrome/test/base/ui_test_utils.h"
13 #include "components/prefs/pref_service.h"
14 #include "components/privacy_sandbox/tracking_protection_prefs.h"
15 #include "content/public/browser/web_contents.h"
16 #include "content/public/test/browser_test.h"
17 #include "content/public/test/browser_test_utils.h"
18 #include "net/test/embedded_test_server/embedded_test_server.h"
19 #include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h"
23 class ChromeDoNotTrackTest : public InProcessBrowserTest {
25 void SetEnableDoNotTrack(bool enabled) {
26 PrefService* prefs = browser()->profile()->GetPrefs();
27 prefs->SetBoolean(prefs::kEnableDoNotTrack, enabled);
30 void ExpectPageTextEq(const std::string& expected_content) {
31 EXPECT_EQ(expected_content,
32 EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
33 "document.body.innerText;"));
36 content::WebContents* GetWebContents() {
37 return browser()->tab_strip_model()->GetActiveWebContents();
41 IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, NotEnabled) {
42 ASSERT_TRUE(embedded_test_server()->Start());
43 SetEnableDoNotTrack(false /* enabled */);
45 GURL url = embedded_test_server()->GetURL("/echoheader?DNT");
46 ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
48 GetWebContents()->GetMutableRendererPrefs()->enable_do_not_track);
49 ExpectPageTextEq("None");
52 IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, Enabled) {
53 ASSERT_TRUE(embedded_test_server()->Start());
54 SetEnableDoNotTrack(true /* enabled */);
56 GURL url = embedded_test_server()->GetURL("/echoheader?DNT");
57 ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
59 GetWebContents()->GetMutableRendererPrefs()->enable_do_not_track);
60 ExpectPageTextEq("1");
63 // Checks that the DNT header is preserved when fetching from a dedicated
65 IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, FetchFromWorker) {
66 ASSERT_TRUE(embedded_test_server()->Start());
67 SetEnableDoNotTrack(true /* enabled */);
69 ASSERT_TRUE(ui_test_utils::NavigateToURL(
71 embedded_test_server()->GetURL(
72 "/workers/fetch_from_worker.html?script=fetch_from_worker.js")));
74 EvalJs(GetWebContents(), "fetch_from_worker('/echoheader?DNT');"));
76 // Updating settings should be reflected immediately.
77 SetEnableDoNotTrack(false /* enabled */);
79 EvalJs(GetWebContents(), "fetch_from_worker('/echoheader?DNT');"));
82 // Checks that the DNT header is preserved when fetching from a dedicated
83 // worker created from a dedicated worker.
84 IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, FetchFromNestedWorker) {
85 ASSERT_TRUE(embedded_test_server()->Start());
86 SetEnableDoNotTrack(true /* enabled */);
88 ASSERT_TRUE(ui_test_utils::NavigateToURL(
90 embedded_test_server()->GetURL("/workers/fetch_from_worker.html?"
91 "script=fetch_from_nested_worker.js")));
93 EvalJs(GetWebContents(), "fetch_from_worker('/echoheader?DNT');"));
95 // Updating settings should be reflected immediately.
96 SetEnableDoNotTrack(false /* enabled */);
98 EvalJs(GetWebContents(), "fetch_from_worker('/echoheader?DNT');"));
101 // Checks that the DNT header is preserved when fetching from a shared worker.
103 // Disabled on Android since a shared worker is not available on Android:
105 #if BUILDFLAG(IS_ANDROID)
106 #define MAYBE_FetchFromSharedWorker DISABLED_FetchFromSharedWorker
108 #define MAYBE_FetchFromSharedWorker FetchFromSharedWorker
110 IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, MAYBE_FetchFromSharedWorker) {
111 ASSERT_TRUE(embedded_test_server()->Start());
112 SetEnableDoNotTrack(true /* enabled */);
114 ASSERT_TRUE(ui_test_utils::NavigateToURL(
115 browser(), embedded_test_server()->GetURL(
116 "/workers/fetch_from_shared_worker.html")));
117 EXPECT_EQ("1", EvalJs(GetWebContents(),
118 "fetch_from_shared_worker('/echoheader?DNT');"));
120 // Updating settings should be reflected immediately.
121 SetEnableDoNotTrack(false /* enabled */);
122 EXPECT_EQ("None", EvalJs(GetWebContents(),
123 "fetch_from_shared_worker('/echoheader?DNT');"));
126 // Checks that the DNT header is preserved when fetching from a service worker.
127 IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, FetchFromServiceWorker) {
128 ASSERT_TRUE(embedded_test_server()->Start());
129 SetEnableDoNotTrack(true /* enabled */);
131 ASSERT_TRUE(ui_test_utils::NavigateToURL(
132 browser(), embedded_test_server()->GetURL(
133 "/workers/fetch_from_service_worker.html")));
134 EXPECT_EQ("ready", EvalJs(GetWebContents(), "setup();"));
135 EXPECT_EQ("1", EvalJs(GetWebContents(),
136 "fetch_from_service_worker('/echoheader?DNT');"));
138 // Updating settings should be reflected immediately.
139 SetEnableDoNotTrack(false /* enabled */);
140 EXPECT_EQ("None", EvalJs(GetWebContents(),
141 "fetch_from_service_worker('/echoheader?DNT');"));