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#include "chrome/browser/ui/ash/chrome_launcher_prefs.h"
6
7#include "base/basictypes.h"
8#include "base/memory/scoped_ptr.h"
9#include "base/values.h"
10#include "chrome/common/extensions/extension_constants.h"
11#include "chrome/common/pref_names.h"
12#include "components/user_prefs/pref_registry_syncable.h"
13
14#if defined(OS_CHROMEOS)
15#include "chrome/browser/chromeos/login/default_pinned_apps_field_trial.h"
16#endif
17
18namespace {
19
20// App ID of default pinned apps.
21const char* kDefaultPinnedApps[] = {
22  extension_misc::kGmailAppId,
23  extension_misc::kGoogleSearchAppId,
24  extension_misc::kGoogleDocAppId,
25  extension_misc::kYoutubeAppId,
26};
27
28base::ListValue* CreateDefaultPinnedAppsList() {
29#if defined(OS_CHROMEOS)
30  base::ListValue* alternate = chromeos::default_pinned_apps_field_trial::
31      GetAlternateDefaultPinnedApps();
32  if (alternate)
33    return alternate;
34#endif
35
36  scoped_ptr<base::ListValue> apps(new base::ListValue);
37  for (size_t i = 0; i < arraysize(kDefaultPinnedApps); ++i)
38    apps->Append(ash::CreateAppDict(kDefaultPinnedApps[i]));
39
40  return apps.release();
41}
42
43}  // namespace
44
45namespace ash {
46
47const char kPinnedAppsPrefAppIDPath[] = "id";
48
49const char kShelfAutoHideBehaviorAlways[] = "Always";
50const char kShelfAutoHideBehaviorNever[] = "Never";
51
52extern const char kShelfAlignmentBottom[] = "Bottom";
53extern const char kShelfAlignmentLeft[] = "Left";
54extern const char kShelfAlignmentRight[] = "Right";
55extern const char kShelfAlignmentTop[] = "Top";
56
57void RegisterChromeLauncherUserPrefs(
58    user_prefs::PrefRegistrySyncable* registry) {
59  // TODO: If we want to support multiple profiles this will likely need to be
60  // pushed to local state and we'll need to track profile per item.
61  registry->RegisterIntegerPref(
62      prefs::kShelfChromeIconIndex,
63      0,
64      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
65  registry->RegisterListPref(prefs::kPinnedLauncherApps,
66                             CreateDefaultPinnedAppsList(),
67                             user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
68  registry->RegisterStringPref(prefs::kShelfAutoHideBehavior,
69                               kShelfAutoHideBehaviorNever,
70                               user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
71  registry->RegisterStringPref(
72      prefs::kShelfAutoHideBehaviorLocal,
73      std::string(),
74      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
75  registry->RegisterStringPref(prefs::kShelfAlignment,
76                               kShelfAlignmentBottom,
77                               user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
78  registry->RegisterStringPref(
79      prefs::kShelfAlignmentLocal,
80      std::string(),
81      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
82  registry->RegisterBooleanPref(
83      prefs::kShowLogoutButtonInTray,
84      false,
85      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
86  registry->RegisterDictionaryPref(
87      prefs::kShelfPreferences,
88      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
89}
90
91base::DictionaryValue* CreateAppDict(const std::string& app_id) {
92  scoped_ptr<base::DictionaryValue> app_value(new base::DictionaryValue);
93  app_value->SetString(kPinnedAppsPrefAppIDPath, app_id);
94  return app_value.release();
95}
96
97}  // namespace ash
98