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