[Android] Added UMA for search by image context menu.
[chromium-blink-merge.git] / chrome / installer / util / master_preferences_unittest.cc
blob3525eff5e4627a316ed41a99db6fb21f859ca541
1 // Copyright (c) 2012 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 // Unit tests for master preferences related methods.
7 #include "base/file_util.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/path_service.h"
10 #include "base/strings/stringprintf.h"
11 #include "base/values.h"
12 #include "chrome/common/chrome_paths.h"
13 #include "chrome/installer/util/master_preferences.h"
14 #include "chrome/installer/util/master_preferences_constants.h"
15 #include "chrome/installer/util/util_constants.h"
16 #include "testing/gtest/include/gtest/gtest.h"
18 namespace {
19 class MasterPreferencesTest : public testing::Test {
20 protected:
21 virtual void SetUp() {
22 ASSERT_TRUE(file_util::CreateTemporaryFile(&prefs_file_));
25 virtual void TearDown() {
26 EXPECT_TRUE(base::DeleteFile(prefs_file_, false));
29 const base::FilePath& prefs_file() const { return prefs_file_; }
31 private:
32 base::FilePath prefs_file_;
35 // Used to specify an expected value for a set boolean preference variable.
36 struct ExpectedBooleans {
37 const char* name;
38 bool expected_value;
41 } // namespace
43 TEST_F(MasterPreferencesTest, NoFileToParse) {
44 EXPECT_TRUE(base::DeleteFile(prefs_file(), false));
45 installer::MasterPreferences prefs(prefs_file());
46 EXPECT_FALSE(prefs.read_from_file());
49 TEST_F(MasterPreferencesTest, ParseDistroParams) {
50 const char text[] =
51 "{ \n"
52 " \"distribution\": { \n"
53 " \"show_welcome_page\": true,\n"
54 " \"import_search_engine\": true,\n"
55 " \"import_history\": true,\n"
56 " \"import_bookmarks\": true,\n"
57 " \"import_bookmarks_from_file\": \"c:\\\\foo\",\n"
58 " \"import_home_page\": true,\n"
59 " \"do_not_create_any_shortcuts\": true,\n"
60 " \"do_not_create_desktop_shortcut\": true,\n"
61 " \"do_not_create_quick_launch_shortcut\": true,\n"
62 " \"do_not_create_taskbar_shortcut\": true,\n"
63 " \"do_not_launch_chrome\": true,\n"
64 " \"make_chrome_default\": true,\n"
65 " \"make_chrome_default_for_user\": true,\n"
66 " \"system_level\": true,\n"
67 " \"verbose_logging\": true,\n"
68 " \"require_eula\": true,\n"
69 " \"alternate_shortcut_text\": true,\n"
70 " \"chrome_shortcut_icon_index\": 1,\n"
71 " \"ping_delay\": 40\n"
72 " },\n"
73 " \"blah\": {\n"
74 " \"import_history\": false\n"
75 " }\n"
76 "} \n";
78 EXPECT_TRUE(file_util::WriteFile(prefs_file(), text, strlen(text)));
79 installer::MasterPreferences prefs(prefs_file());
80 EXPECT_TRUE(prefs.read_from_file());
82 const char* expected_true[] = {
83 installer::master_preferences::kDistroImportSearchPref,
84 installer::master_preferences::kDistroImportHistoryPref,
85 installer::master_preferences::kDistroImportBookmarksPref,
86 installer::master_preferences::kDistroImportHomePagePref,
87 installer::master_preferences::kDoNotCreateAnyShortcuts,
88 installer::master_preferences::kDoNotCreateDesktopShortcut,
89 installer::master_preferences::kDoNotCreateQuickLaunchShortcut,
90 installer::master_preferences::kDoNotCreateTaskbarShortcut,
91 installer::master_preferences::kDoNotLaunchChrome,
92 installer::master_preferences::kMakeChromeDefault,
93 installer::master_preferences::kMakeChromeDefaultForUser,
94 installer::master_preferences::kSystemLevel,
95 installer::master_preferences::kVerboseLogging,
96 installer::master_preferences::kRequireEula,
97 installer::master_preferences::kAltShortcutText,
100 for (int i = 0; i < arraysize(expected_true); ++i) {
101 bool value = false;
102 EXPECT_TRUE(prefs.GetBool(expected_true[i], &value));
103 EXPECT_TRUE(value) << expected_true[i];
106 std::string str_value;
107 EXPECT_TRUE(prefs.GetString(
108 installer::master_preferences::kDistroImportBookmarksFromFilePref,
109 &str_value));
110 EXPECT_STREQ("c:\\foo", str_value.c_str());
112 int icon_index = 0;
113 EXPECT_TRUE(prefs.GetInt(
114 installer::master_preferences::kChromeShortcutIconIndex,
115 &icon_index));
116 EXPECT_EQ(icon_index, 1);
117 int ping_delay = 90;
118 EXPECT_TRUE(prefs.GetInt(installer::master_preferences::kDistroPingDelay,
119 &ping_delay));
120 EXPECT_EQ(ping_delay, 40);
123 TEST_F(MasterPreferencesTest, ParseMissingDistroParams) {
124 const char text[] =
125 "{ \n"
126 " \"distribution\": { \n"
127 " \"import_search_engine\": true,\n"
128 " \"import_bookmarks\": false,\n"
129 " \"import_bookmarks_from_file\": \"\",\n"
130 " \"do_not_create_desktop_shortcut\": true,\n"
131 " \"do_not_create_quick_launch_shortcut\": true,\n"
132 " \"do_not_launch_chrome\": true,\n"
133 " \"chrome_shortcut_icon_index\": \"bac\"\n"
134 " }\n"
135 "} \n";
137 EXPECT_TRUE(file_util::WriteFile(prefs_file(), text, strlen(text)));
138 installer::MasterPreferences prefs(prefs_file());
139 EXPECT_TRUE(prefs.read_from_file());
141 ExpectedBooleans expected_bool[] = {
142 { installer::master_preferences::kDistroImportSearchPref, true },
143 { installer::master_preferences::kDistroImportBookmarksPref, false },
144 { installer::master_preferences::kDoNotCreateDesktopShortcut, true },
145 { installer::master_preferences::kDoNotCreateQuickLaunchShortcut, true },
146 { installer::master_preferences::kDoNotLaunchChrome, true },
149 bool value = false;
150 for (int i = 0; i < arraysize(expected_bool); ++i) {
151 EXPECT_TRUE(prefs.GetBool(expected_bool[i].name, &value));
152 EXPECT_EQ(value, expected_bool[i].expected_value) << expected_bool[i].name;
155 const char* missing_bools[] = {
156 installer::master_preferences::kDistroImportHomePagePref,
157 installer::master_preferences::kDoNotRegisterForUpdateLaunch,
158 installer::master_preferences::kMakeChromeDefault,
159 installer::master_preferences::kMakeChromeDefaultForUser,
162 for (int i = 0; i < arraysize(missing_bools); ++i) {
163 EXPECT_FALSE(prefs.GetBool(missing_bools[i], &value)) << missing_bools[i];
166 std::string str_value;
167 EXPECT_FALSE(prefs.GetString(
168 installer::master_preferences::kDistroImportBookmarksFromFilePref,
169 &str_value));
171 int icon_index = 0;
172 EXPECT_FALSE(prefs.GetInt(
173 installer::master_preferences::kChromeShortcutIconIndex,
174 &icon_index));
175 EXPECT_EQ(icon_index, 0);
177 int ping_delay = 90;
178 EXPECT_FALSE(prefs.GetInt(
179 installer::master_preferences::kDistroPingDelay, &ping_delay));
180 EXPECT_EQ(ping_delay, 90);
183 TEST_F(MasterPreferencesTest, FirstRunTabs) {
184 const char text[] =
185 "{ \n"
186 " \"distribution\": { \n"
187 " \"something here\": true\n"
188 " },\n"
189 " \"first_run_tabs\": [\n"
190 " \"http://google.com/f1\",\n"
191 " \"https://google.com/f2\",\n"
192 " \"new_tab_page\"\n"
193 " ]\n"
194 "} \n";
196 EXPECT_TRUE(file_util::WriteFile(prefs_file(), text, strlen(text)));
197 installer::MasterPreferences prefs(prefs_file());
198 typedef std::vector<std::string> TabsVector;
199 TabsVector tabs = prefs.GetFirstRunTabs();
200 ASSERT_EQ(3, tabs.size());
201 EXPECT_EQ("http://google.com/f1", tabs[0]);
202 EXPECT_EQ("https://google.com/f2", tabs[1]);
203 EXPECT_EQ("new_tab_page", tabs[2]);
206 // In this test instead of using our synthetic json file, we use an
207 // actual test case from the extensions unittest. The hope here is that if
208 // they change something in the manifest this test will break, but in
209 // general it is expected the extension format to be backwards compatible.
210 TEST(MasterPrefsExtension, ValidateExtensionJSON) {
211 base::FilePath prefs_path;
212 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &prefs_path));
213 prefs_path = prefs_path.AppendASCII("extensions")
214 .AppendASCII("good").AppendASCII("Preferences");
216 installer::MasterPreferences prefs(prefs_path);
217 DictionaryValue* extensions = NULL;
218 EXPECT_TRUE(prefs.GetExtensionsBlock(&extensions));
219 int location = 0;
220 EXPECT_TRUE(extensions->GetInteger(
221 "behllobkkfkfnphdnhnkndlbkcpglgmj.location", &location));
222 int state = 0;
223 EXPECT_TRUE(extensions->GetInteger(
224 "behllobkkfkfnphdnhnkndlbkcpglgmj.state", &state));
225 std::string path;
226 EXPECT_TRUE(extensions->GetString(
227 "behllobkkfkfnphdnhnkndlbkcpglgmj.path", &path));
228 std::string key;
229 EXPECT_TRUE(extensions->GetString(
230 "behllobkkfkfnphdnhnkndlbkcpglgmj.manifest.key", &key));
231 std::string name;
232 EXPECT_TRUE(extensions->GetString(
233 "behllobkkfkfnphdnhnkndlbkcpglgmj.manifest.name", &name));
234 std::string version;
235 EXPECT_TRUE(extensions->GetString(
236 "behllobkkfkfnphdnhnkndlbkcpglgmj.manifest.version", &version));
239 // Test that we are parsing master preferences correctly.
240 TEST_F(MasterPreferencesTest, GetInstallPreferencesTest) {
241 // Create a temporary prefs file.
242 base::FilePath prefs_file;
243 ASSERT_TRUE(file_util::CreateTemporaryFile(&prefs_file));
244 const char text[] =
245 "{ \n"
246 " \"distribution\": { \n"
247 " \"do_not_create_desktop_shortcut\": false,\n"
248 " \"do_not_create_quick_launch_shortcut\": false,\n"
249 " \"do_not_launch_chrome\": true,\n"
250 " \"system_level\": true,\n"
251 " \"verbose_logging\": false\n"
252 " }\n"
253 "} \n";
254 EXPECT_TRUE(file_util::WriteFile(prefs_file, text, strlen(text)));
256 // Make sure command line values override the values in master preferences.
257 std::wstring cmd_str(
258 L"setup.exe --installerdata=\"" + prefs_file.value() + L"\"");
259 cmd_str.append(L" --do-not-launch-chrome");
260 CommandLine cmd_line = CommandLine::FromString(cmd_str);
261 installer::MasterPreferences prefs(cmd_line);
263 // Check prefs that do not have any equivalent command line option.
264 ExpectedBooleans expected_bool[] = {
265 { installer::master_preferences::kDoNotLaunchChrome, true },
266 { installer::master_preferences::kSystemLevel, true },
267 { installer::master_preferences::kVerboseLogging, false },
270 // Now check that prefs got merged correctly.
271 bool value = false;
272 for (int i = 0; i < arraysize(expected_bool); ++i) {
273 EXPECT_TRUE(prefs.GetBool(expected_bool[i].name, &value));
274 EXPECT_EQ(value, expected_bool[i].expected_value) << expected_bool[i].name;
277 // Delete temporary prefs file.
278 EXPECT_TRUE(base::DeleteFile(prefs_file, false));
280 // Check that if master prefs doesn't exist, we can still parse the common
281 // prefs.
282 cmd_str = L"setup.exe --do-not-launch-chrome";
283 cmd_line.ParseFromString(cmd_str);
284 installer::MasterPreferences prefs2(cmd_line);
285 ExpectedBooleans expected_bool2[] = {
286 { installer::master_preferences::kDoNotLaunchChrome, true },
289 for (int i = 0; i < arraysize(expected_bool2); ++i) {
290 EXPECT_TRUE(prefs2.GetBool(expected_bool2[i].name, &value));
291 EXPECT_EQ(value, expected_bool2[i].expected_value)
292 << expected_bool2[i].name;
295 EXPECT_FALSE(prefs2.GetBool(
296 installer::master_preferences::kSystemLevel, &value));
297 EXPECT_FALSE(prefs2.GetBool(
298 installer::master_preferences::kVerboseLogging, &value));
301 TEST_F(MasterPreferencesTest, TestDefaultInstallConfig) {
302 std::wstringstream chrome_cmd, cf_cmd;
303 chrome_cmd << "setup.exe";
304 cf_cmd << "setup.exe --" << installer::switches::kChromeFrame;
306 CommandLine chrome_install(CommandLine::FromString(chrome_cmd.str()));
307 CommandLine cf_install(CommandLine::FromString(cf_cmd.str()));
309 installer::MasterPreferences pref_chrome(chrome_install);
310 installer::MasterPreferences pref_cf(cf_install);
312 EXPECT_FALSE(pref_chrome.is_multi_install());
313 EXPECT_TRUE(pref_chrome.install_chrome());
314 EXPECT_FALSE(pref_chrome.install_chrome_frame());
316 EXPECT_FALSE(pref_cf.is_multi_install());
317 EXPECT_FALSE(pref_cf.install_chrome());
318 EXPECT_TRUE(pref_cf.install_chrome_frame());
321 TEST_F(MasterPreferencesTest, TestMultiInstallConfig) {
322 using installer::switches::kMultiInstall;
323 using installer::switches::kChrome;
324 using installer::switches::kChromeFrame;
326 std::wstringstream chrome_cmd, cf_cmd, chrome_cf_cmd;
327 chrome_cmd << "setup.exe --" << kMultiInstall << " --" << kChrome;
328 cf_cmd << "setup.exe --" << kMultiInstall << " --" << kChromeFrame;
329 chrome_cf_cmd << "setup.exe --" << kMultiInstall << " --" << kChrome <<
330 " --" << kChromeFrame;
332 CommandLine chrome_install(CommandLine::FromString(chrome_cmd.str()));
333 CommandLine cf_install(CommandLine::FromString(cf_cmd.str()));
334 CommandLine chrome_cf_install(CommandLine::FromString(chrome_cf_cmd.str()));
336 installer::MasterPreferences pref_chrome(chrome_install);
337 installer::MasterPreferences pref_cf(cf_install);
338 installer::MasterPreferences pref_chrome_cf(chrome_cf_install);
340 EXPECT_TRUE(pref_chrome.is_multi_install());
341 EXPECT_TRUE(pref_chrome.install_chrome());
342 EXPECT_FALSE(pref_chrome.install_chrome_frame());
344 EXPECT_TRUE(pref_cf.is_multi_install());
345 EXPECT_FALSE(pref_cf.install_chrome());
346 EXPECT_TRUE(pref_cf.install_chrome_frame());
348 EXPECT_TRUE(pref_chrome_cf.is_multi_install());
349 EXPECT_TRUE(pref_chrome_cf.install_chrome());
350 EXPECT_TRUE(pref_chrome_cf.install_chrome_frame());
353 TEST_F(MasterPreferencesTest, EnforceLegacyCreateAllShortcutsFalse) {
354 static const char kCreateAllShortcutsFalsePrefs[] =
356 " \"distribution\": {"
357 " \"create_all_shortcuts\": false"
358 " }"
359 "}";
361 installer::MasterPreferences prefs(kCreateAllShortcutsFalsePrefs);
363 bool do_not_create_desktop_shortcut = false;
364 bool do_not_create_quick_launch_shortcut = false;
365 bool do_not_create_taskbar_shortcut = false;
366 prefs.GetBool(
367 installer::master_preferences::kDoNotCreateDesktopShortcut,
368 &do_not_create_desktop_shortcut);
369 prefs.GetBool(
370 installer::master_preferences::kDoNotCreateQuickLaunchShortcut,
371 &do_not_create_quick_launch_shortcut);
372 prefs.GetBool(
373 installer::master_preferences::kDoNotCreateTaskbarShortcut,
374 &do_not_create_taskbar_shortcut);
375 // create_all_shortcuts is a legacy preference that should only enforce
376 // do_not_create_desktop_shortcut and do_not_create_quick_launch_shortcut
377 // when set to false.
378 EXPECT_TRUE(do_not_create_desktop_shortcut);
379 EXPECT_TRUE(do_not_create_quick_launch_shortcut);
380 EXPECT_FALSE(do_not_create_taskbar_shortcut);
383 TEST_F(MasterPreferencesTest, DontEnforceLegacyCreateAllShortcutsTrue) {
384 static const char kCreateAllShortcutsFalsePrefs[] =
386 " \"distribution\": {"
387 " \"create_all_shortcuts\": true"
388 " }"
389 "}";
391 installer::MasterPreferences prefs(kCreateAllShortcutsFalsePrefs);
393 bool do_not_create_desktop_shortcut = false;
394 bool do_not_create_quick_launch_shortcut = false;
395 bool do_not_create_taskbar_shortcut = false;
396 prefs.GetBool(
397 installer::master_preferences::kDoNotCreateDesktopShortcut,
398 &do_not_create_desktop_shortcut);
399 prefs.GetBool(
400 installer::master_preferences::kDoNotCreateQuickLaunchShortcut,
401 &do_not_create_quick_launch_shortcut);
402 prefs.GetBool(
403 installer::master_preferences::kDoNotCreateTaskbarShortcut,
404 &do_not_create_taskbar_shortcut);
405 EXPECT_FALSE(do_not_create_desktop_shortcut);
406 EXPECT_FALSE(do_not_create_quick_launch_shortcut);
407 EXPECT_FALSE(do_not_create_taskbar_shortcut);
410 TEST_F(MasterPreferencesTest, DontEnforceLegacyCreateAllShortcutsNotSpecified) {
411 static const char kCreateAllShortcutsFalsePrefs[] =
413 " \"distribution\": {"
414 " \"some_other_pref\": true"
415 " }"
416 "}";
418 installer::MasterPreferences prefs(kCreateAllShortcutsFalsePrefs);
420 bool do_not_create_desktop_shortcut = false;
421 bool do_not_create_quick_launch_shortcut = false;
422 bool do_not_create_taskbar_shortcut = false;
423 prefs.GetBool(
424 installer::master_preferences::kDoNotCreateDesktopShortcut,
425 &do_not_create_desktop_shortcut);
426 prefs.GetBool(
427 installer::master_preferences::kDoNotCreateQuickLaunchShortcut,
428 &do_not_create_quick_launch_shortcut);
429 prefs.GetBool(
430 installer::master_preferences::kDoNotCreateTaskbarShortcut,
431 &do_not_create_taskbar_shortcut);
432 EXPECT_FALSE(do_not_create_desktop_shortcut);
433 EXPECT_FALSE(do_not_create_quick_launch_shortcut);
434 EXPECT_FALSE(do_not_create_taskbar_shortcut);