blob: c309e692782dfe6eb302c9afb3f30085d9b8934e [file] [log] [blame]
[email protected]6c491c62013-08-02 18:59:001// 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
dcheng4af48582016-04-19 00:29:357#include "base/memory/ptr_util.h"
[email protected]6c491c62013-08-02 18:59:008#include "base/strings/utf_string_conversions.h"
jam3f2d3932017-04-26 20:28:519#include "base/threading/thread_restrictions.h"
[email protected]6c491c62013-08-02 18:59:0010#include "chrome/browser/download/download_prefs.h"
bncf17f84b2015-09-14 22:13:2611#include "chrome/browser/net/prediction_options.h"
[email protected]6c491c62013-08-02 18:59:0012#include "chrome/browser/ui/browser.h"
13#include "chrome/browser/ui/browser_commands.h"
14#include "chrome/browser/ui/tabs/tab_strip_model.h"
[email protected]6c491c62013-08-02 18:59:0015#include "chrome/common/pref_names.h"
16#include "chrome/test/base/in_process_browser_test.h"
[email protected]d3e9f3d2013-10-30 16:46:4117#include "chrome/test/base/testing_browser_process.h"
[email protected]6c491c62013-08-02 18:59:0018#include "chrome/test/base/testing_profile.h"
19#include "chrome/test/base/ui_test_utils.h"
brettwe1f0af8b2015-10-09 21:30:4620#include "components/bookmarks/common/bookmark_pref_names.h"
raymesbc7409e2015-08-06 01:57:4521#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"
brettwe1f0af8b2015-10-09 21:30:4624#include "components/content_settings/core/common/pref_names.h"
Colin Blundellab45f552020-01-22 15:08:4025#include "components/embedder_support/pref_names.h"
Ali Jumafb3dc1f2020-01-07 17:33:4726#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
maxbogueea16ff412016-10-28 16:35:2927#include "components/sync_preferences/pref_service_syncable.h"
[email protected]6c491c62013-08-02 18:59:0028#include "content/public/browser/web_contents.h"
Peter Kasting919ce652020-05-07 10:22:3629#include "content/public/test/browser_test.h"
[email protected]6c491c62013-08-02 18:59:0030#include "content/public/test/browser_test_utils.h"
31#include "content/public/test/download_test_observer.h"
svaldeza01f7d92015-11-18 17:47:5632#include "net/test/embedded_test_server/embedded_test_server.h"
[email protected]6c491c62013-08-02 18:59:0033
34using content::BrowserContext;
35using content::DownloadManager;
36
37class PrefsFunctionalTest : public InProcessBrowserTest {
38 protected:
39 // Create a DownloadTestObserverTerminal that will wait for the
40 // specified number of downloads to finish.
dcheng4af48582016-04-19 00:29:3541 std::unique_ptr<content::DownloadTestObserver> CreateWaiter(
42 Browser* browser,
43 int num_downloads) {
[email protected]6c491c62013-08-02 18:59:0044 DownloadManager* download_manager =
45 BrowserContext::GetDownloadManager(browser->profile());
46
47 content::DownloadTestObserver* downloads_observer =
48 new content::DownloadTestObserverTerminal(
49 download_manager,
50 num_downloads,
51 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
dcheng4af48582016-04-19 00:29:3552 return base::WrapUnique(downloads_observer);
[email protected]6c491c62013-08-02 18:59:0053 }
54};
55
56IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestDownloadDirPref) {
svaldeza01f7d92015-11-18 17:47:5657 ASSERT_TRUE(embedded_test_server()->Start());
[email protected]6c491c62013-08-02 18:59:0058
Mattias Nissler441cc652018-04-05 00:08:5659 base::FilePath new_download_dir =
60 DownloadPrefs(browser()->profile()).DownloadPath().AppendASCII("subdir");
[email protected]6c491c62013-08-02 18:59:0061 base::FilePath downloaded_pkg =
Mattias Nissler441cc652018-04-05 00:08:5662 new_download_dir.AppendASCII("a_zip_file.zip");
[email protected]6c491c62013-08-02 18:59:0063
[email protected]6c491c62013-08-02 18:59:0064 // Set pref to download in new_download_dir.
65 browser()->profile()->GetPrefs()->SetFilePath(
Mattias Nissler441cc652018-04-05 00:08:5666 prefs::kDownloadDefaultDirectory, new_download_dir);
[email protected]6c491c62013-08-02 18:59:0067
68 // Create a downloads observer.
dcheng4af48582016-04-19 00:29:3569 std::unique_ptr<content::DownloadTestObserver> downloads_observer(
[email protected]6c491c62013-08-02 18:59:0070 CreateWaiter(browser(), 1));
71 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:5672 browser(), embedded_test_server()->GetURL("/downloads/a_zip_file.zip"));
[email protected]6c491c62013-08-02 18:59:0073 // Waits for the download to complete.
74 downloads_observer->WaitForFinished();
Mattias Nissler441cc652018-04-05 00:08:5675
76 base::ScopedAllowBlockingForTesting allow_blocking;
[email protected]6c491c62013-08-02 18:59:0077 EXPECT_TRUE(base::PathExists(downloaded_pkg));
78}
79
80// Verify image content settings show or hide images.
81IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestImageContentSettings) {
svaldeza01f7d92015-11-18 17:47:5682 ASSERT_TRUE(embedded_test_server()->Start());
[email protected]6c491c62013-08-02 18:59:0083
84 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:5685 browser(), embedded_test_server()->GetURL("/settings/image_page.html"));
[email protected]6c491c62013-08-02 18:59:0086
87 bool result = false;
88 std::string script =
89 "for (i=0; i < document.images.length; i++) {"
90 " if ((document.images[i].naturalWidth != 0) &&"
91 " (document.images[i].naturalHeight != 0)) {"
92 " window.domAutomationController.send(true);"
93 " }"
94 "}"
95 "window.domAutomationController.send(false);";
96 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
97 browser()->tab_strip_model()->GetActiveWebContents(),
98 script,
99 &result));
100 EXPECT_TRUE(result);
101
msramek96812202015-07-27 16:00:02102 browser()->profile()->GetPrefs()->SetInteger(
raymesbc7409e2015-08-06 01:57:45103 content_settings::WebsiteSettingsRegistry::GetInstance()
Darin Fisher42f5e7d2019-10-30 07:15:45104 ->Get(ContentSettingsType::IMAGES)
raymesbc7409e2015-08-06 01:57:45105 ->default_value_pref_name(),
106 CONTENT_SETTING_BLOCK);
[email protected]6c491c62013-08-02 18:59:00107
108 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:56109 browser(), embedded_test_server()->GetURL("/settings/image_page.html"));
[email protected]6c491c62013-08-02 18:59:00110
111 result = false;
112 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
113 browser()->tab_strip_model()->GetActiveWebContents(),
114 script,
115 &result));
116 EXPECT_FALSE(result);
117}
118
119// Verify that enabling/disabling Javascript in prefs works.
120IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestJavascriptEnableDisable) {
svaldeza01f7d92015-11-18 17:47:56121 ASSERT_TRUE(embedded_test_server()->Start());
[email protected]6c491c62013-08-02 18:59:00122
123 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
124 prefs::kWebKitJavascriptEnabled));
125 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:56126 browser(), embedded_test_server()->GetURL("/javaScriptTitle.html"));
[email protected]6778fed2013-12-24 20:09:37127 EXPECT_EQ(base::ASCIIToUTF16("Title from script javascript enabled"),
[email protected]6c491c62013-08-02 18:59:00128 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
129 browser()->profile()->GetPrefs()->SetBoolean(prefs::kWebKitJavascriptEnabled,
130 false);
131 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:56132 browser(), embedded_test_server()->GetURL("/javaScriptTitle.html"));
[email protected]6778fed2013-12-24 20:09:37133 EXPECT_EQ(base::ASCIIToUTF16("This is html title"),
[email protected]6c491c62013-08-02 18:59:00134 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
135}
136
[email protected]6c491c62013-08-02 18:59:00137// Verify restore for bookmark bar visibility.
138IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,
139 TestSessionRestoreShowBookmarkBar) {
140 EXPECT_FALSE(browser()->profile()->GetPrefs()->GetBoolean(
tfarina3bddbe112014-08-28 05:29:32141 bookmarks::prefs::kShowBookmarkBar));
142 browser()->profile()->GetPrefs()->SetBoolean(
143 bookmarks::prefs::kShowBookmarkBar, true);
[email protected]6c491c62013-08-02 18:59:00144 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
tfarina3bddbe112014-08-28 05:29:32145 bookmarks::prefs::kShowBookmarkBar));
[email protected]6c491c62013-08-02 18:59:00146
147 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
tfarina3bddbe112014-08-28 05:29:32148 bookmarks::prefs::kShowBookmarkBar));
[email protected]6c491c62013-08-02 18:59:00149 EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state());
150}
[email protected]d3e9f3d2013-10-30 16:46:41151
152// Verify images are not blocked in incognito mode.
153IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestImagesNotBlockedInIncognito) {
svaldeza01f7d92015-11-18 17:47:56154 ASSERT_TRUE(embedded_test_server()->Start());
155 GURL url = embedded_test_server()->GetURL("/settings/image_page.html");
[email protected]d3e9f3d2013-10-30 16:46:41156 Browser* incognito_browser = CreateIncognitoBrowser();
thestig53986dc2014-12-16 06:09:18157 ui_test_utils::NavigateToURL(incognito_browser, url);
[email protected]d3e9f3d2013-10-30 16:46:41158
159 bool result = false;
160 std::string script =
161 "for (i=0; i < document.images.length; i++) {"
162 " if ((document.images[i].naturalWidth != 0) &&"
163 " (document.images[i].naturalHeight != 0)) {"
164 " window.domAutomationController.send(true);"
165 " }"
166 "}"
167 "window.domAutomationController.send(false);";
168 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
169 incognito_browser->tab_strip_model()->GetActiveWebContents(),
170 script,
171 &result));
172 EXPECT_TRUE(result);
173}
174
175// Verify setting homepage preference to newtabpage across restarts. Part1
176IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepageNewTabpagePrefs) {
177 browser()->profile()->GetPrefs()->SetBoolean(prefs::kHomePageIsNewTabPage,
178 true);
179}
180
181// Verify setting homepage preference to newtabpage across restarts. Part2
182IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepageNewTabpagePrefs) {
183 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
184 prefs::kHomePageIsNewTabPage));
185}
186
187// Verify setting homepage preference to specific url. Part1
188IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepagePrefs) {
189 GURL home_page_url("http://www.google.com");
190
191 PrefService* prefs = browser()->profile()->GetPrefs();
192 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, false);
193 const PrefService::Preference* pref =
194 prefs->FindPreference(prefs::kHomePage);
195 if (pref && !pref->IsManaged()) {
196 prefs->SetString(prefs::kHomePage, home_page_url.spec());
197 }
198}
199
200// Verify setting homepage preference to specific url. Part2
201IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepagePrefs) {
202 GURL home_page_url("http://www.google.com");
203
204 PrefService* prefs = browser()->profile()->GetPrefs();
205 EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
206 EXPECT_EQ(home_page_url.spec(), prefs->GetString(prefs::kHomePage));
207}
208
209// Verify the security preference under privacy across restarts. Part1
210IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestPrivacySecurityPrefs) {
211 PrefService* prefs = browser()->profile()->GetPrefs();
212
bncf17f84b2015-09-14 22:13:26213 static_assert(chrome_browser_net::NETWORK_PREDICTION_DEFAULT !=
214 chrome_browser_net::NETWORK_PREDICTION_NEVER,
215 "PrefsFunctionalTest.TestPrivacySecurityPrefs relies on "
216 "predictive network actions being enabled by default.");
217 EXPECT_EQ(chrome_browser_net::NETWORK_PREDICTION_DEFAULT,
218 prefs->GetInteger(prefs::kNetworkPredictionOptions));
219 prefs->SetInteger(prefs::kNetworkPredictionOptions,
220 chrome_browser_net::NETWORK_PREDICTION_NEVER);
[email protected]d3e9f3d2013-10-30 16:46:41221
222 EXPECT_TRUE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled));
223 prefs->SetBoolean(prefs::kSafeBrowsingEnabled, false);
224
Colin Blundellab45f552020-01-22 15:08:40225 EXPECT_TRUE(prefs->GetBoolean(embedder_support::kAlternateErrorPagesEnabled));
226 prefs->SetBoolean(embedder_support::kAlternateErrorPagesEnabled, false);
[email protected]d3e9f3d2013-10-30 16:46:41227
228 EXPECT_TRUE(prefs->GetBoolean(prefs::kSearchSuggestEnabled));
229 prefs->SetBoolean(prefs::kSearchSuggestEnabled, false);
230}
231
232// Verify the security preference under privacy across restarts. Part2
233IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestPrivacySecurityPrefs) {
234 PrefService* prefs = browser()->profile()->GetPrefs();
235
bncf17f84b2015-09-14 22:13:26236 EXPECT_EQ(chrome_browser_net::NETWORK_PREDICTION_NEVER,
237 prefs->GetInteger(prefs::kNetworkPredictionOptions));
[email protected]d3e9f3d2013-10-30 16:46:41238 EXPECT_FALSE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled));
Colin Blundellab45f552020-01-22 15:08:40239 EXPECT_FALSE(
240 prefs->GetBoolean(embedder_support::kAlternateErrorPagesEnabled));
[email protected]d3e9f3d2013-10-30 16:46:41241 EXPECT_FALSE(prefs->GetBoolean(prefs::kSearchSuggestEnabled));
242}
243
244// Verify that we have some Local State prefs.
245IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHaveLocalStatePrefs) {
brettwebf7184f2017-04-18 21:10:53246 EXPECT_TRUE(g_browser_process->local_state()
247 ->GetPreferenceValues(PrefService::INCLUDE_DEFAULTS)
248 .get());
[email protected]d3e9f3d2013-10-30 16:46:41249}