Home | History | Annotate | Download | only in ash
      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 
     18 namespace {
     19 
     20 // App ID of default pinned apps.
     21 const char* kDefaultPinnedApps[] = {
     22   extension_misc::kGmailAppId,
     23   extension_misc::kGoogleSearchAppId,
     24   extension_misc::kGoogleDocAppId,
     25   extension_misc::kYoutubeAppId,
     26 };
     27 
     28 base::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 
     45 namespace ash {
     46 
     47 const char kPinnedAppsPrefAppIDPath[] = "id";
     48 
     49 const char kShelfAutoHideBehaviorAlways[] = "Always";
     50 const char kShelfAutoHideBehaviorNever[] = "Never";
     51 
     52 extern const char kShelfAlignmentBottom[] = "Bottom";
     53 extern const char kShelfAlignmentLeft[] = "Left";
     54 extern const char kShelfAlignmentRight[] = "Right";
     55 extern const char kShelfAlignmentTop[] = "Top";
     56 
     57 void 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 
     91 base::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