• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
CreateWaiter(Browser * browser,int num_downloads)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 
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestDownloadDirPref)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.
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestImageContentSettings)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.
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestJavascriptEnableDisable)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.
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestNetworkPredictionEnabledPref)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.
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestSessionRestoreShowBookmarkBar)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.
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestImagesNotBlockedInIncognito)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
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,PRE_TestHomepageNewTabpagePrefs)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
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestHomepageNewTabpagePrefs)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
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,PRE_TestHomepagePrefs)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
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestHomepagePrefs)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
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,PRE_TestPrivacySecurityPrefs)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
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestPrivacySecurityPrefs)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.
IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,TestHaveLocalStatePrefs)241 IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHaveLocalStatePrefs) {
242   EXPECT_TRUE(g_browser_process->local_state()->GetPreferenceValues().get());
243 }
244 
245