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