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