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 24using content::BrowserContext; 25using content::DownloadManager; 26 27class 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 45IN_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. 69IN_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. 109IN_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. 129IN_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. 139IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, 140 TestSessionRestoreShowBookmarkBar) { 141 EXPECT_FALSE(browser()->profile()->GetPrefs()->GetBoolean( 142 bookmarks::prefs::kShowBookmarkBar)); 143 browser()->profile()->GetPrefs()->SetBoolean( 144 bookmarks::prefs::kShowBookmarkBar, true); 145 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( 146 bookmarks::prefs::kShowBookmarkBar)); 147 148 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( 149 bookmarks::prefs::kShowBookmarkBar)); 150 EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state()); 151} 152 153// Verify images are not blocked in incognito mode. 154IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestImagesNotBlockedInIncognito) { 155 ASSERT_TRUE(test_server()->Start()); 156 GURL url = test_server()->GetURL("files/settings/image_page.html"); 157 Browser* incognito_browser = CreateIncognitoBrowser(); 158 ui_test_utils::NavigateToURLWithDisposition( 159 incognito_browser, 160 url, 161 CURRENT_TAB, 162 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 163 164 bool result = false; 165 std::string script = 166 "for (i=0; i < document.images.length; i++) {" 167 " if ((document.images[i].naturalWidth != 0) &&" 168 " (document.images[i].naturalHeight != 0)) {" 169 " window.domAutomationController.send(true);" 170 " }" 171 "}" 172 "window.domAutomationController.send(false);"; 173 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 174 incognito_browser->tab_strip_model()->GetActiveWebContents(), 175 script, 176 &result)); 177 EXPECT_TRUE(result); 178} 179 180// Verify setting homepage preference to newtabpage across restarts. Part1 181IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepageNewTabpagePrefs) { 182 browser()->profile()->GetPrefs()->SetBoolean(prefs::kHomePageIsNewTabPage, 183 true); 184} 185 186// Verify setting homepage preference to newtabpage across restarts. Part2 187IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepageNewTabpagePrefs) { 188 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean( 189 prefs::kHomePageIsNewTabPage)); 190} 191 192// Verify setting homepage preference to specific url. Part1 193IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepagePrefs) { 194 GURL home_page_url("http://www.google.com"); 195 196 PrefService* prefs = browser()->profile()->GetPrefs(); 197 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, false); 198 const PrefService::Preference* pref = 199 prefs->FindPreference(prefs::kHomePage); 200 if (pref && !pref->IsManaged()) { 201 prefs->SetString(prefs::kHomePage, home_page_url.spec()); 202 } 203} 204 205// Verify setting homepage preference to specific url. Part2 206IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepagePrefs) { 207 GURL home_page_url("http://www.google.com"); 208 209 PrefService* prefs = browser()->profile()->GetPrefs(); 210 EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage)); 211 EXPECT_EQ(home_page_url.spec(), prefs->GetString(prefs::kHomePage)); 212} 213 214// Verify the security preference under privacy across restarts. Part1 215IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestPrivacySecurityPrefs) { 216 PrefService* prefs = browser()->profile()->GetPrefs(); 217 218 EXPECT_TRUE(prefs->GetBoolean(prefs::kNetworkPredictionEnabled)); 219 prefs->SetBoolean(prefs::kNetworkPredictionEnabled, false); 220 221 EXPECT_TRUE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled)); 222 prefs->SetBoolean(prefs::kSafeBrowsingEnabled, false); 223 224 EXPECT_TRUE(prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled)); 225 prefs->SetBoolean(prefs::kAlternateErrorPagesEnabled, false); 226 227 EXPECT_TRUE(prefs->GetBoolean(prefs::kSearchSuggestEnabled)); 228 prefs->SetBoolean(prefs::kSearchSuggestEnabled, false); 229} 230 231// Verify the security preference under privacy across restarts. Part2 232IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestPrivacySecurityPrefs) { 233 PrefService* prefs = browser()->profile()->GetPrefs(); 234 235 EXPECT_FALSE(prefs->GetBoolean(prefs::kNetworkPredictionEnabled)); 236 EXPECT_FALSE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled)); 237 EXPECT_FALSE(prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled)); 238 EXPECT_FALSE(prefs->GetBoolean(prefs::kSearchSuggestEnabled)); 239} 240 241// Verify that we have some Local State prefs. 242IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHaveLocalStatePrefs) { 243 EXPECT_TRUE(g_browser_process->local_state()->GetPreferenceValues().get()); 244} 245 246