blob: 855e23c7b510984e990e199de56c3cf8a5001cc3 [file] [log] [blame]
[email protected]487ba1462012-01-05 03:13:091// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]fecc1522009-10-15 21:08:292// 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/chromeos/preferences.h"
6
[email protected]7585f4c2013-01-10 18:26:417#include "ash/magnifier/magnifier_constants.h"
[email protected]20d2a79d2012-03-16 23:01:028#include "base/chromeos/chromeos_version.h"
[email protected]775caec2011-09-01 17:14:329#include "base/command_line.h"
[email protected]530cd622011-04-14 15:45:0010#include "base/i18n/time_formatting.h"
[email protected]d7ca1ba2011-05-09 20:09:0811#include "base/metrics/histogram.h"
[email protected]1ab137b2013-03-21 03:33:1812#include "base/prefs/pref_member.h"
[email protected]681958c2013-02-21 13:48:1413#include "base/prefs/pref_registry_simple.h"
[email protected]de1528d1a2012-05-14 10:36:1514#include "base/string_util.h"
[email protected]1988e1c2013-02-28 20:27:4215#include "base/strings/string_split.h"
[email protected]50951432010-03-31 12:12:4216#include "base/utf_string_conversions.h"
[email protected]c0a2128d92011-07-20 15:04:4617#include "chrome/browser/browser_process.h"
[email protected]7585f4c2013-01-10 18:26:4118#include "chrome/browser/chromeos/accessibility/magnification_manager.h"
[email protected]4fa2fd5d2013-04-26 03:42:5219#include "chrome/browser/chromeos/drive/file_system_util.h"
[email protected]c02a4242012-12-11 18:36:3220#include "chrome/browser/chromeos/input_method/input_method_configuration.h"
[email protected]9199bd52010-07-01 05:04:4121#include "chrome/browser/chromeos/input_method/input_method_util.h"
[email protected]26012e22010-12-01 06:44:2722#include "chrome/browser/chromeos/login/login_utils.h"
[email protected]022c3b92012-09-13 19:45:5923#include "chrome/browser/chromeos/login/user_manager.h"
[email protected]82eb8ec2011-12-20 22:24:3324#include "chrome/browser/chromeos/system/input_device_settings.h"
[email protected]de1528d1a2012-05-14 10:36:1525#include "chrome/browser/chromeos/system/statistics_provider.h"
[email protected]155e1b42012-07-14 03:06:0126#include "chrome/browser/download/download_util.h"
[email protected]c753f142013-02-10 13:14:0427#include "chrome/browser/prefs/pref_service_syncable.h"
[email protected]b3362572011-08-17 09:28:5028#include "chrome/browser/prefs/scoped_user_pref_update.h"
[email protected]432115822011-07-10 15:52:2729#include "chrome/common/chrome_notification_types.h"
[email protected]775caec2011-09-01 17:14:3230#include "chrome/common/chrome_switches.h"
[email protected]fecc1522009-10-15 21:08:2931#include "chrome/common/pref_names.h"
[email protected]931d1042013-04-05 17:50:4432#include "chromeos/chromeos_switches.h"
[email protected]3a229f42013-02-07 03:09:2633#include "chromeos/dbus/dbus_thread_manager.h"
34#include "chromeos/dbus/power_policy_controller.h"
[email protected]60049c02013-04-26 07:52:3635#include "chromeos/ime/input_method_manager.h"
[email protected]da5cb802013-03-30 18:58:1636#include "chromeos/ime/xkeyboard.h"
[email protected]75fee372013-03-06 00:42:4437#include "components/user_prefs/pref_registry_syncable.h"
[email protected]6f96cbcb2011-11-04 02:26:0738#include "googleurl/src/gurl.h"
[email protected]c297d3a2013-01-07 22:33:4739#include "third_party/icu/public/i18n/unicode/timezone.h"
[email protected]153472d72012-09-04 21:33:0240#include "ui/base/events/event_constants.h"
[email protected]e4cc4832012-11-05 17:33:1441#include "ui/base/events/event_utils.h"
[email protected]fecc1522009-10-15 21:08:2942
[email protected]de1528d1a2012-05-14 10:36:1543namespace chromeos {
[email protected]fecc1522009-10-15 21:08:2944
[email protected]9199bd52010-07-01 05:04:4145static const char kFallbackInputMethodLocale[] = "en-US";
[email protected]4793c942010-09-21 23:17:1746
[email protected]2c62b3f2012-04-12 12:07:5047Preferences::Preferences()
[email protected]155e1b42012-07-14 03:06:0148 : prefs_(NULL),
[email protected]c02a4242012-12-11 18:36:3249 input_method_manager_(input_method::GetInputMethodManager()) {
[email protected]2c62b3f2012-04-12 12:07:5050}
51
52Preferences::Preferences(input_method::InputMethodManager* input_method_manager)
53 : input_method_manager_(input_method_manager) {
54}
[email protected]d743a5982010-11-08 17:54:0955
[email protected]7f914fd2012-12-20 23:55:2556Preferences::~Preferences() {
57 prefs_->RemoveObserver(this);
58}
[email protected]9199bd52010-07-01 05:04:4159
[email protected]fecc1522009-10-15 21:08:2960// static
[email protected]681958c2013-02-21 13:48:1461void Preferences::RegisterPrefs(PrefRegistrySimple* registry) {
62 registry->RegisterBooleanPref(prefs::kHighContrastEnabled, false);
63 registry->RegisterBooleanPref(prefs::kOwnerPrimaryMouseButtonRight, false);
64 registry->RegisterBooleanPref(prefs::kOwnerTapToClickEnabled, true);
65 registry->RegisterBooleanPref(prefs::kSpokenFeedbackEnabled, false);
66 registry->RegisterBooleanPref(prefs::kVirtualKeyboardEnabled, false);
67}
68
69// static
70void Preferences::RegisterUserPrefs(PrefRegistrySyncable* registry) {
[email protected]2c62b3f2012-04-12 12:07:5071 std::string hardware_keyboard_id;
72 // TODO(yusukes): Remove the runtime hack.
73 if (base::chromeos::IsRunningOnChromeOS()) {
74 input_method::InputMethodManager* manager =
[email protected]c02a4242012-12-11 18:36:3275 input_method::GetInputMethodManager();
[email protected]1e019ea2012-08-09 00:54:0476 if (manager) {
77 hardware_keyboard_id =
78 manager->GetInputMethodUtil()->GetHardwareInputMethodId();
79 }
[email protected]2c62b3f2012-04-12 12:07:5080 } else {
81 hardware_keyboard_id = "xkb:us::eng"; // only for testing.
82 }
[email protected]a9a81812011-09-16 11:01:1783
[email protected]c753f142013-02-10 13:14:0484 registry->RegisterBooleanPref(prefs::kTapToClickEnabled,
85 true,
86 PrefRegistrySyncable::SYNCABLE_PREF);
87 registry->RegisterBooleanPref(prefs::kTapDraggingEnabled,
88 false,
89 PrefRegistrySyncable::SYNCABLE_PREF);
90 registry->RegisterBooleanPref(prefs::kEnableTouchpadThreeFingerClick,
91 false,
92 PrefRegistrySyncable::UNSYNCABLE_PREF);
93 registry->RegisterBooleanPref(prefs::kEnableTouchpadThreeFingerSwipe,
94 false,
95 PrefRegistrySyncable::UNSYNCABLE_PREF);
96 registry->RegisterBooleanPref(
[email protected]61008732012-11-27 10:36:0597 prefs::kNaturalScroll,
98 CommandLine::ForCurrentProcess()->HasSwitch(
[email protected]931d1042013-04-05 17:50:4499 ::switches::kNaturalScrollDefault),
[email protected]c753f142013-02-10 13:14:04100 PrefRegistrySyncable::SYNCABLE_PREF);
101 registry->RegisterBooleanPref(prefs::kPrimaryMouseButtonRight,
102 false,
103 PrefRegistrySyncable::SYNCABLE_PREF);
104 registry->RegisterBooleanPref(prefs::kLabsMediaplayerEnabled,
105 false,
106 PrefRegistrySyncable::UNSYNCABLE_PREF);
107 registry->RegisterBooleanPref(prefs::kLabsAdvancedFilesystemEnabled,
108 false,
109 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]c753f142013-02-10 13:14:04110 registry->RegisterBooleanPref(prefs::kScreenMagnifierEnabled,
111 false,
112 PrefRegistrySyncable::SYNCABLE_PREF);
113 registry->RegisterIntegerPref(prefs::kScreenMagnifierType,
114 ash::kDefaultMagnifierType,
115 PrefRegistrySyncable::SYNCABLE_PREF);
116 registry->RegisterDoublePref(prefs::kScreenMagnifierScale,
117 std::numeric_limits<double>::min(),
118 PrefRegistrySyncable::UNSYNCABLE_PREF);
119 registry->RegisterBooleanPref(prefs::kShouldAlwaysShowAccessibilityMenu,
120 false,
121 PrefRegistrySyncable::UNSYNCABLE_PREF);
122 registry->RegisterIntegerPref(prefs::kMouseSensitivity,
123 3,
124 PrefRegistrySyncable::SYNCABLE_PREF);
125 registry->RegisterIntegerPref(prefs::kTouchpadSensitivity,
126 3,
127 PrefRegistrySyncable::SYNCABLE_PREF);
128 registry->RegisterBooleanPref(prefs::kUse24HourClock,
129 base::GetHourClockType() == base::k24HourClock,
130 PrefRegistrySyncable::SYNCABLE_PREF);
131 registry->RegisterBooleanPref(prefs::kDisableDrive,
132 false,
133 PrefRegistrySyncable::SYNCABLE_PREF);
134 registry->RegisterBooleanPref(prefs::kDisableDriveOverCellular,
135 true,
136 PrefRegistrySyncable::SYNCABLE_PREF);
137 registry->RegisterBooleanPref(prefs::kDisableDriveHostedFiles,
138 false,
139 PrefRegistrySyncable::SYNCABLE_PREF);
[email protected]aa96e372011-05-16 06:23:10140 // We don't sync prefs::kLanguageCurrentInputMethod and PreviousInputMethod
141 // because they're just used to track the logout state of the device.
[email protected]c753f142013-02-10 13:14:04142 registry->RegisterStringPref(prefs::kLanguageCurrentInputMethod,
143 "",
144 PrefRegistrySyncable::UNSYNCABLE_PREF);
145 registry->RegisterStringPref(prefs::kLanguagePreviousInputMethod,
[email protected]d36f941b2011-05-09 06:19:16146 "",
[email protected]c753f142013-02-10 13:14:04147 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]aa96e372011-05-16 06:23:10148 // We don't sync the list of input methods and preferred languages since a
149 // user might use two or more devices with different hardware keyboards.
150 // crosbug.com/15181
[email protected]c753f142013-02-10 13:14:04151 registry->RegisterStringPref(prefs::kLanguagePreferredLanguages,
152 kFallbackInputMethodLocale,
153 PrefRegistrySyncable::UNSYNCABLE_PREF);
154 registry->RegisterStringPref(prefs::kLanguagePreloadEngines,
155 hardware_keyboard_id,
156 PrefRegistrySyncable::UNSYNCABLE_PREF);
157 registry->RegisterStringPref(prefs::kLanguageFilteredExtensionImes,
158 "",
159 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]b65c5d22010-08-20 02:50:23160 for (size_t i = 0; i < language_prefs::kNumChewingBooleanPrefs; ++i) {
[email protected]c753f142013-02-10 13:14:04161 registry->RegisterBooleanPref(
[email protected]b65c5d22010-08-20 02:50:23162 language_prefs::kChewingBooleanPrefs[i].pref_name,
[email protected]d36f941b2011-05-09 06:19:16163 language_prefs::kChewingBooleanPrefs[i].default_pref_value,
[email protected]da9858f2012-04-09 14:50:03164 language_prefs::kChewingBooleanPrefs[i].sync_status);
[email protected]525dbe22010-06-01 07:05:43165 }
[email protected]b65c5d22010-08-20 02:50:23166 for (size_t i = 0; i < language_prefs::kNumChewingMultipleChoicePrefs; ++i) {
[email protected]c753f142013-02-10 13:14:04167 registry->RegisterStringPref(
[email protected]b65c5d22010-08-20 02:50:23168 language_prefs::kChewingMultipleChoicePrefs[i].pref_name,
[email protected]d36f941b2011-05-09 06:19:16169 language_prefs::kChewingMultipleChoicePrefs[i].default_pref_value,
[email protected]da9858f2012-04-09 14:50:03170 language_prefs::kChewingMultipleChoicePrefs[i].sync_status);
[email protected]525dbe22010-06-01 07:05:43171 }
[email protected]c753f142013-02-10 13:14:04172 registry->RegisterIntegerPref(
[email protected]b65c5d22010-08-20 02:50:23173 language_prefs::kChewingHsuSelKeyType.pref_name,
[email protected]d36f941b2011-05-09 06:19:16174 language_prefs::kChewingHsuSelKeyType.default_pref_value,
[email protected]da9858f2012-04-09 14:50:03175 language_prefs::kChewingHsuSelKeyType.sync_status);
[email protected]7ac5af92010-06-07 01:25:44176
[email protected]b65c5d22010-08-20 02:50:23177 for (size_t i = 0; i < language_prefs::kNumChewingIntegerPrefs; ++i) {
[email protected]c753f142013-02-10 13:14:04178 registry->RegisterIntegerPref(
[email protected]b65c5d22010-08-20 02:50:23179 language_prefs::kChewingIntegerPrefs[i].pref_name,
[email protected]d36f941b2011-05-09 06:19:16180 language_prefs::kChewingIntegerPrefs[i].default_pref_value,
[email protected]da9858f2012-04-09 14:50:03181 language_prefs::kChewingIntegerPrefs[i].sync_status);
[email protected]15c53082010-06-03 03:28:21182 }
[email protected]c753f142013-02-10 13:14:04183 registry->RegisterStringPref(
[email protected]20ce516d2010-06-18 02:20:04184 prefs::kLanguageHangulKeyboard,
[email protected]d36f941b2011-05-09 06:19:16185 language_prefs::kHangulKeyboardNameIDPairs[0].keyboard_id,
[email protected]c753f142013-02-10 13:14:04186 PrefRegistrySyncable::SYNCABLE_PREF);
187 registry->RegisterStringPref(
188 prefs::kLanguageHangulHanjaBindingKeys,
189 language_prefs::kHangulHanjaBindingKeys,
190 // Don't sync the pref as it's not user-configurable
191 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]b65c5d22010-08-20 02:50:23192 for (size_t i = 0; i < language_prefs::kNumPinyinBooleanPrefs; ++i) {
[email protected]c753f142013-02-10 13:14:04193 registry->RegisterBooleanPref(
[email protected]b65c5d22010-08-20 02:50:23194 language_prefs::kPinyinBooleanPrefs[i].pref_name,
[email protected]d36f941b2011-05-09 06:19:16195 language_prefs::kPinyinBooleanPrefs[i].default_pref_value,
[email protected]203bec62011-05-16 06:17:51196 language_prefs::kPinyinBooleanPrefs[i].sync_status);
[email protected]9040ad22010-04-22 04:29:28197 }
[email protected]b65c5d22010-08-20 02:50:23198 for (size_t i = 0; i < language_prefs::kNumPinyinIntegerPrefs; ++i) {
[email protected]c753f142013-02-10 13:14:04199 registry->RegisterIntegerPref(
[email protected]b65c5d22010-08-20 02:50:23200 language_prefs::kPinyinIntegerPrefs[i].pref_name,
[email protected]d36f941b2011-05-09 06:19:16201 language_prefs::kPinyinIntegerPrefs[i].default_pref_value,
[email protected]203bec62011-05-16 06:17:51202 language_prefs::kPinyinIntegerPrefs[i].sync_status);
[email protected]6e5c4b82010-05-24 08:18:44203 }
[email protected]c753f142013-02-10 13:14:04204 registry->RegisterIntegerPref(
[email protected]b65c5d22010-08-20 02:50:23205 language_prefs::kPinyinDoublePinyinSchema.pref_name,
[email protected]d36f941b2011-05-09 06:19:16206 language_prefs::kPinyinDoublePinyinSchema.default_pref_value,
[email protected]c753f142013-02-10 13:14:04207 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]7ac5af92010-06-07 01:25:44208
[email protected]b65c5d22010-08-20 02:50:23209 for (size_t i = 0; i < language_prefs::kNumMozcBooleanPrefs; ++i) {
[email protected]c753f142013-02-10 13:14:04210 registry->RegisterBooleanPref(
[email protected]b65c5d22010-08-20 02:50:23211 language_prefs::kMozcBooleanPrefs[i].pref_name,
[email protected]d36f941b2011-05-09 06:19:16212 language_prefs::kMozcBooleanPrefs[i].default_pref_value,
[email protected]203bec62011-05-16 06:17:51213 language_prefs::kMozcBooleanPrefs[i].sync_status);
[email protected]8a1ace22010-06-10 05:38:25214 }
[email protected]b65c5d22010-08-20 02:50:23215 for (size_t i = 0; i < language_prefs::kNumMozcMultipleChoicePrefs; ++i) {
[email protected]c753f142013-02-10 13:14:04216 registry->RegisterStringPref(
[email protected]b65c5d22010-08-20 02:50:23217 language_prefs::kMozcMultipleChoicePrefs[i].pref_name,
[email protected]d36f941b2011-05-09 06:19:16218 language_prefs::kMozcMultipleChoicePrefs[i].default_pref_value,
[email protected]203bec62011-05-16 06:17:51219 language_prefs::kMozcMultipleChoicePrefs[i].sync_status);
[email protected]9040ad22010-04-22 04:29:28220 }
[email protected]b65c5d22010-08-20 02:50:23221 for (size_t i = 0; i < language_prefs::kNumMozcIntegerPrefs; ++i) {
[email protected]c753f142013-02-10 13:14:04222 registry->RegisterIntegerPref(
[email protected]b65c5d22010-08-20 02:50:23223 language_prefs::kMozcIntegerPrefs[i].pref_name,
[email protected]d36f941b2011-05-09 06:19:16224 language_prefs::kMozcIntegerPrefs[i].default_pref_value,
[email protected]203bec62011-05-16 06:17:51225 language_prefs::kMozcIntegerPrefs[i].sync_status);
[email protected]54037462010-06-22 02:06:23226 }
[email protected]c753f142013-02-10 13:14:04227 registry->RegisterIntegerPref(prefs::kLanguageRemapSearchKeyTo,
228 input_method::kSearchKey,
229 PrefRegistrySyncable::SYNCABLE_PREF);
230 registry->RegisterIntegerPref(prefs::kLanguageRemapControlKeyTo,
231 input_method::kControlKey,
232 PrefRegistrySyncable::SYNCABLE_PREF);
233 registry->RegisterIntegerPref(prefs::kLanguageRemapAltKeyTo,
234 input_method::kAltKey,
235 PrefRegistrySyncable::SYNCABLE_PREF);
236 registry->RegisterIntegerPref(prefs::kLanguageRemapCapsLockKeyTo,
237 input_method::kCapsLockKey,
238 PrefRegistrySyncable::SYNCABLE_PREF);
239 registry->RegisterIntegerPref(prefs::kLanguageRemapDiamondKeyTo,
240 input_method::kControlKey,
241 PrefRegistrySyncable::SYNCABLE_PREF);
[email protected]aa96e372011-05-16 06:23:10242 // We don't sync the following keyboard prefs since they are not user-
243 // configurable.
[email protected]c753f142013-02-10 13:14:04244 registry->RegisterBooleanPref(prefs::kLanguageXkbAutoRepeatEnabled,
245 true,
246 PrefRegistrySyncable::UNSYNCABLE_PREF);
247 registry->RegisterIntegerPref(prefs::kLanguageXkbAutoRepeatDelay,
248 language_prefs::kXkbAutoRepeatDelayInMs,
249 PrefRegistrySyncable::UNSYNCABLE_PREF);
250 registry->RegisterIntegerPref(prefs::kLanguageXkbAutoRepeatInterval,
251 language_prefs::kXkbAutoRepeatIntervalInMs,
252 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]4ccc05e2010-10-06 19:32:15253
254 // Screen lock default to off.
[email protected]c753f142013-02-10 13:14:04255 registry->RegisterBooleanPref(prefs::kEnableScreenLock,
256 false,
257 PrefRegistrySyncable::SYNCABLE_PREF);
[email protected]ea1eba52010-11-23 18:05:38258
259 // Mobile plan notifications default to on.
[email protected]c753f142013-02-10 13:14:04260 registry->RegisterBooleanPref(prefs::kShowPlanNotifications,
261 true,
262 PrefRegistrySyncable::SYNCABLE_PREF);
[email protected]c74fffa2011-04-27 13:32:24263
264 // 3G first-time usage promo will be shown at least once.
[email protected]c753f142013-02-10 13:14:04265 registry->RegisterBooleanPref(prefs::kShow3gPromoNotification,
266 true,
267 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]d6ae9502011-05-05 18:23:09268
[email protected]efb770c2012-05-04 22:31:48269 // Initially all existing users would see "What's new"
270 // for current version after update.
[email protected]c753f142013-02-10 13:14:04271 registry->RegisterStringPref(prefs::kChromeOSReleaseNotesVersion,
272 "0.0.0.0",
273 PrefRegistrySyncable::SYNCABLE_PREF);
[email protected]efb770c2012-05-04 22:31:48274
[email protected]c753f142013-02-10 13:14:04275 registry->RegisterBooleanPref(prefs::kExternalStorageDisabled,
276 false,
277 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]3a229f42013-02-07 03:09:26278
[email protected]c753f142013-02-10 13:14:04279 registry->RegisterIntegerPref(prefs::kPowerAcScreenDimDelayMs,
280 420000,
281 PrefRegistrySyncable::UNSYNCABLE_PREF);
282 registry->RegisterIntegerPref(prefs::kPowerAcScreenOffDelayMs,
283 480000,
284 PrefRegistrySyncable::UNSYNCABLE_PREF);
285 registry->RegisterIntegerPref(prefs::kPowerAcScreenLockDelayMs,
[email protected]ac7fe1b2013-04-20 03:57:44286 0,
[email protected]c753f142013-02-10 13:14:04287 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]c9b340b2013-03-20 21:01:13288 registry->RegisterIntegerPref(prefs::kPowerAcIdleWarningDelayMs,
289 0,
290 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]c753f142013-02-10 13:14:04291 registry->RegisterIntegerPref(prefs::kPowerAcIdleDelayMs,
292 1800000,
293 PrefRegistrySyncable::UNSYNCABLE_PREF);
294 registry->RegisterIntegerPref(prefs::kPowerBatteryScreenDimDelayMs,
295 300000,
296 PrefRegistrySyncable::UNSYNCABLE_PREF);
297 registry->RegisterIntegerPref(prefs::kPowerBatteryScreenOffDelayMs,
298 360000,
299 PrefRegistrySyncable::UNSYNCABLE_PREF);
300 registry->RegisterIntegerPref(prefs::kPowerBatteryScreenLockDelayMs,
[email protected]ac7fe1b2013-04-20 03:57:44301 0,
[email protected]c753f142013-02-10 13:14:04302 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]c9b340b2013-03-20 21:01:13303 registry->RegisterIntegerPref(prefs::kPowerBatteryIdleWarningDelayMs,
304 0,
305 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]c753f142013-02-10 13:14:04306 registry->RegisterIntegerPref(prefs::kPowerBatteryIdleDelayMs,
307 600000,
308 PrefRegistrySyncable::UNSYNCABLE_PREF);
309 registry->RegisterIntegerPref(prefs::kPowerIdleAction,
[email protected]ac7fe1b2013-04-20 03:57:44310 PowerPolicyController::ACTION_SUSPEND,
[email protected]c753f142013-02-10 13:14:04311 PrefRegistrySyncable::UNSYNCABLE_PREF);
312 registry->RegisterIntegerPref(prefs::kPowerLidClosedAction,
[email protected]ac7fe1b2013-04-20 03:57:44313 PowerPolicyController::ACTION_SUSPEND,
[email protected]c753f142013-02-10 13:14:04314 PrefRegistrySyncable::UNSYNCABLE_PREF);
315 registry->RegisterBooleanPref(prefs::kPowerUseAudioActivity,
316 true,
317 PrefRegistrySyncable::UNSYNCABLE_PREF);
318 registry->RegisterBooleanPref(prefs::kPowerUseVideoActivity,
319 true,
320 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]ceaf3a12013-04-30 18:21:31321 registry->RegisterBooleanPref(prefs::kPowerAllowScreenWakeLocks,
322 true,
323 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]c753f142013-02-10 13:14:04324 registry->RegisterDoublePref(prefs::kPowerPresentationIdleDelayFactor,
325 2.0,
326 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]954015b2013-04-26 07:42:08327 // TODO(derat): Change the default to 2.0 once a policy is added such
328 // that this can be set to 1.0 for public accounts.
329 registry->RegisterDoublePref(prefs::kPowerUserActivityScreenDimDelayFactor,
330 1.0,
331 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]73bd1db12013-02-10 21:51:00332
333 registry->RegisterStringPref(prefs::kTermsOfServiceURL,
334 "",
335 PrefRegistrySyncable::UNSYNCABLE_PREF);
[email protected]fecc1522009-10-15 21:08:29336}
337
[email protected]5b199522012-12-22 17:24:44338void Preferences::InitUserPrefs(PrefServiceSyncable* prefs) {
[email protected]155e1b42012-07-14 03:06:01339 prefs_ = prefs;
340
[email protected]e7bff3e2012-11-14 15:34:44341 BooleanPrefMember::NamedChangeCallback callback =
342 base::Bind(&Preferences::OnPreferenceChanged, base::Unretained(this));
343
344 tap_to_click_enabled_.Init(prefs::kTapToClickEnabled, prefs, callback);
345 tap_dragging_enabled_.Init(prefs::kTapDraggingEnabled, prefs, callback);
[email protected]190349fd2012-05-02 00:10:47346 three_finger_click_enabled_.Init(prefs::kEnableTouchpadThreeFingerClick,
[email protected]e7bff3e2012-11-14 15:34:44347 prefs, callback);
[email protected]fbc176b62012-10-27 02:19:58348 three_finger_swipe_enabled_.Init(prefs::kEnableTouchpadThreeFingerSwipe,
[email protected]e7bff3e2012-11-14 15:34:44349 prefs, callback);
350 natural_scroll_.Init(prefs::kNaturalScroll, prefs, callback);
[email protected]a53804ba2012-12-17 12:07:42351 screen_magnifier_enabled_.Init(prefs::kScreenMagnifierEnabled,
352 prefs, callback);
[email protected]7585f4c2013-01-10 18:26:41353 screen_magnifier_type_.Init(prefs::kScreenMagnifierType, prefs, callback);
[email protected]ea2110d2012-11-26 19:20:24354 screen_magnifier_scale_.Init(prefs::kScreenMagnifierScale, prefs, callback);
[email protected]e7bff3e2012-11-14 15:34:44355 mouse_sensitivity_.Init(prefs::kMouseSensitivity, prefs, callback);
356 touchpad_sensitivity_.Init(prefs::kTouchpadSensitivity, prefs, callback);
357 use_24hour_clock_.Init(prefs::kUse24HourClock, prefs, callback);
358 disable_drive_.Init(prefs::kDisableDrive, prefs, callback);
[email protected]e1619ee02012-10-22 08:14:49359 disable_drive_over_cellular_.Init(prefs::kDisableDriveOverCellular,
[email protected]7585f4c2013-01-10 18:26:41360 prefs, callback);
[email protected]e1619ee02012-10-22 08:14:49361 disable_drive_hosted_files_.Init(prefs::kDisableDriveHostedFiles,
[email protected]e7bff3e2012-11-14 15:34:44362 prefs, callback);
[email protected]78a6b642012-09-12 02:07:03363 download_default_directory_.Init(prefs::kDownloadDefaultDirectory,
[email protected]e7bff3e2012-11-14 15:34:44364 prefs, callback);
[email protected]1746ac922013-04-10 04:53:24365 select_file_last_directory_.Init(prefs::kSelectFileLastDirectory,
366 prefs, callback);
[email protected]57229d12013-04-18 07:13:15367 save_file_default_directory_.Init(prefs::kSaveFileDefaultDirectory,
368 prefs, callback);
[email protected]0027fde12011-12-15 05:09:38369 primary_mouse_button_right_.Init(prefs::kPrimaryMouseButtonRight,
[email protected]e7bff3e2012-11-14 15:34:44370 prefs, callback);
[email protected]c67a30932012-03-14 05:23:00371 preferred_languages_.Init(prefs::kLanguagePreferredLanguages,
[email protected]e7bff3e2012-11-14 15:34:44372 prefs, callback);
373 preload_engines_.Init(prefs::kLanguagePreloadEngines, prefs, callback);
[email protected]797c6802012-09-20 10:36:13374 filtered_extension_imes_.Init(prefs::kLanguageFilteredExtensionImes,
[email protected]e7bff3e2012-11-14 15:34:44375 prefs, callback);
376 current_input_method_.Init(prefs::kLanguageCurrentInputMethod,
377 prefs, callback);
378 previous_input_method_.Init(prefs::kLanguagePreviousInputMethod,
379 prefs, callback);
[email protected]22bec1a2012-03-27 06:33:48380
[email protected]b65c5d22010-08-20 02:50:23381 for (size_t i = 0; i < language_prefs::kNumChewingBooleanPrefs; ++i) {
[email protected]c67a30932012-03-14 05:23:00382 chewing_boolean_prefs_[i].Init(
[email protected]e7bff3e2012-11-14 15:34:44383 language_prefs::kChewingBooleanPrefs[i].pref_name, prefs, callback);
[email protected]525dbe22010-06-01 07:05:43384 }
[email protected]b65c5d22010-08-20 02:50:23385 for (size_t i = 0; i < language_prefs::kNumChewingMultipleChoicePrefs; ++i) {
[email protected]c67a30932012-03-14 05:23:00386 chewing_multiple_choice_prefs_[i].Init(
[email protected]e7bff3e2012-11-14 15:34:44387 language_prefs::kChewingMultipleChoicePrefs[i].pref_name,
388 prefs, callback);
[email protected]525dbe22010-06-01 07:05:43389 }
[email protected]c67a30932012-03-14 05:23:00390 chewing_hsu_sel_key_type_.Init(
[email protected]e7bff3e2012-11-14 15:34:44391 language_prefs::kChewingHsuSelKeyType.pref_name, prefs, callback);
[email protected]b65c5d22010-08-20 02:50:23392 for (size_t i = 0; i < language_prefs::kNumChewingIntegerPrefs; ++i) {
[email protected]c67a30932012-03-14 05:23:00393 chewing_integer_prefs_[i].Init(
[email protected]e7bff3e2012-11-14 15:34:44394 language_prefs::kChewingIntegerPrefs[i].pref_name, prefs, callback);
[email protected]15c53082010-06-03 03:28:21395 }
[email protected]e7bff3e2012-11-14 15:34:44396 hangul_keyboard_.Init(prefs::kLanguageHangulKeyboard, prefs, callback);
[email protected]c67a30932012-03-14 05:23:00397 hangul_hanja_binding_keys_.Init(
[email protected]e7bff3e2012-11-14 15:34:44398 prefs::kLanguageHangulHanjaBindingKeys, prefs, callback);
[email protected]b65c5d22010-08-20 02:50:23399 for (size_t i = 0; i < language_prefs::kNumPinyinBooleanPrefs; ++i) {
[email protected]c67a30932012-03-14 05:23:00400 pinyin_boolean_prefs_[i].Init(
[email protected]e7bff3e2012-11-14 15:34:44401 language_prefs::kPinyinBooleanPrefs[i].pref_name, prefs, callback);
[email protected]9040ad22010-04-22 04:29:28402 }
[email protected]b65c5d22010-08-20 02:50:23403 for (size_t i = 0; i < language_prefs::kNumPinyinIntegerPrefs; ++i) {
[email protected]c67a30932012-03-14 05:23:00404 pinyin_int_prefs_[i].Init(
[email protected]e7bff3e2012-11-14 15:34:44405 language_prefs::kPinyinIntegerPrefs[i].pref_name, prefs, callback);
[email protected]9040ad22010-04-22 04:29:28406 }
[email protected]c67a30932012-03-14 05:23:00407 pinyin_double_pinyin_schema_.Init(
[email protected]e7bff3e2012-11-14 15:34:44408 language_prefs::kPinyinDoublePinyinSchema.pref_name, prefs, callback);
[email protected]b65c5d22010-08-20 02:50:23409 for (size_t i = 0; i < language_prefs::kNumMozcBooleanPrefs; ++i) {
[email protected]c67a30932012-03-14 05:23:00410 mozc_boolean_prefs_[i].Init(
[email protected]e7bff3e2012-11-14 15:34:44411 language_prefs::kMozcBooleanPrefs[i].pref_name, prefs, callback);
[email protected]8a1ace22010-06-10 05:38:25412 }
[email protected]b65c5d22010-08-20 02:50:23413 for (size_t i = 0; i < language_prefs::kNumMozcMultipleChoicePrefs; ++i) {
[email protected]c67a30932012-03-14 05:23:00414 mozc_multiple_choice_prefs_[i].Init(
[email protected]e7bff3e2012-11-14 15:34:44415 language_prefs::kMozcMultipleChoicePrefs[i].pref_name, prefs, callback);
[email protected]6e5c4b82010-05-24 08:18:44416 }
[email protected]b65c5d22010-08-20 02:50:23417 for (size_t i = 0; i < language_prefs::kNumMozcIntegerPrefs; ++i) {
[email protected]c67a30932012-03-14 05:23:00418 mozc_integer_prefs_[i].Init(
[email protected]e7bff3e2012-11-14 15:34:44419 language_prefs::kMozcIntegerPrefs[i].pref_name, prefs, callback);
[email protected]54037462010-06-22 02:06:23420 }
[email protected]c67a30932012-03-14 05:23:00421 xkb_auto_repeat_enabled_.Init(
[email protected]e7bff3e2012-11-14 15:34:44422 prefs::kLanguageXkbAutoRepeatEnabled, prefs, callback);
[email protected]c67a30932012-03-14 05:23:00423 xkb_auto_repeat_delay_pref_.Init(
[email protected]e7bff3e2012-11-14 15:34:44424 prefs::kLanguageXkbAutoRepeatDelay, prefs, callback);
[email protected]c67a30932012-03-14 05:23:00425 xkb_auto_repeat_interval_pref_.Init(
[email protected]e7bff3e2012-11-14 15:34:44426 prefs::kLanguageXkbAutoRepeatInterval, prefs, callback);
[email protected]fecc1522009-10-15 21:08:29427
[email protected]e7bff3e2012-11-14 15:34:44428 enable_screen_lock_.Init(prefs::kEnableScreenLock, prefs, callback);
[email protected]595a5ed2012-05-04 00:39:16429
[email protected]3a229f42013-02-07 03:09:26430 power_ac_screen_dim_delay_ms_.Init(
431 prefs::kPowerAcScreenDimDelayMs, prefs, callback);
432 power_ac_screen_off_delay_ms_.Init(
433 prefs::kPowerAcScreenOffDelayMs, prefs, callback);
434 power_ac_screen_lock_delay_ms_.Init(
435 prefs::kPowerAcScreenLockDelayMs, prefs, callback);
[email protected]c9b340b2013-03-20 21:01:13436 power_ac_idle_warning_delay_ms_.Init(
437 prefs::kPowerAcIdleWarningDelayMs, prefs, callback);
[email protected]3a229f42013-02-07 03:09:26438 power_ac_idle_delay_ms_.Init(prefs::kPowerAcIdleDelayMs, prefs, callback);
439 power_battery_screen_dim_delay_ms_.Init(
440 prefs::kPowerBatteryScreenDimDelayMs, prefs, callback);
441 power_battery_screen_off_delay_ms_.Init(
442 prefs::kPowerBatteryScreenOffDelayMs, prefs, callback);
443 power_battery_screen_lock_delay_ms_.Init(
444 prefs::kPowerBatteryScreenLockDelayMs, prefs, callback);
[email protected]c9b340b2013-03-20 21:01:13445 power_battery_idle_warning_delay_ms_.Init(
446 prefs::kPowerBatteryIdleWarningDelayMs, prefs, callback);
[email protected]3a229f42013-02-07 03:09:26447 power_battery_idle_delay_ms_.Init(
448 prefs::kPowerBatteryIdleDelayMs, prefs, callback);
449 power_idle_action_.Init(prefs::kPowerIdleAction, prefs, callback);
450 power_lid_closed_action_.Init(prefs::kPowerLidClosedAction, prefs, callback);
451 power_use_audio_activity_.Init(
452 prefs::kPowerUseAudioActivity, prefs, callback);
453 power_use_video_activity_.Init(
454 prefs::kPowerUseVideoActivity, prefs, callback);
[email protected]ceaf3a12013-04-30 18:21:31455 power_allow_screen_wake_locks_.Init(
456 prefs::kPowerAllowScreenWakeLocks, prefs, callback);
[email protected]3a229f42013-02-07 03:09:26457 power_presentation_idle_delay_factor_.Init(
458 prefs::kPowerPresentationIdleDelayFactor, prefs, callback);
[email protected]954015b2013-04-26 07:42:08459 power_user_activity_screen_dim_delay_factor_.Init(
460 prefs::kPowerUserActivityScreenDimDelayFactor, prefs, callback);
[email protected]2c62b3f2012-04-12 12:07:50461}
462
[email protected]5b199522012-12-22 17:24:44463void Preferences::Init(PrefServiceSyncable* prefs) {
[email protected]2c62b3f2012-04-12 12:07:50464 InitUserPrefs(prefs);
[email protected]4ccc05e2010-10-06 19:32:15465
[email protected]7f914fd2012-12-20 23:55:25466 // This causes OnIsSyncingChanged to be called when the value of
467 // PrefService::IsSyncing() changes.
468 prefs->AddObserver(this);
469
[email protected]d7ca1ba2011-05-09 20:09:08470 // Initialize preferences to currently saved state.
[email protected]fecc1522009-10-15 21:08:29471 NotifyPrefChanged(NULL);
[email protected]26012e22010-12-01 06:44:27472
473 // If a guest is logged in, initialize the prefs as if this is the first
474 // login.
475 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)) {
476 LoginUtils::Get()->SetFirstLoginPrefs(prefs);
477 }
[email protected]fecc1522009-10-15 21:08:29478}
479
[email protected]5b199522012-12-22 17:24:44480void Preferences::InitUserPrefsForTesting(PrefServiceSyncable* prefs) {
[email protected]2c62b3f2012-04-12 12:07:50481 InitUserPrefs(prefs);
482}
483
484void Preferences::SetInputMethodListForTesting() {
485 SetInputMethodList();
486}
487
[email protected]e7bff3e2012-11-14 15:34:44488void Preferences::OnPreferenceChanged(const std::string& pref_name) {
[email protected]a6a7ced2012-11-01 17:24:18489 NotifyPrefChanged(&pref_name);
[email protected]fecc1522009-10-15 21:08:29490}
491
[email protected]57ecc4b2010-08-11 03:02:51492void Preferences::NotifyPrefChanged(const std::string* pref_name) {
[email protected]3b02de292010-05-13 06:05:05493 if (!pref_name || *pref_name == prefs::kTapToClickEnabled) {
[email protected]b685fbd2012-03-24 09:23:04494 const bool enabled = tap_to_click_enabled_.GetValue();
[email protected]1cbfb3b2011-07-11 23:34:08495 system::touchpad_settings::SetTapToClick(enabled);
[email protected]d7ca1ba2011-05-09 20:09:08496 if (pref_name)
497 UMA_HISTOGRAM_BOOLEAN("Touchpad.TapToClick.Changed", enabled);
498 else
499 UMA_HISTOGRAM_BOOLEAN("Touchpad.TapToClick.Started", enabled);
[email protected]022c3b92012-09-13 19:45:59500
501 // Save owner preference in local state to use on login screen.
502 if (chromeos::UserManager::Get()->IsCurrentUserOwner()) {
503 PrefService* prefs = g_browser_process->local_state();
504 if (prefs->GetBoolean(prefs::kOwnerTapToClickEnabled) != enabled)
505 prefs->SetBoolean(prefs::kOwnerTapToClickEnabled, enabled);
506 }
[email protected]3b02de292010-05-13 06:05:05507 }
[email protected]1b46af02012-10-31 05:23:54508 if (!pref_name || *pref_name == prefs::kTapDraggingEnabled) {
509 const bool enabled = tap_dragging_enabled_.GetValue();
510 system::touchpad_settings::SetTapDragging(enabled);
511 if (pref_name)
512 UMA_HISTOGRAM_BOOLEAN("Touchpad.TapDragging.Changed", enabled);
513 else
514 UMA_HISTOGRAM_BOOLEAN("Touchpad.TapDragging.Started", enabled);
515 }
[email protected]190349fd2012-05-02 00:10:47516 if (!pref_name || *pref_name == prefs::kEnableTouchpadThreeFingerClick) {
517 const bool enabled = three_finger_click_enabled_.GetValue();
518 system::touchpad_settings::SetThreeFingerClick(enabled);
519 if (pref_name)
520 UMA_HISTOGRAM_BOOLEAN("Touchpad.ThreeFingerClick.Changed", enabled);
521 else
522 UMA_HISTOGRAM_BOOLEAN("Touchpad.ThreeFingerClick.Started", enabled);
523 }
[email protected]fbc176b62012-10-27 02:19:58524 if (!pref_name || *pref_name == prefs::kEnableTouchpadThreeFingerSwipe) {
525 const bool enabled = three_finger_swipe_enabled_.GetValue();
526 system::touchpad_settings::SetThreeFingerSwipe(enabled);
527 if (pref_name)
528 UMA_HISTOGRAM_BOOLEAN("Touchpad.ThreeFingerSwipe.Changed", enabled);
529 else
530 UMA_HISTOGRAM_BOOLEAN("Touchpad.ThreeFingerSwipe.Started", enabled);
531 }
[email protected]b685fbd2012-03-24 09:23:04532 if (!pref_name || *pref_name == prefs::kNaturalScroll) {
[email protected]7f914fd2012-12-20 23:55:25533 // Force natural scroll default if we've sync'd and if the cmd line arg is
534 // set.
535 ForceNaturalScrollDefault();
[email protected]223059e2012-10-05 01:44:49536
[email protected]b685fbd2012-03-24 09:23:04537 const bool enabled = natural_scroll_.GetValue();
[email protected]223059e2012-10-05 01:44:49538 DVLOG(1) << "Natural scroll set to " << enabled;
[email protected]b685fbd2012-03-24 09:23:04539 ui::SetNaturalScroll(enabled);
540 if (pref_name)
541 UMA_HISTOGRAM_BOOLEAN("Touchpad.NaturalScroll.Changed", enabled);
542 else
543 UMA_HISTOGRAM_BOOLEAN("Touchpad.NaturalScroll.Started", enabled);
544 }
[email protected]563fb5f2012-03-31 00:39:28545 if (!pref_name || *pref_name == prefs::kMouseSensitivity) {
546 const int sensitivity = mouse_sensitivity_.GetValue();
547 system::mouse_settings::SetSensitivity(sensitivity);
548 if (pref_name) {
549 UMA_HISTOGRAM_CUSTOM_COUNTS(
550 "Mouse.Sensitivity.Changed", sensitivity, 1, 5, 5);
551 } else {
552 UMA_HISTOGRAM_CUSTOM_COUNTS(
553 "Mouse.Sensitivity.Started", sensitivity, 1, 5, 5);
554 }
555 }
[email protected]3b02de292010-05-13 06:05:05556 if (!pref_name || *pref_name == prefs::kTouchpadSensitivity) {
[email protected]563fb5f2012-03-31 00:39:28557 const int sensitivity = touchpad_sensitivity_.GetValue();
558 system::touchpad_settings::SetSensitivity(sensitivity);
[email protected]d7ca1ba2011-05-09 20:09:08559 if (pref_name) {
560 UMA_HISTOGRAM_CUSTOM_COUNTS(
561 "Touchpad.Sensitivity.Changed", sensitivity, 1, 5, 5);
562 } else {
563 UMA_HISTOGRAM_CUSTOM_COUNTS(
564 "Touchpad.Sensitivity.Started", sensitivity, 1, 5, 5);
565 }
[email protected]3b02de292010-05-13 06:05:05566 }
[email protected]0027fde12011-12-15 05:09:38567 if (!pref_name || *pref_name == prefs::kPrimaryMouseButtonRight) {
568 const bool right = primary_mouse_button_right_.GetValue();
569 system::mouse_settings::SetPrimaryButtonRight(right);
570 if (pref_name)
[email protected]6c8599e2012-01-20 04:31:58571 UMA_HISTOGRAM_BOOLEAN("Mouse.PrimaryButtonRight.Changed", right);
[email protected]0027fde12011-12-15 05:09:38572 else
[email protected]6c8599e2012-01-20 04:31:58573 UMA_HISTOGRAM_BOOLEAN("Mouse.PrimaryButtonRight.Started", right);
[email protected]022c3b92012-09-13 19:45:59574
575 // Save owner preference in local state to use on login screen.
576 if (chromeos::UserManager::Get()->IsCurrentUserOwner()) {
577 PrefService* prefs = g_browser_process->local_state();
578 if (prefs->GetBoolean(prefs::kOwnerPrimaryMouseButtonRight) != right)
579 prefs->SetBoolean(prefs::kOwnerPrimaryMouseButtonRight, right);
580 }
[email protected]0027fde12011-12-15 05:09:38581 }
[email protected]78a6b642012-09-12 02:07:03582 if (!pref_name || *pref_name == prefs::kDownloadDefaultDirectory) {
[email protected]68f0d2d2013-03-25 11:30:58583 const base::FilePath pref_path = download_default_directory_.GetValue();
[email protected]1746ac922013-04-10 04:53:24584 // TODO(haruki): Remove this when migration completes. crbug.com/229304.
[email protected]68f0d2d2013-03-25 11:30:58585 if (drive::util::NeedsNamespaceMigration(pref_path)) {
586 prefs_->SetFilePath(prefs::kDownloadDefaultDirectory,
587 drive::util::ConvertToMyDriveNamespace(pref_path));
588 }
589
[email protected]d9d04df2012-10-12 07:06:35590 const bool default_download_to_drive = drive::util::IsUnderDriveMountPoint(
[email protected]78a6b642012-09-12 02:07:03591 download_default_directory_.GetValue());
592 if (pref_name)
[email protected]e8307a12012-09-12 20:06:34593 UMA_HISTOGRAM_BOOLEAN(
594 "FileBrowser.DownloadDestination.IsGoogleDrive.Changed",
[email protected]78a6b642012-09-12 02:07:03595 default_download_to_drive);
596 else
[email protected]e8307a12012-09-12 20:06:34597 UMA_HISTOGRAM_BOOLEAN(
598 "FileBrowser.DownloadDestination.IsGoogleDrive.Started",
[email protected]78a6b642012-09-12 02:07:03599 default_download_to_drive);
600 }
[email protected]1746ac922013-04-10 04:53:24601 if (!pref_name || *pref_name == prefs::kSelectFileLastDirectory) {
602 const base::FilePath pref_path = select_file_last_directory_.GetValue();
603 // This pref can contain a Drive path, which needs to be updated due to
604 // namespaces introduced by crbug.com/174233.
605 // TODO(haruki): Remove this when migration completes. crbug.com/229304.
606 if (drive::util::NeedsNamespaceMigration(pref_path)) {
607 prefs_->SetFilePath(prefs::kSelectFileLastDirectory,
608 drive::util::ConvertToMyDriveNamespace(pref_path));
609 }
610 }
[email protected]57229d12013-04-18 07:13:15611 if (!pref_name || *pref_name == prefs::kSaveFileDefaultDirectory) {
612 const base::FilePath pref_path = save_file_default_directory_.GetValue();
613 // This pref can contain a Drive path, which needs to be updated due to
614 // namespaces introduced by crbug.com/174233.
615 // TODO(haruki): Remove this when migration completes. crbug.com/229304.
616 if (drive::util::NeedsNamespaceMigration(pref_path)) {
617 prefs_->SetFilePath(prefs::kSaveFileDefaultDirectory,
618 drive::util::ConvertToMyDriveNamespace(pref_path));
619 }
620 }
[email protected]8be9ff22010-06-08 02:13:54621
[email protected]74b42fc12010-07-20 10:15:41622 if (!pref_name || *pref_name == prefs::kLanguagePreferredLanguages) {
623 // Unlike kLanguagePreloadEngines and some other input method
624 // preferencs, we don't need to send this to ibus-daemon.
625 }
[email protected]a6e90772011-02-09 05:38:54626
[email protected]a6e90772011-02-09 05:38:54627 if (!pref_name || *pref_name == prefs::kLanguageXkbAutoRepeatEnabled) {
[email protected]c67a30932012-03-14 05:23:00628 const bool enabled = xkb_auto_repeat_enabled_.GetValue();
[email protected]cf61f6b0a2013-01-03 00:34:12629 input_method::XKeyboard::SetAutoRepeatEnabled(enabled);
[email protected]a6e90772011-02-09 05:38:54630 }
631 if (!pref_name || ((*pref_name == prefs::kLanguageXkbAutoRepeatDelay) ||
632 (*pref_name == prefs::kLanguageXkbAutoRepeatInterval))) {
633 UpdateAutoRepeatRate();
634 }
635
[email protected]2c62b3f2012-04-12 12:07:50636 if (!pref_name) {
637 SetInputMethodList();
638 } else if (*pref_name == prefs::kLanguagePreloadEngines) {
[email protected]7f132d02013-01-03 00:32:26639 SetLanguageConfigStringListAsCSV(language_prefs::kGeneralSectionName,
640 language_prefs::kPreloadEnginesConfigName,
[email protected]c67a30932012-03-14 05:23:00641 preload_engines_.GetValue());
[email protected]3b02de292010-05-13 06:05:05642 }
[email protected]22bec1a2012-03-27 06:33:48643
[email protected]797c6802012-09-20 10:36:13644 if (!pref_name || *pref_name == prefs::kLanguageFilteredExtensionImes) {
645 std::string value(filtered_extension_imes_.GetValue());
646
647 std::vector<std::string> split_values;
648 if (!value.empty())
649 base::SplitString(value, ',', &split_values);
650
651 input_method_manager_->SetFilteredExtensionImes(&split_values);
652 }
653
[email protected]2c62b3f2012-04-12 12:07:50654 // Do not check |*pref_name| of the prefs for remembering current/previous
655 // input methods here. We're only interested in initial values of the prefs.
[email protected]22bec1a2012-03-27 06:33:48656
[email protected]b65c5d22010-08-20 02:50:23657 for (size_t i = 0; i < language_prefs::kNumChewingBooleanPrefs; ++i) {
658 if (!pref_name ||
659 *pref_name == language_prefs::kChewingBooleanPrefs[i].pref_name) {
660 SetLanguageConfigBoolean(
[email protected]7f132d02013-01-03 00:32:26661 language_prefs::kChewingSectionName,
[email protected]b65c5d22010-08-20 02:50:23662 language_prefs::kChewingBooleanPrefs[i].ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00663 chewing_boolean_prefs_[i].GetValue());
[email protected]525dbe22010-06-01 07:05:43664 }
665 }
[email protected]b65c5d22010-08-20 02:50:23666 for (size_t i = 0; i < language_prefs::kNumChewingMultipleChoicePrefs; ++i) {
667 if (!pref_name ||
668 *pref_name ==
669 language_prefs::kChewingMultipleChoicePrefs[i].pref_name) {
[email protected]525dbe22010-06-01 07:05:43670 SetLanguageConfigString(
[email protected]7f132d02013-01-03 00:32:26671 language_prefs::kChewingSectionName,
[email protected]b65c5d22010-08-20 02:50:23672 language_prefs::kChewingMultipleChoicePrefs[i].ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00673 chewing_multiple_choice_prefs_[i].GetValue());
[email protected]525dbe22010-06-01 07:05:43674 }
675 }
[email protected]b65c5d22010-08-20 02:50:23676 if (!pref_name ||
677 *pref_name == language_prefs::kChewingHsuSelKeyType.pref_name) {
[email protected]7ac5af92010-06-07 01:25:44678 SetLanguageConfigInteger(
[email protected]7f132d02013-01-03 00:32:26679 language_prefs::kChewingSectionName,
[email protected]b65c5d22010-08-20 02:50:23680 language_prefs::kChewingHsuSelKeyType.ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00681 chewing_hsu_sel_key_type_.GetValue());
[email protected]7ac5af92010-06-07 01:25:44682 }
[email protected]b65c5d22010-08-20 02:50:23683 for (size_t i = 0; i < language_prefs::kNumChewingIntegerPrefs; ++i) {
684 if (!pref_name ||
685 *pref_name == language_prefs::kChewingIntegerPrefs[i].pref_name) {
686 SetLanguageConfigInteger(
[email protected]7f132d02013-01-03 00:32:26687 language_prefs::kChewingSectionName,
[email protected]b65c5d22010-08-20 02:50:23688 language_prefs::kChewingIntegerPrefs[i].ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00689 chewing_integer_prefs_[i].GetValue());
[email protected]15c53082010-06-03 03:28:21690 }
691 }
[email protected]b65c5d22010-08-20 02:50:23692 if (!pref_name ||
693 *pref_name == prefs::kLanguageHangulKeyboard) {
[email protected]7f132d02013-01-03 00:32:26694 SetLanguageConfigString(language_prefs::kHangulSectionName,
695 language_prefs::kHangulKeyboardConfigName,
[email protected]c67a30932012-03-14 05:23:00696 hangul_keyboard_.GetValue());
[email protected]3b02de292010-05-13 06:05:05697 }
[email protected]33444cf2011-08-04 06:33:55698 if (!pref_name || *pref_name == prefs::kLanguageHangulHanjaBindingKeys) {
[email protected]7f132d02013-01-03 00:32:26699 SetLanguageConfigString(language_prefs::kHangulSectionName,
700 language_prefs::kHangulHanjaBindingKeysConfigName,
[email protected]c67a30932012-03-14 05:23:00701 hangul_hanja_binding_keys_.GetValue());
[email protected]33444cf2011-08-04 06:33:55702 }
[email protected]b65c5d22010-08-20 02:50:23703 for (size_t i = 0; i < language_prefs::kNumPinyinBooleanPrefs; ++i) {
704 if (!pref_name ||
705 *pref_name == language_prefs::kPinyinBooleanPrefs[i].pref_name) {
706 SetLanguageConfigBoolean(
[email protected]7f132d02013-01-03 00:32:26707 language_prefs::kPinyinSectionName,
[email protected]b65c5d22010-08-20 02:50:23708 language_prefs::kPinyinBooleanPrefs[i].ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00709 pinyin_boolean_prefs_[i].GetValue());
[email protected]9040ad22010-04-22 04:29:28710 }
711 }
[email protected]b65c5d22010-08-20 02:50:23712 for (size_t i = 0; i < language_prefs::kNumPinyinIntegerPrefs; ++i) {
713 if (!pref_name ||
714 *pref_name == language_prefs::kPinyinIntegerPrefs[i].pref_name) {
715 SetLanguageConfigInteger(
[email protected]7f132d02013-01-03 00:32:26716 language_prefs::kPinyinSectionName,
[email protected]b65c5d22010-08-20 02:50:23717 language_prefs::kPinyinIntegerPrefs[i].ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00718 pinyin_int_prefs_[i].GetValue());
[email protected]9040ad22010-04-22 04:29:28719 }
720 }
[email protected]b65c5d22010-08-20 02:50:23721 if (!pref_name ||
722 *pref_name == language_prefs::kPinyinDoublePinyinSchema.pref_name) {
[email protected]7ac5af92010-06-07 01:25:44723 SetLanguageConfigInteger(
[email protected]7f132d02013-01-03 00:32:26724 language_prefs::kPinyinSectionName,
[email protected]b65c5d22010-08-20 02:50:23725 language_prefs::kPinyinDoublePinyinSchema.ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00726 pinyin_double_pinyin_schema_.GetValue());
[email protected]7ac5af92010-06-07 01:25:44727 }
[email protected]b65c5d22010-08-20 02:50:23728 for (size_t i = 0; i < language_prefs::kNumMozcBooleanPrefs; ++i) {
729 if (!pref_name ||
730 *pref_name == language_prefs::kMozcBooleanPrefs[i].pref_name) {
731 SetLanguageConfigBoolean(
[email protected]7f132d02013-01-03 00:32:26732 language_prefs::kMozcSectionName,
[email protected]b65c5d22010-08-20 02:50:23733 language_prefs::kMozcBooleanPrefs[i].ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00734 mozc_boolean_prefs_[i].GetValue());
[email protected]8a1ace22010-06-10 05:38:25735 }
736 }
[email protected]b65c5d22010-08-20 02:50:23737 for (size_t i = 0; i < language_prefs::kNumMozcMultipleChoicePrefs; ++i) {
738 if (!pref_name ||
739 *pref_name == language_prefs::kMozcMultipleChoicePrefs[i].pref_name) {
[email protected]6e5c4b82010-05-24 08:18:44740 SetLanguageConfigString(
[email protected]7f132d02013-01-03 00:32:26741 language_prefs::kMozcSectionName,
[email protected]b65c5d22010-08-20 02:50:23742 language_prefs::kMozcMultipleChoicePrefs[i].ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00743 mozc_multiple_choice_prefs_[i].GetValue());
[email protected]6e5c4b82010-05-24 08:18:44744 }
745 }
[email protected]b65c5d22010-08-20 02:50:23746 for (size_t i = 0; i < language_prefs::kNumMozcIntegerPrefs; ++i) {
747 if (!pref_name ||
748 *pref_name == language_prefs::kMozcIntegerPrefs[i].pref_name) {
749 SetLanguageConfigInteger(
[email protected]7f132d02013-01-03 00:32:26750 language_prefs::kMozcSectionName,
[email protected]b65c5d22010-08-20 02:50:23751 language_prefs::kMozcIntegerPrefs[i].ibus_config_name,
[email protected]c67a30932012-03-14 05:23:00752 mozc_integer_prefs_[i].GetValue());
[email protected]54037462010-06-22 02:06:23753 }
754 }
[email protected]4793c942010-09-21 23:17:17755
[email protected]e1619ee02012-10-22 08:14:49756 // Change the download directory to the default value if a Drive directory is
757 // selected and Drive is disabled.
758 if (!pref_name || *pref_name == prefs::kDisableDrive) {
[email protected]78a6b642012-09-12 02:07:03759 if (disable_drive_.GetValue()) {
[email protected]d9d04df2012-10-12 07:06:35760 if (drive::util::IsUnderDriveMountPoint(
[email protected]78a6b642012-09-12 02:07:03761 download_default_directory_.GetValue())) {
[email protected]155e1b42012-07-14 03:06:01762 prefs_->SetFilePath(prefs::kDownloadDefaultDirectory,
763 download_util::GetDefaultDownloadDirectory());
764 }
765 }
766 }
[email protected]3a229f42013-02-07 03:09:26767
768 if (!pref_name ||
769 *pref_name == prefs::kPowerAcScreenDimDelayMs ||
770 *pref_name == prefs::kPowerAcScreenOffDelayMs ||
771 *pref_name == prefs::kPowerAcScreenLockDelayMs ||
[email protected]c9b340b2013-03-20 21:01:13772 *pref_name == prefs::kPowerAcIdleWarningDelayMs ||
[email protected]3a229f42013-02-07 03:09:26773 *pref_name == prefs::kPowerAcIdleDelayMs ||
774 *pref_name == prefs::kPowerBatteryScreenDimDelayMs ||
775 *pref_name == prefs::kPowerBatteryScreenOffDelayMs ||
776 *pref_name == prefs::kPowerBatteryScreenLockDelayMs ||
[email protected]c9b340b2013-03-20 21:01:13777 *pref_name == prefs::kPowerBatteryIdleWarningDelayMs ||
[email protected]3a229f42013-02-07 03:09:26778 *pref_name == prefs::kPowerBatteryIdleDelayMs ||
779 *pref_name == prefs::kPowerIdleAction ||
780 *pref_name == prefs::kPowerLidClosedAction ||
781 *pref_name == prefs::kPowerUseAudioActivity ||
782 *pref_name == prefs::kPowerUseVideoActivity ||
[email protected]ceaf3a12013-04-30 18:21:31783 *pref_name == prefs::kPowerAllowScreenWakeLocks ||
[email protected]ac7fe1b2013-04-20 03:57:44784 *pref_name == prefs::kPowerPresentationIdleDelayFactor ||
[email protected]954015b2013-04-26 07:42:08785 *pref_name == prefs::kPowerUserActivityScreenDimDelayFactor ||
[email protected]ac7fe1b2013-04-20 03:57:44786 *pref_name == prefs::kEnableScreenLock) {
787 PowerPolicyController::PrefValues values;
788 values.ac_screen_dim_delay_ms = power_ac_screen_dim_delay_ms_.GetValue();
789 values.ac_screen_off_delay_ms = power_ac_screen_off_delay_ms_.GetValue();
790 values.ac_screen_lock_delay_ms = power_ac_screen_lock_delay_ms_.GetValue();
791 values.ac_idle_warning_delay_ms =
792 power_ac_idle_warning_delay_ms_.GetValue();
793 values.ac_idle_delay_ms = power_ac_idle_delay_ms_.GetValue();
794 values.battery_screen_dim_delay_ms =
795 power_battery_screen_dim_delay_ms_.GetValue();
796 values.battery_screen_off_delay_ms =
797 power_battery_screen_off_delay_ms_.GetValue();
798 values.battery_screen_lock_delay_ms =
799 power_battery_screen_lock_delay_ms_.GetValue();
800 values.battery_idle_warning_delay_ms =
801 power_battery_idle_warning_delay_ms_.GetValue();
802 values.battery_idle_delay_ms = power_battery_idle_delay_ms_.GetValue();
803 values.idle_action = static_cast<PowerPolicyController::Action>(
804 power_idle_action_.GetValue());
805 values.lid_closed_action = static_cast<PowerPolicyController::Action>(
806 power_lid_closed_action_.GetValue());
807 values.use_audio_activity = power_use_audio_activity_.GetValue();
808 values.use_video_activity = power_use_video_activity_.GetValue();
[email protected]ceaf3a12013-04-30 18:21:31809 values.allow_screen_wake_locks = power_allow_screen_wake_locks_.GetValue();
[email protected]ac7fe1b2013-04-20 03:57:44810 values.enable_screen_lock = enable_screen_lock_.GetValue();
811 values.presentation_idle_delay_factor =
812 power_presentation_idle_delay_factor_.GetValue();
[email protected]954015b2013-04-26 07:42:08813 values.user_activity_screen_dim_delay_factor =
814 power_user_activity_screen_dim_delay_factor_.GetValue();
[email protected]ac7fe1b2013-04-20 03:57:44815
816 DBusThreadManager::Get()->GetPowerPolicyController()->ApplyPrefs(values);
[email protected]3a229f42013-02-07 03:09:26817 }
[email protected]fecc1522009-10-15 21:08:29818}
819
[email protected]7f914fd2012-12-20 23:55:25820void Preferences::OnIsSyncingChanged() {
821 DVLOG(1) << "OnIsSyncingChanged";
822 ForceNaturalScrollDefault();
823}
824
825void Preferences::ForceNaturalScrollDefault() {
826 DVLOG(1) << "ForceNaturalScrollDefault";
827 if (CommandLine::ForCurrentProcess()->HasSwitch(
[email protected]931d1042013-04-05 17:50:44828 ::switches::kNaturalScrollDefault) &&
[email protected]7f914fd2012-12-20 23:55:25829 prefs_->IsSyncing() &&
830 !prefs_->GetUserPrefValue(prefs::kNaturalScroll)) {
831 DVLOG(1) << "Natural scroll forced to true";
832 natural_scroll_.SetValue(true);
833 UMA_HISTOGRAM_BOOLEAN("Touchpad.NaturalScroll.Forced", true);
834 }
835}
836
[email protected]70aa5b32010-04-05 08:30:34837void Preferences::SetLanguageConfigBoolean(const char* section,
838 const char* name,
839 bool value) {
[email protected]62308c22012-03-13 12:07:10840 input_method::InputMethodConfigValue config;
841 config.type = input_method::InputMethodConfigValue::kValueTypeBool;
[email protected]70aa5b32010-04-05 08:30:34842 config.bool_value = value;
[email protected]2c62b3f2012-04-12 12:07:50843 input_method_manager_->SetInputMethodConfig(section, name, config);
[email protected]70aa5b32010-04-05 08:30:34844}
845
[email protected]9040ad22010-04-22 04:29:28846void Preferences::SetLanguageConfigInteger(const char* section,
847 const char* name,
848 int value) {
[email protected]62308c22012-03-13 12:07:10849 input_method::InputMethodConfigValue config;
850 config.type = input_method::InputMethodConfigValue::kValueTypeInt;
[email protected]9040ad22010-04-22 04:29:28851 config.int_value = value;
[email protected]2c62b3f2012-04-12 12:07:50852 input_method_manager_->SetInputMethodConfig(section, name, config);
[email protected]9040ad22010-04-22 04:29:28853}
854
[email protected]50951432010-03-31 12:12:42855void Preferences::SetLanguageConfigString(const char* section,
856 const char* name,
[email protected]ddd231e2010-06-29 20:35:19857 const std::string& value) {
[email protected]62308c22012-03-13 12:07:10858 input_method::InputMethodConfigValue config;
859 config.type = input_method::InputMethodConfigValue::kValueTypeString;
[email protected]ddd231e2010-06-29 20:35:19860 config.string_value = value;
[email protected]2c62b3f2012-04-12 12:07:50861 input_method_manager_->SetInputMethodConfig(section, name, config);
[email protected]50951432010-03-31 12:12:42862}
863
[email protected]2c25ddfd2010-04-09 10:35:55864void Preferences::SetLanguageConfigStringList(
865 const char* section,
866 const char* name,
[email protected]ddd231e2010-06-29 20:35:19867 const std::vector<std::string>& values) {
[email protected]62308c22012-03-13 12:07:10868 input_method::InputMethodConfigValue config;
869 config.type = input_method::InputMethodConfigValue::kValueTypeStringList;
[email protected]ddd231e2010-06-29 20:35:19870 for (size_t i = 0; i < values.size(); ++i)
871 config.string_list_value.push_back(values[i]);
872
[email protected]2c62b3f2012-04-12 12:07:50873 input_method_manager_->SetInputMethodConfig(section, name, config);
[email protected]2c25ddfd2010-04-09 10:35:55874}
875
[email protected]d01bb8072010-04-12 13:00:15876void Preferences::SetLanguageConfigStringListAsCSV(const char* section,
877 const char* name,
[email protected]ddd231e2010-06-29 20:35:19878 const std::string& value) {
[email protected]e24c2c92010-10-23 01:39:24879 VLOG(1) << "Setting " << name << " to '" << value << "'";
[email protected]d01bb8072010-04-12 13:00:15880
[email protected]ddd231e2010-06-29 20:35:19881 std::vector<std::string> split_values;
882 if (!value.empty())
[email protected]76eb0242010-10-14 00:35:36883 base::SplitString(value, ',', &split_values);
[email protected]ddd231e2010-06-29 20:35:19884
[email protected]7f132d02013-01-03 00:32:26885 if (section == std::string(language_prefs::kGeneralSectionName) &&
886 name == std::string(language_prefs::kPreloadEnginesConfigName)) {
[email protected]dbc9b192012-04-18 05:55:34887 input_method_manager_->EnableInputMethods(split_values);
888 return;
889 }
890
[email protected]2c25ddfd2010-04-09 10:35:55891 // We should call the cros API even when |value| is empty, to disable default
[email protected]d01bb8072010-04-12 13:00:15892 // config.
893 SetLanguageConfigStringList(section, name, split_values);
[email protected]70aa5b32010-04-05 08:30:34894}
895
[email protected]2c62b3f2012-04-12 12:07:50896void Preferences::SetInputMethodList() {
897 // When |preload_engines_| are set, InputMethodManager::ChangeInputMethod()
898 // might be called to change the current input method to the first one in the
899 // |preload_engines_| list. This also updates previous/current input method
900 // prefs. That's why GetValue() calls are placed before the
901 // SetLanguageConfigStringListAsCSV() call below.
902 const std::string previous_input_method_id =
903 previous_input_method_.GetValue();
904 const std::string current_input_method_id = current_input_method_.GetValue();
[email protected]7f132d02013-01-03 00:32:26905 SetLanguageConfigStringListAsCSV(language_prefs::kGeneralSectionName,
906 language_prefs::kPreloadEnginesConfigName,
[email protected]2c62b3f2012-04-12 12:07:50907 preload_engines_.GetValue());
908
909 // ChangeInputMethod() has to be called AFTER the value of |preload_engines_|
910 // is sent to the InputMethodManager. Otherwise, the ChangeInputMethod request
911 // might be ignored as an invalid input method ID. The ChangeInputMethod()
912 // calls are also necessary to restore the previous/current input method prefs
913 // which could have been modified by the SetLanguageConfigStringListAsCSV call
914 // above to the original state.
915 if (!previous_input_method_id.empty())
916 input_method_manager_->ChangeInputMethod(previous_input_method_id);
917 if (!current_input_method_id.empty())
918 input_method_manager_->ChangeInputMethod(current_input_method_id);
919}
920
[email protected]a995b392010-08-11 04:38:59921void Preferences::UpdateAutoRepeatRate() {
[email protected]20979d492012-02-15 09:26:02922 // Avoid setting repeat rate on desktop dev environment.
[email protected]20d2a79d2012-03-16 23:01:02923 if (!base::chromeos::IsRunningOnChromeOS())
[email protected]20979d492012-02-15 09:26:02924 return;
925
[email protected]c010f632011-04-01 06:44:39926 input_method::AutoRepeatRate rate;
[email protected]c67a30932012-03-14 05:23:00927 rate.initial_delay_in_ms = xkb_auto_repeat_delay_pref_.GetValue();
928 rate.repeat_interval_in_ms = xkb_auto_repeat_interval_pref_.GetValue();
[email protected]a995b392010-08-11 04:38:59929 DCHECK(rate.initial_delay_in_ms > 0);
930 DCHECK(rate.repeat_interval_in_ms > 0);
[email protected]cf61f6b0a2013-01-03 00:34:12931 input_method::XKeyboard::SetAutoRepeatRate(rate);
[email protected]a995b392010-08-11 04:38:59932}
933
[email protected]fecc1522009-10-15 21:08:29934} // namespace chromeos