chrome_do_not_track_browsertest.cc 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "base/strings/utf_string_conversions.h"
  5. #include "build/build_config.h"
  6. #include "chrome/browser/profiles/profile.h"
  7. #include "chrome/browser/ui/browser.h"
  8. #include "chrome/browser/ui/tabs/tab_strip_model.h"
  9. #include "chrome/common/pref_names.h"
  10. #include "chrome/test/base/in_process_browser_test.h"
  11. #include "chrome/test/base/ui_test_utils.h"
  12. #include "components/prefs/pref_service.h"
  13. #include "content/public/browser/web_contents.h"
  14. #include "content/public/test/browser_test.h"
  15. #include "content/public/test/browser_test_utils.h"
  16. #include "net/test/embedded_test_server/embedded_test_server.h"
  17. #include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h"
  18. namespace {
  19. class ChromeDoNotTrackTest : public InProcessBrowserTest {
  20. protected:
  21. void SetEnableDoNotTrack(bool enabled) {
  22. PrefService* prefs = browser()->profile()->GetPrefs();
  23. prefs->SetBoolean(prefs::kEnableDoNotTrack, enabled);
  24. }
  25. void ExpectPageTextEq(const std::string& expected_content) {
  26. std::string text;
  27. ASSERT_TRUE(ExecuteScriptAndExtractString(
  28. browser()->tab_strip_model()->GetActiveWebContents(),
  29. "window.domAutomationController.send(document.body.innerText);",
  30. &text));
  31. EXPECT_EQ(expected_content, text);
  32. }
  33. content::WebContents* GetWebContents() {
  34. return browser()->tab_strip_model()->GetActiveWebContents();
  35. }
  36. };
  37. IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, NotEnabled) {
  38. ASSERT_TRUE(embedded_test_server()->Start());
  39. SetEnableDoNotTrack(false /* enabled */);
  40. GURL url = embedded_test_server()->GetURL("/echoheader?DNT");
  41. ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
  42. EXPECT_EQ(false,
  43. GetWebContents()->GetMutableRendererPrefs()->enable_do_not_track);
  44. ExpectPageTextEq("None");
  45. }
  46. IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, Enabled) {
  47. ASSERT_TRUE(embedded_test_server()->Start());
  48. SetEnableDoNotTrack(true /* enabled */);
  49. GURL url = embedded_test_server()->GetURL("/echoheader?DNT");
  50. ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
  51. EXPECT_EQ(true,
  52. GetWebContents()->GetMutableRendererPrefs()->enable_do_not_track);
  53. ExpectPageTextEq("1");
  54. }
  55. // Checks that the DNT header is preserved when fetching from a dedicated
  56. // worker.
  57. IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, FetchFromWorker) {
  58. ASSERT_TRUE(embedded_test_server()->Start());
  59. SetEnableDoNotTrack(true /* enabled */);
  60. ASSERT_TRUE(ui_test_utils::NavigateToURL(
  61. browser(),
  62. embedded_test_server()->GetURL(
  63. "/workers/fetch_from_worker.html?script=fetch_from_worker.js")));
  64. EXPECT_EQ("1",
  65. EvalJs(GetWebContents(), "fetch_from_worker('/echoheader?DNT');"));
  66. // Updating settings should be reflected immediately.
  67. SetEnableDoNotTrack(false /* enabled */);
  68. EXPECT_EQ("None",
  69. EvalJs(GetWebContents(), "fetch_from_worker('/echoheader?DNT');"));
  70. }
  71. // Checks that the DNT header is preserved when fetching from a dedicated
  72. // worker created from a dedicated worker.
  73. IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, FetchFromNestedWorker) {
  74. ASSERT_TRUE(embedded_test_server()->Start());
  75. SetEnableDoNotTrack(true /* enabled */);
  76. ASSERT_TRUE(ui_test_utils::NavigateToURL(
  77. browser(),
  78. embedded_test_server()->GetURL("/workers/fetch_from_worker.html?"
  79. "script=fetch_from_nested_worker.js")));
  80. EXPECT_EQ("1",
  81. EvalJs(GetWebContents(), "fetch_from_worker('/echoheader?DNT');"));
  82. // Updating settings should be reflected immediately.
  83. SetEnableDoNotTrack(false /* enabled */);
  84. EXPECT_EQ("None",
  85. EvalJs(GetWebContents(), "fetch_from_worker('/echoheader?DNT');"));
  86. }
  87. // Checks that the DNT header is preserved when fetching from a shared worker.
  88. //
  89. // Disabled on Android since a shared worker is not available on Android:
  90. // crbug.com/869745.
  91. #if BUILDFLAG(IS_ANDROID)
  92. #define MAYBE_FetchFromSharedWorker DISABLED_FetchFromSharedWorker
  93. #else
  94. #define MAYBE_FetchFromSharedWorker FetchFromSharedWorker
  95. #endif
  96. IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, MAYBE_FetchFromSharedWorker) {
  97. ASSERT_TRUE(embedded_test_server()->Start());
  98. SetEnableDoNotTrack(true /* enabled */);
  99. ASSERT_TRUE(ui_test_utils::NavigateToURL(
  100. browser(), embedded_test_server()->GetURL(
  101. "/workers/fetch_from_shared_worker.html")));
  102. EXPECT_EQ("1", EvalJs(GetWebContents(),
  103. "fetch_from_shared_worker('/echoheader?DNT');"));
  104. // Updating settings should be reflected immediately.
  105. SetEnableDoNotTrack(false /* enabled */);
  106. EXPECT_EQ("None", EvalJs(GetWebContents(),
  107. "fetch_from_shared_worker('/echoheader?DNT');"));
  108. }
  109. // Checks that the DNT header is preserved when fetching from a service worker.
  110. IN_PROC_BROWSER_TEST_F(ChromeDoNotTrackTest, FetchFromServiceWorker) {
  111. ASSERT_TRUE(embedded_test_server()->Start());
  112. SetEnableDoNotTrack(true /* enabled */);
  113. ASSERT_TRUE(ui_test_utils::NavigateToURL(
  114. browser(), embedded_test_server()->GetURL(
  115. "/workers/fetch_from_service_worker.html")));
  116. EXPECT_EQ("ready", EvalJs(GetWebContents(), "setup();"));
  117. EXPECT_EQ("1", EvalJs(GetWebContents(),
  118. "fetch_from_service_worker('/echoheader?DNT');"));
  119. // Updating settings should be reflected immediately.
  120. SetEnableDoNotTrack(false /* enabled */);
  121. EXPECT_EQ("None", EvalJs(GetWebContents(),
  122. "fetch_from_service_worker('/echoheader?DNT');"));
  123. }
  124. } // namespace