Home | History | Annotate | Download | only in browser
      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::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::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