blob: 00fac2797cb7de2da08b94d49cc07ac9507830fc [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"
Luke Zielinski16f5e522017-07-10 15:48:2625#include "components/safe_browsing/common/safe_browsing_prefs.h"
maxbogueea16ff412016-10-28 16:35:2926#include "components/sync_preferences/pref_service_syncable.h"
[email protected]6c491c62013-08-02 18:59:0027#include "content/public/browser/web_contents.h"
28#include "content/public/test/browser_test_utils.h"
29#include "content/public/test/download_test_observer.h"
svaldeza01f7d92015-11-18 17:47:5630#include "net/test/embedded_test_server/embedded_test_server.h"
[email protected]6c491c62013-08-02 18:59:0031
32using content::BrowserContext;
33using content::DownloadManager;
34
35class PrefsFunctionalTest : public InProcessBrowserTest {
36 protected:
37 // Create a DownloadTestObserverTerminal that will wait for the
38 // specified number of downloads to finish.
dcheng4af48582016-04-19 00:29:3539 std::unique_ptr<content::DownloadTestObserver> CreateWaiter(
40 Browser* browser,
41 int num_downloads) {
[email protected]6c491c62013-08-02 18:59:0042 DownloadManager* download_manager =
43 BrowserContext::GetDownloadManager(browser->profile());
44
45 content::DownloadTestObserver* downloads_observer =
46 new content::DownloadTestObserverTerminal(
47 download_manager,
48 num_downloads,
49 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
dcheng4af48582016-04-19 00:29:3550 return base::WrapUnique(downloads_observer);
[email protected]6c491c62013-08-02 18:59:0051 }
52};
53
54IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestDownloadDirPref) {
svaldeza01f7d92015-11-18 17:47:5655 ASSERT_TRUE(embedded_test_server()->Start());
[email protected]6c491c62013-08-02 18:59:0056
Mattias Nissler441cc652018-04-05 00:08:5657 base::FilePath new_download_dir =
58 DownloadPrefs(browser()->profile()).DownloadPath().AppendASCII("subdir");
[email protected]6c491c62013-08-02 18:59:0059 base::FilePath downloaded_pkg =
Mattias Nissler441cc652018-04-05 00:08:5660 new_download_dir.AppendASCII("a_zip_file.zip");
[email protected]6c491c62013-08-02 18:59:0061
[email protected]6c491c62013-08-02 18:59:0062 // Set pref to download in new_download_dir.
63 browser()->profile()->GetPrefs()->SetFilePath(
Mattias Nissler441cc652018-04-05 00:08:5664 prefs::kDownloadDefaultDirectory, new_download_dir);
[email protected]6c491c62013-08-02 18:59:0065
66 // Create a downloads observer.
dcheng4af48582016-04-19 00:29:3567 std::unique_ptr<content::DownloadTestObserver> downloads_observer(
[email protected]6c491c62013-08-02 18:59:0068 CreateWaiter(browser(), 1));
69 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:5670 browser(), embedded_test_server()->GetURL("/downloads/a_zip_file.zip"));
[email protected]6c491c62013-08-02 18:59:0071 // Waits for the download to complete.
72 downloads_observer->WaitForFinished();
Mattias Nissler441cc652018-04-05 00:08:5673
74 base::ScopedAllowBlockingForTesting allow_blocking;
[email protected]6c491c62013-08-02 18:59:0075 EXPECT_TRUE(base::PathExists(downloaded_pkg));
76}
77
78// Verify image content settings show or hide images.
79IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestImageContentSettings) {
svaldeza01f7d92015-11-18 17:47:5680 ASSERT_TRUE(embedded_test_server()->Start());
[email protected]6c491c62013-08-02 18:59:0081
82 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:5683 browser(), embedded_test_server()->GetURL("/settings/image_page.html"));
[email protected]6c491c62013-08-02 18:59:0084
85 bool result = false;
86 std::string script =
87 "for (i=0; i < document.images.length; i++) {"
88 " if ((document.images[i].naturalWidth != 0) &&"
89 " (document.images[i].naturalHeight != 0)) {"
90 " window.domAutomationController.send(true);"
91 " }"
92 "}"
93 "window.domAutomationController.send(false);";
94 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
95 browser()->tab_strip_model()->GetActiveWebContents(),
96 script,
97 &result));
98 EXPECT_TRUE(result);
99
msramek96812202015-07-27 16:00:02100 browser()->profile()->GetPrefs()->SetInteger(
raymesbc7409e2015-08-06 01:57:45101 content_settings::WebsiteSettingsRegistry::GetInstance()
102 ->Get(CONTENT_SETTINGS_TYPE_IMAGES)
103 ->default_value_pref_name(),
104 CONTENT_SETTING_BLOCK);
[email protected]6c491c62013-08-02 18:59:00105
106 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:56107 browser(), embedded_test_server()->GetURL("/settings/image_page.html"));
[email protected]6c491c62013-08-02 18:59:00108
109 result = false;
110 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
111 browser()->tab_strip_model()->GetActiveWebContents(),
112 script,
113 &result));
114 EXPECT_FALSE(result);
115}
116
117// Verify that enabling/disabling Javascript in prefs works.
118IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestJavascriptEnableDisable) {
svaldeza01f7d92015-11-18 17:47:56119 ASSERT_TRUE(embedded_test_server()->Start());
[email protected]6c491c62013-08-02 18:59:00120
121 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
122 prefs::kWebKitJavascriptEnabled));
123 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:56124 browser(), embedded_test_server()->GetURL("/javaScriptTitle.html"));
[email protected]6778fed2013-12-24 20:09:37125 EXPECT_EQ(base::ASCIIToUTF16("Title from script javascript enabled"),
[email protected]6c491c62013-08-02 18:59:00126 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
127 browser()->profile()->GetPrefs()->SetBoolean(prefs::kWebKitJavascriptEnabled,
128 false);
129 ui_test_utils::NavigateToURL(
svaldeza01f7d92015-11-18 17:47:56130 browser(), embedded_test_server()->GetURL("/javaScriptTitle.html"));
[email protected]6778fed2013-12-24 20:09:37131 EXPECT_EQ(base::ASCIIToUTF16("This is html title"),
[email protected]6c491c62013-08-02 18:59:00132 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
133}
134
[email protected]6c491c62013-08-02 18:59:00135// Verify restore for bookmark bar visibility.
136IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest,
137 TestSessionRestoreShowBookmarkBar) {
138 EXPECT_FALSE(browser()->profile()->GetPrefs()->GetBoolean(
tfarina3bddbe112014-08-28 05:29:32139 bookmarks::prefs::kShowBookmarkBar));
140 browser()->profile()->GetPrefs()->SetBoolean(
141 bookmarks::prefs::kShowBookmarkBar, true);
[email protected]6c491c62013-08-02 18:59:00142 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
tfarina3bddbe112014-08-28 05:29:32143 bookmarks::prefs::kShowBookmarkBar));
[email protected]6c491c62013-08-02 18:59:00144
145 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
tfarina3bddbe112014-08-28 05:29:32146 bookmarks::prefs::kShowBookmarkBar));
[email protected]6c491c62013-08-02 18:59:00147 EXPECT_EQ(BookmarkBar::SHOW, browser()->bookmark_bar_state());
148}
[email protected]d3e9f3d2013-10-30 16:46:41149
150// Verify images are not blocked in incognito mode.
151IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestImagesNotBlockedInIncognito) {
svaldeza01f7d92015-11-18 17:47:56152 ASSERT_TRUE(embedded_test_server()->Start());
153 GURL url = embedded_test_server()->GetURL("/settings/image_page.html");
[email protected]d3e9f3d2013-10-30 16:46:41154 Browser* incognito_browser = CreateIncognitoBrowser();
thestig53986dc2014-12-16 06:09:18155 ui_test_utils::NavigateToURL(incognito_browser, url);
[email protected]d3e9f3d2013-10-30 16:46:41156
157 bool result = false;
158 std::string script =
159 "for (i=0; i < document.images.length; i++) {"
160 " if ((document.images[i].naturalWidth != 0) &&"
161 " (document.images[i].naturalHeight != 0)) {"
162 " window.domAutomationController.send(true);"
163 " }"
164 "}"
165 "window.domAutomationController.send(false);";
166 EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
167 incognito_browser->tab_strip_model()->GetActiveWebContents(),
168 script,
169 &result));
170 EXPECT_TRUE(result);
171}
172
173// Verify setting homepage preference to newtabpage across restarts. Part1
174IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepageNewTabpagePrefs) {
175 browser()->profile()->GetPrefs()->SetBoolean(prefs::kHomePageIsNewTabPage,
176 true);
177}
178
179// Verify setting homepage preference to newtabpage across restarts. Part2
180IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepageNewTabpagePrefs) {
181 EXPECT_TRUE(browser()->profile()->GetPrefs()->GetBoolean(
182 prefs::kHomePageIsNewTabPage));
183}
184
185// Verify setting homepage preference to specific url. Part1
186IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestHomepagePrefs) {
187 GURL home_page_url("http://www.google.com");
188
189 PrefService* prefs = browser()->profile()->GetPrefs();
190 prefs->SetBoolean(prefs::kHomePageIsNewTabPage, false);
191 const PrefService::Preference* pref =
192 prefs->FindPreference(prefs::kHomePage);
193 if (pref && !pref->IsManaged()) {
194 prefs->SetString(prefs::kHomePage, home_page_url.spec());
195 }
196}
197
198// Verify setting homepage preference to specific url. Part2
199IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHomepagePrefs) {
200 GURL home_page_url("http://www.google.com");
201
202 PrefService* prefs = browser()->profile()->GetPrefs();
203 EXPECT_FALSE(prefs->GetBoolean(prefs::kHomePageIsNewTabPage));
204 EXPECT_EQ(home_page_url.spec(), prefs->GetString(prefs::kHomePage));
205}
206
207// Verify the security preference under privacy across restarts. Part1
208IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, PRE_TestPrivacySecurityPrefs) {
209 PrefService* prefs = browser()->profile()->GetPrefs();
210
bncf17f84b2015-09-14 22:13:26211 static_assert(chrome_browser_net::NETWORK_PREDICTION_DEFAULT !=
212 chrome_browser_net::NETWORK_PREDICTION_NEVER,
213 "PrefsFunctionalTest.TestPrivacySecurityPrefs relies on "
214 "predictive network actions being enabled by default.");
215 EXPECT_EQ(chrome_browser_net::NETWORK_PREDICTION_DEFAULT,
216 prefs->GetInteger(prefs::kNetworkPredictionOptions));
217 prefs->SetInteger(prefs::kNetworkPredictionOptions,
218 chrome_browser_net::NETWORK_PREDICTION_NEVER);
[email protected]d3e9f3d2013-10-30 16:46:41219
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
231IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestPrivacySecurityPrefs) {
232 PrefService* prefs = browser()->profile()->GetPrefs();
233
bncf17f84b2015-09-14 22:13:26234 EXPECT_EQ(chrome_browser_net::NETWORK_PREDICTION_NEVER,
235 prefs->GetInteger(prefs::kNetworkPredictionOptions));
[email protected]d3e9f3d2013-10-30 16:46:41236 EXPECT_FALSE(prefs->GetBoolean(prefs::kSafeBrowsingEnabled));
237 EXPECT_FALSE(prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled));
238 EXPECT_FALSE(prefs->GetBoolean(prefs::kSearchSuggestEnabled));
239}
240
241// Verify that we have some Local State prefs.
242IN_PROC_BROWSER_TEST_F(PrefsFunctionalTest, TestHaveLocalStatePrefs) {
brettwebf7184f2017-04-18 21:10:53243 EXPECT_TRUE(g_browser_process->local_state()
244 ->GetPreferenceValues(PrefService::INCLUDE_DEFAULTS)
245 .get());
[email protected]d3e9f3d2013-10-30 16:46:41246}