15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Unit tests for master preferences related methods.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h"
130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/common/pref_names.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/master_preferences.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/master_preferences_constants.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/util_constants.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MasterPreferencesTest : public testing::Test {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() {
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    ASSERT_TRUE(base::CreateTemporaryFile(&prefs_file_));
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() {
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    EXPECT_TRUE(base::DeleteFile(prefs_file_, false));
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const base::FilePath& prefs_file() const { return prefs_file_; }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath prefs_file_;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used to specify an expected value for a set boolean preference variable.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ExpectedBooleans {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* name;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool expected_value;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, NoFileToParse) {
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(base::DeleteFile(prefs_file(), false));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installer::MasterPreferences prefs(prefs_file());
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(prefs.read_from_file());
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, ParseDistroParams) {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char text[] =
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{ \n"
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  \"distribution\": { \n"
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"show_welcome_page\": true,\n"
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"import_search_engine\": true,\n"
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"import_history\": true,\n"
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"import_bookmarks\": true,\n"
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"import_bookmarks_from_file\": \"c:\\\\foo\",\n"
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"import_home_page\": true,\n"
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "     \"do_not_create_any_shortcuts\": true,\n"
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"do_not_create_desktop_shortcut\": true,\n"
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"do_not_create_quick_launch_shortcut\": true,\n"
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "     \"do_not_create_taskbar_shortcut\": true,\n"
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"do_not_launch_chrome\": true,\n"
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"make_chrome_default\": true,\n"
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"make_chrome_default_for_user\": true,\n"
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"system_level\": true,\n"
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"verbose_logging\": true,\n"
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"require_eula\": true,\n"
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"alternate_shortcut_text\": true,\n"
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"chrome_shortcut_icon_index\": 1,\n"
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"ping_delay\": 40\n"
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  },\n"
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  \"blah\": {\n"
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"import_history\": false\n"
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  }\n"
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "} \n";
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(base::WriteFile(prefs_file(), text, strlen(text)));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installer::MasterPreferences prefs(prefs_file());
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs.read_from_file());
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* expected_true[] = {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kDistroImportSearchPref,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kDistroImportHistoryPref,
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kDistroImportBookmarksPref,
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kDistroImportHomePagePref,
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    installer::master_preferences::kDoNotCreateAnyShortcuts,
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kDoNotCreateDesktopShortcut,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kDoNotCreateQuickLaunchShortcut,
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    installer::master_preferences::kDoNotCreateTaskbarShortcut,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kDoNotLaunchChrome,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kMakeChromeDefault,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kMakeChromeDefaultForUser,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kSystemLevel,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kVerboseLogging,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kRequireEula,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kAltShortcutText,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < arraysize(expected_true); ++i) {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool value = false;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(prefs.GetBool(expected_true[i], &value));
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(value) << expected_true[i];
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string str_value;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs.GetString(
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      installer::master_preferences::kDistroImportBookmarksFromFilePref,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &str_value));
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_STREQ("c:\\foo", str_value.c_str());
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int icon_index = 0;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs.GetInt(
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      installer::master_preferences::kChromeShortcutIconIndex,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &icon_index));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(icon_index, 1);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ping_delay = 90;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs.GetInt(installer::master_preferences::kDistroPingDelay,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           &ping_delay));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ping_delay, 40);
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, ParseMissingDistroParams) {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char text[] =
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{ \n"
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  \"distribution\": { \n"
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"import_search_engine\": true,\n"
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"import_bookmarks\": false,\n"
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"import_bookmarks_from_file\": \"\",\n"
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"do_not_create_desktop_shortcut\": true,\n"
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"do_not_create_quick_launch_shortcut\": true,\n"
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"do_not_launch_chrome\": true,\n"
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"chrome_shortcut_icon_index\": \"bac\"\n"
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  }\n"
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "} \n";
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(base::WriteFile(prefs_file(), text, strlen(text)));
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installer::MasterPreferences prefs(prefs_file());
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs.read_from_file());
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectedBooleans expected_bool[] = {
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { installer::master_preferences::kDistroImportSearchPref, true },
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { installer::master_preferences::kDistroImportBookmarksPref, false },
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { installer::master_preferences::kDoNotCreateDesktopShortcut, true },
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { installer::master_preferences::kDoNotCreateQuickLaunchShortcut, true },
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { installer::master_preferences::kDoNotLaunchChrome, true },
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool value = false;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < arraysize(expected_bool); ++i) {
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(prefs.GetBool(expected_bool[i].name, &value));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(value, expected_bool[i].expected_value) << expected_bool[i].name;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* missing_bools[] = {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kDistroImportHomePagePref,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kDoNotRegisterForUpdateLaunch,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kMakeChromeDefault,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::master_preferences::kMakeChromeDefaultForUser,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < arraysize(missing_bools); ++i) {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(prefs.GetBool(missing_bools[i], &value)) << missing_bools[i];
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string str_value;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(prefs.GetString(
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      installer::master_preferences::kDistroImportBookmarksFromFilePref,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &str_value));
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int icon_index = 0;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(prefs.GetInt(
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      installer::master_preferences::kChromeShortcutIconIndex,
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &icon_index));
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(icon_index, 0);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int ping_delay = 90;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(prefs.GetInt(
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      installer::master_preferences::kDistroPingDelay, &ping_delay));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ping_delay, 90);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, FirstRunTabs) {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char text[] =
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{ \n"
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  \"distribution\": { \n"
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"something here\": true\n"
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  },\n"
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  \"first_run_tabs\": [\n"
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"http://google.com/f1\",\n"
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"https://google.com/f2\",\n"
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"new_tab_page\"\n"
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  ]\n"
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "} \n";
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(base::WriteFile(prefs_file(), text, strlen(text)));
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installer::MasterPreferences prefs(prefs_file());
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef std::vector<std::string> TabsVector;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabsVector tabs = prefs.GetFirstRunTabs();
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(3, tabs.size());
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("http://google.com/f1", tabs[0]);
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("https://google.com/f2", tabs[1]);
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("new_tab_page", tabs[2]);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// In this test instead of using our synthetic json file, we use an
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// actual test case from the extensions unittest. The hope here is that if
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// they change something in the manifest this test will break, but in
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// general it is expected the extension format to be backwards compatible.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(MasterPrefsExtension, ValidateExtensionJSON) {
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath prefs_path;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &prefs_path));
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs_path = prefs_path.AppendASCII("extensions")
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .AppendASCII("good").AppendASCII("Preferences");
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installer::MasterPreferences prefs(prefs_path);
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::DictionaryValue* extensions = NULL;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(prefs.GetExtensionsBlock(&extensions));
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int location = 0;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(extensions->GetInteger(
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "behllobkkfkfnphdnhnkndlbkcpglgmj.location", &location));
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int state = 0;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(extensions->GetInteger(
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "behllobkkfkfnphdnhnkndlbkcpglgmj.state", &state));
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string path;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(extensions->GetString(
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "behllobkkfkfnphdnhnkndlbkcpglgmj.path", &path));
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string key;
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(extensions->GetString(
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "behllobkkfkfnphdnhnkndlbkcpglgmj.manifest.key", &key));
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string name;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(extensions->GetString(
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "behllobkkfkfnphdnhnkndlbkcpglgmj.manifest.name", &name));
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string version;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(extensions->GetString(
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "behllobkkfkfnphdnhnkndlbkcpglgmj.manifest.version", &version));
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we are parsing master preferences correctly.
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, GetInstallPreferencesTest) {
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create a temporary prefs file.
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath prefs_file;
244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(base::CreateTemporaryFile(&prefs_file));
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char text[] =
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "{ \n"
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  \"distribution\": { \n"
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"do_not_create_desktop_shortcut\": false,\n"
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"do_not_create_quick_launch_shortcut\": false,\n"
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"do_not_launch_chrome\": true,\n"
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"system_level\": true,\n"
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "     \"verbose_logging\": false\n"
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "  }\n"
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "} \n";
255a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(base::WriteFile(prefs_file, text, strlen(text)));
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure command line values override the values in master preferences.
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::wstring cmd_str(
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      L"setup.exe --installerdata=\"" + prefs_file.value() + L"\"");
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd_str.append(L" --do-not-launch-chrome");
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine cmd_line = CommandLine::FromString(cmd_str);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installer::MasterPreferences prefs(cmd_line);
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check prefs that do not have any equivalent command line option.
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectedBooleans expected_bool[] = {
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { installer::master_preferences::kDoNotLaunchChrome, true },
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { installer::master_preferences::kSystemLevel, true },
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { installer::master_preferences::kVerboseLogging, false },
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now check that prefs got merged correctly.
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool value = false;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < arraysize(expected_bool); ++i) {
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(prefs.GetBool(expected_bool[i].name, &value));
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(value, expected_bool[i].expected_value) << expected_bool[i].name;
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Delete temporary prefs file.
2797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(base::DeleteFile(prefs_file, false));
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check that if master prefs doesn't exist, we can still parse the common
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // prefs.
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd_str = L"setup.exe --do-not-launch-chrome";
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd_line.ParseFromString(cmd_str);
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installer::MasterPreferences prefs2(cmd_line);
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectedBooleans expected_bool2[] = {
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { installer::master_preferences::kDoNotLaunchChrome, true },
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < arraysize(expected_bool2); ++i) {
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(prefs2.GetBool(expected_bool2[i].name, &value));
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(value, expected_bool2[i].expected_value)
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        << expected_bool2[i].name;
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(prefs2.GetBool(
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      installer::master_preferences::kSystemLevel, &value));
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(prefs2.GetBool(
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      installer::master_preferences::kVerboseLogging, &value));
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, TestDefaultInstallConfig) {
3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::wstringstream chrome_cmd;
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome_cmd << "setup.exe";
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine chrome_install(CommandLine::FromString(chrome_cmd.str()));
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installer::MasterPreferences pref_chrome(chrome_install);
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(pref_chrome.is_multi_install());
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(pref_chrome.install_chrome());
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, TestMultiInstallConfig) {
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  using installer::switches::kMultiInstall;
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  using installer::switches::kChrome;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::wstringstream chrome_cmd, cf_cmd, chrome_cf_cmd;
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome_cmd << "setup.exe --" << kMultiInstall << " --" << kChrome;
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommandLine chrome_install(CommandLine::FromString(chrome_cmd.str()));
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  installer::MasterPreferences pref_chrome(chrome_install);
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(pref_chrome.is_multi_install());
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(pref_chrome.install_chrome());
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, EnforceLegacyCreateAllShortcutsFalse) {
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kCreateAllShortcutsFalsePrefs[] =
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "{"
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  \"distribution\": {"
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "     \"create_all_shortcuts\": false"
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  }"
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "}";
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::MasterPreferences prefs(kCreateAllShortcutsFalsePrefs);
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool do_not_create_desktop_shortcut = false;
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool do_not_create_quick_launch_shortcut = false;
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool do_not_create_taskbar_shortcut = false;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prefs.GetBool(
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        installer::master_preferences::kDoNotCreateDesktopShortcut,
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &do_not_create_desktop_shortcut);
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prefs.GetBool(
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        installer::master_preferences::kDoNotCreateQuickLaunchShortcut,
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &do_not_create_quick_launch_shortcut);
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    prefs.GetBool(
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        installer::master_preferences::kDoNotCreateTaskbarShortcut,
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &do_not_create_taskbar_shortcut);
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // create_all_shortcuts is a legacy preference that should only enforce
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // do_not_create_desktop_shortcut and do_not_create_quick_launch_shortcut
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // when set to false.
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(do_not_create_desktop_shortcut);
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(do_not_create_quick_launch_shortcut);
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_FALSE(do_not_create_taskbar_shortcut);
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, DontEnforceLegacyCreateAllShortcutsTrue) {
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kCreateAllShortcutsFalsePrefs[] =
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "{"
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  \"distribution\": {"
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "     \"create_all_shortcuts\": true"
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  }"
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "}";
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::MasterPreferences prefs(kCreateAllShortcutsFalsePrefs);
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool do_not_create_desktop_shortcut = false;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool do_not_create_quick_launch_shortcut = false;
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool do_not_create_taskbar_shortcut = false;
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prefs.GetBool(
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        installer::master_preferences::kDoNotCreateDesktopShortcut,
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &do_not_create_desktop_shortcut);
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prefs.GetBool(
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        installer::master_preferences::kDoNotCreateQuickLaunchShortcut,
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &do_not_create_quick_launch_shortcut);
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    prefs.GetBool(
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        installer::master_preferences::kDoNotCreateTaskbarShortcut,
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &do_not_create_taskbar_shortcut);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(do_not_create_desktop_shortcut);
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(do_not_create_quick_launch_shortcut);
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_FALSE(do_not_create_taskbar_shortcut);
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MasterPreferencesTest, DontEnforceLegacyCreateAllShortcutsNotSpecified) {
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kCreateAllShortcutsFalsePrefs[] =
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "{"
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  \"distribution\": {"
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "     \"some_other_pref\": true"
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  }"
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "}";
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::MasterPreferences prefs(kCreateAllShortcutsFalsePrefs);
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool do_not_create_desktop_shortcut = false;
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool do_not_create_quick_launch_shortcut = false;
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool do_not_create_taskbar_shortcut = false;
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prefs.GetBool(
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        installer::master_preferences::kDoNotCreateDesktopShortcut,
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &do_not_create_desktop_shortcut);
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prefs.GetBool(
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        installer::master_preferences::kDoNotCreateQuickLaunchShortcut,
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        &do_not_create_quick_launch_shortcut);
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    prefs.GetBool(
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        installer::master_preferences::kDoNotCreateTaskbarShortcut,
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &do_not_create_taskbar_shortcut);
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(do_not_create_desktop_shortcut);
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(do_not_create_quick_launch_shortcut);
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_FALSE(do_not_create_taskbar_shortcut);
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
4130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(MasterPreferencesTest, MigrateOldStartupUrlsPref) {
4140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  static const char kOldMasterPrefs[] =
4150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "{ \n"
4160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "  \"distribution\": { \n"
4170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"show_welcome_page\": true,\n"
4180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"import_search_engine\": true,\n"
4190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"import_history\": true,\n"
4200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"import_bookmarks\": true\n"
4210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "  },\n"
4220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "  \"session\": {\n"
4230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"urls_to_restore_on_startup\": [\"http://www.google.com\"]\n"
4240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "  }\n"
4250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "} \n";
4260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
4270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const installer::MasterPreferences prefs(kOldMasterPrefs);
4280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const base::DictionaryValue& master_dictionary =
4290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      prefs.master_dictionary();
4300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
4310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const base::ListValue* old_startup_urls_list = NULL;
4320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(master_dictionary.GetList(prefs::kURLsToRestoreOnStartupOld,
4330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                        &old_startup_urls_list));
4340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(old_startup_urls_list != NULL);
4350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
4360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // The MasterPreferences dictionary should also conjure up the new setting
4370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // as per EnforceLegacyPreferences.
4380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const base::ListValue* new_startup_urls_list = NULL;
4390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(master_dictionary.GetList(prefs::kURLsToRestoreOnStartup,
4400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                        &new_startup_urls_list));
4410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(new_startup_urls_list != NULL);
4420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
4430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
4440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(MasterPreferencesTest, DontMigrateOldStartupUrlsPrefWhenNewExists) {
4450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  static const char kOldAndNewMasterPrefs[] =
4460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "{ \n"
4470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "  \"distribution\": { \n"
4480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"show_welcome_page\": true,\n"
4490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"import_search_engine\": true,\n"
4500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"import_history\": true,\n"
4510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"import_bookmarks\": true\n"
4520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "  },\n"
4530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "  \"session\": {\n"
4540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"urls_to_restore_on_startup\": [\"http://www.google.com\"],\n"
4550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "     \"startup_urls\": [\"http://www.example.com\"]\n"
4560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "  }\n"
4570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      "} \n";
4580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
4590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const installer::MasterPreferences prefs(kOldAndNewMasterPrefs);
4600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const base::DictionaryValue& master_dictionary =
4610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      prefs.master_dictionary();
4620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
4630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const base::ListValue* old_startup_urls_list = NULL;
4640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(master_dictionary.GetList(prefs::kURLsToRestoreOnStartupOld,
4650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                        &old_startup_urls_list));
4660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(old_startup_urls_list != NULL);
4670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  std::string url_value;
4680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(old_startup_urls_list->GetString(0, &url_value));
4690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ("http://www.google.com", url_value);
4700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
4710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // The MasterPreferences dictionary should also conjure up the new setting
4720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // as per EnforceLegacyPreferences.
4730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const base::ListValue* new_startup_urls_list = NULL;
4740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(master_dictionary.GetList(prefs::kURLsToRestoreOnStartup,
4750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                        &new_startup_urls_list));
4760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(new_startup_urls_list != NULL);
4770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  std::string new_url_value;
4780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_TRUE(new_startup_urls_list->GetString(0, &new_url_value));
4790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ("http://www.example.com", new_url_value);
4800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
481