blob: 95bdd1bba3a0575d3ce616d6500219b9bd3ec189 [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2013 The Chromium Authors
[email protected]6c491c62013-08-02 18:59:002// 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
Matt Menkef6f308fe2020-10-28 05:18:167#include "base/files/file_util.h"
dcheng4af48582016-04-19 00:29:358#include "base/memory/ptr_util.h"
[email protected]6c491c62013-08-02 18:59:009#include "base/strings/utf_string_conversions.h"
jam3f2d3932017-04-26 20:28:5110#include "base/threading/thread_restrictions.h"
[email protected]6c491c62013-08-02 18:59:0011#include "chrome/browser/download/download_prefs.h"
Simon Pelchate74bbb62021-12-03 23:57:5512#include "chrome/browser/prefetch/prefetch_prefs.h"
[email protected]6c491c62013-08-02 18:59:0013#include "chrome/browser/ui/browser.h"
14#include "chrome/browser/ui/browser_commands.h"
15#include "chrome/browser/ui/tabs/tab_strip_model.h"
[email protected]6c491c62013-08-02 18:59:0016#include "chrome/common/pref_names.h"
17#include "chrome/test/base/in_process_browser_test.h"
[email protected]d3e9f3d2013-10-30 16:46:4118#include "chrome/test/base/testing_browser_process.h"
[email protected]6c491c62013-08-02 18:59:0019#include "chrome/test/base/testing_profile.h"
20#include "chrome/test/base/ui_test_utils.h"
brettwe1f0af8b2015-10-09 21:30:4621#include "components/bookmarks/common/bookmark_pref_names.h"
raymesbc7409e2015-08-06 01:57:4522#include "components/content_settings/core/browser/website_settings_info.h"
23#include "components/content_settings/core/browser/website_settings_registry.h"
24#include "components/content_settings/core/common/content_settings_types.h"
brettwe1f0af8b2015-10-09 21:30:4625#include "components/content_settings/core/common/pref_names.h"
Colin Blundellab45f552020-01-22 15:08:4026#include "components/embedder_support/pref_names.h"
Ali Jumafb3dc1f2020-01-07 17:33:4727#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
maxbogueea16ff412016-10-28 16:35:2928#include "components/sync_preferences/pref_service_syncable.h"
[email protected]6c491c62013-08-02 18:59:0029#include "content/public/browser/web_contents.h"
Peter Kasting919ce652020-05-07 10:22:3630#include "content/public/test/browser_test.h"
[email protected]6c491c62013-08-02 18:59:0031#include "content/public/test/browser_test_utils.h"
32#include "content/public/test/download_test_observer.h"
svaldeza01f7d92015-11-18 17:47:5633#include "net/test/embedded_test_server/embedded_test_server.h"
[email protected]6c491c62013-08-02 18:59:0034
35using content::BrowserContext;
36using content::DownloadManager;
37
38class PrefsFunctionalTest : public InProcessBrowserTest {
39 protected:
40 // Create a DownloadTestObserverTerminal that will wait for the
41 // specified number of downloads to finish.
dcheng4af48582016-04-19 00:29:3542 std::unique_ptr<content::DownloadTestObserver> CreateWaiter(
43 Browser* browser,
44 int num_downloads) {
[email protected]6c491c62013-08-02 18:59:0045 DownloadManager* download_manager =
Lukasz Anforowicz48d83452021-05-12 02:58:2046 browser->profile()->GetDownloadManager();
[email protected]6c491c62013-08-02 18:59:0047
48 content::DownloadTestObserver* downloads_observer =
49 new content::DownloadTestObserverTerminal(
50 download_manager,
51 num_downloads,
52 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
dcheng4af48582016-04-19 00:29:3553 return base::WrapUnique(downloads_observer);
[email protected]6c491c62013-08-02 18:59:0054 }
55};
56
57IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestDownloadDirPref) {
svaldeza01f7d92015-11-18 17:47:5658 ASSERT_TRUE(embedded_test_server()->Start());
[email protected]6c491c62013-08-02 18:59:0059
Mattias Nissler441cc652018-04-05 00:08:5660 base::FilePath new_download_dir =
61 DownloadPrefs(browser()->profile()).DownloadPath().AppendASCII("subdir");
[email protected]6c491c62013-08-02 18:59:0062 base::FilePath downloaded_pkg =
Mattias Nissler441cc652018-04-05 00:08:5663 new_download_dir.AppendASCII("a_zip_file.zip");
[email protected]6c491c62013-08-02 18:59:0064
[email protected]6c491c62013-08-02 18:59:0065 // Set pref to download in new_download_dir.
66 browser()->profile()->GetPrefs()->SetFilePath(
Mattias Nissler441cc652018-04-05 00:08:5667 prefs::kDownloadDefaultDirectory, new_download_dir);
[email protected]6c491c62013-08-02 18:59:0068
69 // Create a downloads observer.
dcheng4af48582016-04-19 00:29:3570 std::unique_ptr<content::DownloadTestObserver> downloads_observer(
[email protected]6c491c62013-08-02 18:59:0071 CreateWaiter(browser(), 1));
Lukasz Anforowiczb78290c2021-09-08 04:31:3872 ASSERT_TRUE(ui_test_utils::NavigateToURL(
73 browser(), embedded_test_server()->GetURL("/downloads/a_zip_file.zip")));
[email protected]6c491c62013-08-02 18:59:0074 // Waits for the download to complete.
75 downloads_observer->WaitForFinished();
Mattias Nissler441cc652018-04-05 00:08:5676
77 base::ScopedAllowBlockingForTesting allow_blocking;
[email protected]6c491c62013-08-02 18:59:0078 EXPECT_TRUE(base::PathExists(downloaded_pkg));
79}
80
81// Verify image content settings show or hide images.
82IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestImageContentSettings) {
svaldeza01f7d92015-11-18 17:47:5683 ASSERT_TRUE(embedded_test_server()->Start());
[email protected]6c491c62013-08-02 18:59:0084
Lukasz Anforowiczb78290c2021-09-08 04:31:3885 ASSERT_TRUE(ui_test_utils::NavigateToURL(
86 browser(), embedded_test_server()->GetURL("/settings/image_page.html")));
[email protected]6c491c62013-08-02 18:59:0087
88 bool result = false;
89 std::string script =
90 "for (i=0; i < document.images.length; i++) {"
91 " if ((document.images[i].naturalWidth != 0) &&"
92 " (document.images[i].naturalHeight != 0)) {"
93 " window.domAutomationController.send(true);"
94 " }"
95 "}"
96 "window.domAutomationController.send(false);";
97 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
98 browser()->tab_strip_model()->GetActiveWebContents(),
99 script,
100 &result));
101 EXPECT_TRUE(result);
102
msramek96812202015-07-27 16:00:02103 browser()->profile()->GetPrefs()->SetInteger(
raymesbc7409e2015-08-06 01:57:45104 content_settings::WebsiteSettingsRegistry::GetInstance()
Darin Fisher42f5e7d2019-10-30 07:15:45105 ->Get(ContentSettingsType::IMAGES)
raymesbc7409e2015-08-06 01:57:45106 ->default_value_pref_name(),
107 CONTENT_SETTING_BLOCK);
[email protected]6c491c62013-08-02 18:59:00108
Lukasz Anforowiczb78290c2021-09-08 04:31:38109 ASSERT_TRUE(ui_test_utils::NavigateToURL(
110 browser(), embedded_test_server()->GetURL("/settings/image_page.html")));
[email protected]6c491c62013-08-02 18:59:00111
112 result = false;
113 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
114 browser()->tab_strip_model()->GetActiveWebContents(),
115 script,
116 &result));
117 EXPECT_FALSE(result);
118}
119
120// Verify that enabling/disabling Javascript in prefs works.
121IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestJavascriptEnableDisable) {
svaldeza01f7d92015-11-18 17:47:56122 ASSERT_TRUE(embedded_test_server()->Start());
[email protected]6c491c62013-08-02 18:59:00123
124 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
125 prefs::kWebKitJavascriptEnabled));
Lukasz Anforowiczb78290c2021-09-08 04:31:38126 ASSERT_TRUE(ui_test_utils::NavigateToURL(
127 browser(), embedded_test_server()->GetURL("/javaScriptTitle.html")));
Jan Wilken Dörrie78e88d82e2021-03-23 15:24:22128 EXPECT_EQ(u"Title from script javascript enabled",
[email protected]6c491c62013-08-02 18:59:00129 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
130 browser()->profile()->GetPrefs()->SetBoolean(prefs::kWebKitJavascriptEnabled,
131 false);
Lukasz Anforowiczb78290c2021-09-08 04:31:38132 ASSERT_TRUE(ui_test_utils::NavigateToURL(
133 browser(), embedded_test_server()->GetURL("/javaScriptTitle.html")));
Jan Wilken Dörrie78e88d82e2021-03-23 15:24:22134 EXPECT_EQ(u"This is html title",
[email protected]6c491c62013-08-02 18:59:00135 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
136}
137
[email protected]6c491c62013-08-02 18:59:00138// Verify restore for bookmark bar visibility.
139IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,
140 TestSessionRestoreShowBookmarkBar) {
141 EXPECT_FALSE(browser()->profile()->GetPrefs()->GetBoolean(
tfarina3bddbe112014-08-28 05:29:32142 bookmarks::prefs::kShowBookmarkBar));
143 browser()->profile()->GetPrefs()->SetBoolean(
144 bookmarks::prefs::kShowBookmarkBar, true);
[email protected]6c491c62013-08-02 18:59:00145 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
tfarina3bddbe112014-08-28 05:29:32146 bookmarks::prefs::kShowBookmarkBar));
[email protected]6c491c62013-08-02 18:59:00147
148 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
tfarina3bddbe112014-08-28 05:29:32149 bookmarks::prefs::kShowBookmarkBar));
[email protected]6c491c62013-08-02 18:59:00150 EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state());
151}
[email protected]d3e9f3d2013-10-30 16:46:41152
153// Verify images are not blocked in incognito mode.
154IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestImagesNotBlockedInIncognito) {
svaldeza01f7d92015-11-18 17:47:56155 ASSERT_TRUE(embedded_test_server()->Start());
156 GURL url = embedded_test_server()->GetURL("/settings/image_page.html");
[email protected]d3e9f3d2013-10-30 16:46:41157 Browser* incognito_browser = CreateIncognitoBrowser();
Lukasz Anforowiczb78290c2021-09-08 04:31:38158 ASSERT_TRUE(ui_test_utils::NavigateToURL(incognito_browser, url));
[email protected]d3e9f3d2013-10-30 16:46:41159
160 bool result = false;
161 std::string script =
162 "for (i=0; i < document.images.length; i++) {"
163 " if ((document.images[i].naturalWidth != 0) &&"
164 " (document.images[i].naturalHeight != 0)) {"
165 " window.domAutomationController.send(true);"
166 " }"
167 "}"
168 "window.domAutomationController.send(false);";
169 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
170 incognito_browser->tab_strip_model()->GetActiveWebContents(),
171 script,
172 &result));
173 EXPECT_TRUE(result);
174}
175
176// Verify setting homepage preference to newtabpage across restarts. Part1
177IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepageNewTabpagePrefs) {
178 browser()->profile()->GetPrefs()->SetBoolean(prefs::kHomePageIsNewTabPage,
179 true);
180}
181
182// Verify setting homepage preference to newtabpage across restarts. Part2
183IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepageNewTabpagePrefs) {
184 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
185 prefs::kHomePageIsNewTabPage));
186}
187
188// Verify setting homepage preference to specific url. Part1
189IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepagePrefs) {
190 GURL home_page_url("http://www.google.com");
191
192 PrefService* prefs = browser()->profile()->GetPrefs();
193 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, false);
194 const PrefService::Preference* pref =
195 prefs->FindPreference(prefs::kHomePage);
196 if (pref && !pref->IsManaged()) {
197 prefs->SetString(prefs::kHomePage, home_page_url.spec());
198 }
199}
200
201// Verify setting homepage preference to specific url. Part2
202IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepagePrefs) {
203 GURL home_page_url("http://www.google.com");
204
205 PrefService* prefs = browser()->profile()->GetPrefs();
206 EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
207 EXPECT_EQ(home_page_url.spec(), prefs->GetString(prefs::kHomePage));
208}
209
210// Verify the security preference under privacy across restarts. Part1
211IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestPrivacySecurityPrefs) {
212 PrefService* prefs = browser()->profile()->GetPrefs();
213
Simon Pelchate74bbb62021-12-03 23:57:55214 static_assert(prefetch::NetworkPredictionOptions::kDefault !=
215 prefetch::NetworkPredictionOptions::kDisabled,
bncf17f84b2015-09-14 22:13:26216 "PrefsFunctionalTest.TestPrivacySecurityPrefs relies on "
217 "predictive network actions being enabled by default.");
Simon Pelchate74bbb62021-12-03 23:57:55218 EXPECT_EQ(prefetch::PreloadPagesState::kStandardPreloading,
219 prefetch::GetPreloadPagesState(*prefs));
220 prefetch::SetPreloadPagesState(prefs,
221 prefetch::PreloadPagesState::kNoPreloading);
[email protected]d3e9f3d2013-10-30 16:46:41222
223 EXPECT_TRUE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled));
224 prefs->SetBoolean(prefs::kSafeBrowsingEnabled, false);
225
Colin Blundellab45f552020-01-22 15:08:40226 EXPECT_TRUE(prefs->GetBoolean(embedder_support::kAlternateErrorPagesEnabled));
227 prefs->SetBoolean(embedder_support::kAlternateErrorPagesEnabled, false);
[email protected]d3e9f3d2013-10-30 16:46:41228
229 EXPECT_TRUE(prefs->GetBoolean(prefs::kSearchSuggestEnabled));
230 prefs->SetBoolean(prefs::kSearchSuggestEnabled, false);
231}
232
233// Verify the security preference under privacy across restarts. Part2
Dominic Battre30e25c12020-06-19 09:32:40234IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestPrivacySecurityPrefs) {
[email protected]d3e9f3d2013-10-30 16:46:41235 PrefService* prefs = browser()->profile()->GetPrefs();
236
Simon Pelchate74bbb62021-12-03 23:57:55237 EXPECT_EQ(prefetch::PreloadPagesState::kNoPreloading,
238 prefetch::GetPreloadPagesState(*prefs));
[email protected]d3e9f3d2013-10-30 16:46:41239 EXPECT_FALSE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled));
Colin Blundellab45f552020-01-22 15:08:40240 EXPECT_FALSE(
241 prefs->GetBoolean(embedder_support::kAlternateErrorPagesEnabled));
[email protected]d3e9f3d2013-10-30 16:46:41242 EXPECT_FALSE(prefs->GetBoolean(prefs::kSearchSuggestEnabled));
243}
244
245// Verify that we have some Local State prefs.
246IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHaveLocalStatePrefs) {
Lei Zhangfc0abb92020-10-19 23:01:24247 base::Value prefs = g_browser_process->local_state()->GetPreferenceValues(
248 PrefService::INCLUDE_DEFAULTS);
249 EXPECT_TRUE(prefs.is_dict());
[email protected]d3e9f3d2013-10-30 16:46:41250}