1 // Copyright 2013 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 <string> 6 7 #include "base/path_service.h" 8 #include "base/strings/utf_string_conversions.h" 9 #include "chrome/browser/download/download_prefs.h" 10 #include "chrome/browser/prefs/pref_service_syncable.h" 11 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser_commands.h" 13 #include "chrome/browser/ui/tabs/tab_strip_model.h" 14 #include "chrome/common/chrome_paths.h" 15 #include "chrome/common/pref_names.h" 16 #include "chrome/test/base/in_process_browser_test.h" 17 #include "chrome/test/base/testing_browser_process.h" 18 #include "chrome/test/base/testing_profile.h" 19 #include "chrome/test/base/ui_test_utils.h" 20 #include "content/public/browser/web_contents.h" 21 #include "content/public/test/browser_test_utils.h" 22 #include "content/public/test/download_test_observer.h" 23 24 using content::BrowserContext; 25 using content::DownloadManager; 26 27 class PrefsFunctionalTest : public InProcessBrowserTest { 28 protected: 29 // Create a DownloadTestObserverTerminal that will wait for the 30 // specified number of downloads to finish. 31 scoped_ptr<content::DownloadTestObserver> CreateWaiter(Browser* browser, 32 int num_downloads) { 33 DownloadManager* download_manager = 34 BrowserContext::GetDownloadManager(browser->profile()); 35 36 content::DownloadTestObserver* downloads_observer = 37 new content::DownloadTestObserverTerminal( 38 download_manager, 39 num_downloads, 40 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); 41 return make_scoped_ptr(downloads_observer); 42 } 43 }; 44 45 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestDownloadDirPref) { 46 ASSERT_TRUE(test_server()->Start()); 47 base::ScopedTempDir new_download_dir; 48 ASSERT_TRUE(new_download_dir.CreateUniqueTempDir()); 49 50 base::FilePath downloaded_pkg = 51 new_download_dir.path().AppendASCII("a_zip_file.zip"); 52 53 // Set pref to download in new_download_dir. 54 browser()->profile()->GetPrefs()->SetFilePath( 55 prefs::kDownloadDefaultDirectory, new_download_dir.path()); 56 57 // Create a downloads observer. 58 scoped_ptr<content::DownloadTestObserver> downloads_observer( 59 CreateWaiter(browser(), 1)); 60 ui_test_utils::NavigateToURL( 61 browser(), 62 test_server()->GetURL("files/downloads/a_zip_file.zip")); 63 // Waits for the download to complete. 64 downloads_observer->WaitForFinished(); 65 EXPECT_TRUE(base::PathExists(downloaded_pkg)); 66 } 67 68 // Verify image content settings show or hide images. 69 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestImageContentSettings) { 70 ASSERT_TRUE(test_server()->Start()); 71 72 ui_test_utils::NavigateToURL( 73 browser(), 74 test_server()->GetURL("files/settings/image_page.html")); 75 76 bool result = false; 77 std::string script = 78 "for (i=0; i < document.images.length; i++) {" 79 " if ((document.images[i].naturalWidth != 0) &&" 80 " (document.images[i].naturalHeight != 0)) {" 81 " window.domAutomationController.send(true);" 82 " }" 83 "}" 84 "window.domAutomationController.send(false);"; 85 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 86 browser()->tab_strip_model()->GetActiveWebContents(), 87 script, 88 &result)); 89 EXPECT_TRUE(result); 90 91 base::DictionaryValue value; 92 value.SetInteger("images", 2); 93 browser()->profile()->GetPrefs()->Set(prefs::kDefaultContentSettings, 94 value); 95 96 ui_test_utils::NavigateToURL( 97 browser(), 98 test_server()->GetURL("files/settings/image_page.html")); 99 100 result = false; 101 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 102 browser()->tab_strip_model()->GetActiveWebContents(), 103 script, 104 &result)); 105 EXPECT_FALSE(result); 106 } 107 108 // Verify that enabling/disabling Javascript in prefs works. 109 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestJavascriptEnableDisable) { 110 ASSERT_TRUE(test_server()->Start()); 111 112 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( 113 prefs::kWebKitJavascriptEnabled)); 114 ui_test_utils::NavigateToURL( 115 browser(), 116 test_server()->GetURL("files/javaScriptTitle.html")); 117 EXPECT_EQ(base::ASCIIToUTF16("Title from script javascript enabled"), 118 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); 119 browser()->profile()->GetPrefs()->SetBoolean(prefs::kWebKitJavascriptEnabled, 120 false); 121 ui_test_utils::NavigateToURL( 122 browser(), 123 test_server()->GetURL("files/javaScriptTitle.html")); 124 EXPECT_EQ(base::ASCIIToUTF16("This is html title"), 125 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); 126 } 127 128 // Verify DNS prefetching pref. 129 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestNetworkPredictionEnabledPref) { 130 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( 131 prefs::kNetworkPredictionEnabled)); 132 browser()->profile()->GetPrefs()->SetBoolean(prefs::kNetworkPredictionEnabled, 133 false); 134 EXPECT_FALSE(browser()->profile()->GetPrefs()->GetBoolean( 135 prefs::kNetworkPredictionEnabled)); 136 } 137 138 // Verify restore for bookmark bar visibility. 139 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, 140 TestSessionRestoreShowBookmarkBar) { 141 EXPECT_FALSE(browser()->profile()->GetPrefs()->GetBoolean( 142 prefs::kShowBookmarkBar)); 143 browser()->profile()->GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, true); 144 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( 145 prefs::kShowBookmarkBar)); 146 147 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( 148 prefs::kShowBookmarkBar)); 149 EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state()); 150 } 151 152 // Verify images are not blocked in incognito mode. 153 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestImagesNotBlockedInIncognito) { 154 ASSERT_TRUE(test_server()->Start()); 155 GURL url = test_server()->GetURL("files/settings/image_page.html"); 156 Browser* incognito_browser = CreateIncognitoBrowser(); 157 ui_test_utils::NavigateToURLWithDisposition( 158 incognito_browser, 159 url, 160 CURRENT_TAB, 161 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 162 163 bool result = false; 164 std::string script = 165 "for (i=0; i < document.images.length; i++) {" 166 " if ((document.images[i].naturalWidth != 0) &&" 167 " (document.images[i].naturalHeight != 0)) {" 168 " window.domAutomationController.send(true);" 169 " }" 170 "}" 171 "window.domAutomationController.send(false);"; 172 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 173 incognito_browser->tab_strip_model()->GetActiveWebContents(), 174 script, 175 &result)); 176 EXPECT_TRUE(result); 177 } 178 179 // Verify setting homepage preference to newtabpage across restarts. Part1 180 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepageNewTabpagePrefs) { 181 browser()->profile()->GetPrefs()->SetBoolean(prefs::kHomePageIsNewTabPage, 182 true); 183 } 184 185 // Verify setting homepage preference to newtabpage across restarts. Part2 186 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepageNewTabpagePrefs) { 187 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( 188 prefs::kHomePageIsNewTabPage)); 189 } 190 191 // Verify setting homepage preference to specific url. Part1 192 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepagePrefs) { 193 GURL home_page_url("http://www.google.com"); 194 195 PrefService* prefs = browser()->profile()->GetPrefs(); 196 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, false); 197 const PrefService::Preference* pref = 198 prefs->FindPreference(prefs::kHomePage); 199 if (pref && !pref->IsManaged()) { 200 prefs->SetString(prefs::kHomePage, home_page_url.spec()); 201 } 202 } 203 204 // Verify setting homepage preference to specific url. Part2 205 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepagePrefs) { 206 GURL home_page_url("http://www.google.com"); 207 208 PrefService* prefs = browser()->profile()->GetPrefs(); 209 EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage)); 210 EXPECT_EQ(home_page_url.spec(), prefs->GetString(prefs::kHomePage)); 211 } 212 213 // Verify the security preference under privacy across restarts. Part1 214 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestPrivacySecurityPrefs) { 215 PrefService* prefs = browser()->profile()->GetPrefs(); 216 217 EXPECT_TRUE(prefs->GetBoolean(prefs::kNetworkPredictionEnabled)); 218 prefs->SetBoolean(prefs::kNetworkPredictionEnabled, false); 219 220 EXPECT_TRUE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled)); 221 prefs->SetBoolean(prefs::kSafeBrowsingEnabled, false); 222 223 EXPECT_TRUE(prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled)); 224 prefs->SetBoolean(prefs::kAlternateErrorPagesEnabled, false); 225 226 EXPECT_TRUE(prefs->GetBoolean(prefs::kSearchSuggestEnabled)); 227 prefs->SetBoolean(prefs::kSearchSuggestEnabled, false); 228 } 229 230 // Verify the security preference under privacy across restarts. Part2 231 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestPrivacySecurityPrefs) { 232 PrefService* prefs = browser()->profile()->GetPrefs(); 233 234 EXPECT_FALSE(prefs->GetBoolean(prefs::kNetworkPredictionEnabled)); 235 EXPECT_FALSE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled)); 236 EXPECT_FALSE(prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled)); 237 EXPECT_FALSE(prefs->GetBoolean(prefs::kSearchSuggestEnabled)); 238 } 239 240 // Verify that we have some Local State prefs. 241 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHaveLocalStatePrefs) { 242 EXPECT_TRUE(g_browser_process->local_state()->GetPreferenceValues().get()); 243 } 244 245