1 // Copyright (c) 2012 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 5 #include "base/prefs/pref_service.h" 6 #include "base/strings/string16.h" 7 #include "base/strings/utf_string_conversions.h" 8 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" 11 #include "chrome/common/pref_names.h" 12 #include "chrome/test/base/in_process_browser_test.h" 13 #include "chrome/test/base/ui_test_utils.h" 14 #include "content/public/browser/web_contents.h" 15 #include "content/public/test/browser_test_utils.h" 16 17 typedef InProcessBrowserTest DoNotTrackTest; 18 19 // Check that the DNT header is sent when the corresponding preference is set. 20 IN_PROC_BROWSER_TEST_F(DoNotTrackTest, Simple) { 21 ASSERT_TRUE(test_server()->Start()); 22 23 PrefService* prefs = browser()->profile()->GetPrefs(); 24 prefs->SetBoolean(prefs::kEnableDoNotTrack, true); 25 26 GURL url = test_server()->GetURL("echoheader?DNT"); 27 ui_test_utils::NavigateToURL(browser(), url); 28 29 int matches = ui_test_utils::FindInPage( 30 browser()->tab_strip_model()->GetActiveWebContents(), 31 base::string16(ASCIIToUTF16("1")), 32 true /* forward */, false /* match case */, NULL /* ordinal */, 33 NULL /* selection_rect */); 34 35 EXPECT_EQ(1, matches); 36 } 37 38 // Check that the DNT header is preserved during redirects. 39 IN_PROC_BROWSER_TEST_F(DoNotTrackTest, Redirect) { 40 ASSERT_TRUE(test_server()->Start()); 41 42 PrefService* prefs = browser()->profile()->GetPrefs(); 43 prefs->SetBoolean(prefs::kEnableDoNotTrack, true); 44 45 GURL final_url = test_server()->GetURL("echoheader?DNT"); 46 GURL url = test_server()->GetURL( 47 std::string("server-redirect?") + final_url.spec()); 48 ui_test_utils::NavigateToURL(browser(), url); 49 50 int matches = ui_test_utils::FindInPage( 51 browser()->tab_strip_model()->GetActiveWebContents(), 52 base::string16(ASCIIToUTF16("1")), 53 true /* forward */, false /* match case */, NULL /* ordinal */, 54 NULL /* selection_rect */); 55 56 EXPECT_EQ(1, matches); 57 } 58 59 // Check that the DOM property is set when the corresponding preference is set. 60 IN_PROC_BROWSER_TEST_F(DoNotTrackTest, DOMProperty) { 61 PrefService* prefs = browser()->profile()->GetPrefs(); 62 prefs->SetBoolean(prefs::kEnableDoNotTrack, true); 63 64 ASSERT_NO_FATAL_FAILURE(content::WaitForLoadStop( 65 browser()->tab_strip_model()->GetActiveWebContents())); 66 67 std::string do_not_track; 68 EXPECT_TRUE(content::ExecuteScriptAndExtractString( 69 browser()->tab_strip_model()->GetActiveWebContents(), 70 "window.domAutomationController.send(navigator.doNotTrack)", 71 &do_not_track)); 72 EXPECT_EQ("1", do_not_track); 73 74 // Reset flag and check that the changed value is propagated to the existing 75 // renderer. 76 prefs->SetBoolean(prefs::kEnableDoNotTrack, false); 77 78 EXPECT_TRUE(content::ExecuteScriptAndExtractString( 79 browser()->tab_strip_model()->GetActiveWebContents(), 80 "window.domAutomationController.send(" 81 " navigator.doNotTrack === null ? '0' : '1')", 82 &do_not_track)); 83 EXPECT_EQ("0", do_not_track); 84 } 85