Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1299)

Unified Diff: chrome/browser/prefs/pref_registry_syncable.cc

Issue 12079097: Introduce PrefRegistrySyncable, simplifying PrefServiceSyncable. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add to PrefRegistrySyncable and PrefServiceSyncable to let sync know of pre-registered prefs. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/prefs/pref_registry_syncable.cc
diff --git a/chrome/browser/prefs/pref_registry_syncable.cc b/chrome/browser/prefs/pref_registry_syncable.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f0a7b1a9c3cbc5e5a7bb182393350a8e872d07ba
--- /dev/null
+++ b/chrome/browser/prefs/pref_registry_syncable.cc
@@ -0,0 +1,220 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/prefs/pref_registry_syncable.h"
+
+#include "base/file_path.h"
+#include "base/prefs/default_pref_store.h"
+#include "base/string_number_conversions.h"
+#include "base/values.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace {
+
+// A helper function for RegisterLocalized*Pref that creates a Value*
+// based on a localized resource. Because we control the values in a
+// locale dll, this should always return a Value of the appropriate
+// type.
+base::Value* CreateLocaleDefaultValue(base::Value::Type type,
+ int message_id) {
+ const std::string& resource_string = l10n_util::GetStringUTF8(message_id);
+ DCHECK(!resource_string.empty());
+ switch (type) {
+ case Value::TYPE_BOOLEAN: {
+ if ("true" == resource_string)
+ return Value::CreateBooleanValue(true);
+ if ("false" == resource_string)
+ return Value::CreateBooleanValue(false);
+ break;
+ }
+
+ case Value::TYPE_INTEGER: {
+ int val;
+ base::StringToInt(resource_string, &val);
+ return Value::CreateIntegerValue(val);
+ }
+
+ case Value::TYPE_DOUBLE: {
+ double val;
+ base::StringToDouble(resource_string, &val);
+ return Value::CreateDoubleValue(val);
+ }
+
+ case Value::TYPE_STRING: {
+ return Value::CreateStringValue(resource_string);
+ }
+
+ default: {
+ NOTREACHED() <<
+ "list and dictionary types cannot have default locale values";
+ }
+ }
+ NOTREACHED();
+ return Value::CreateNullValue();
+}
+
+} // namespace
+
+PrefRegistrySyncable::PrefRegistrySyncable() {
+}
+
+PrefRegistrySyncable::~PrefRegistrySyncable() {
+}
+
+const std::set<std::string>&
+PrefRegistrySyncable::syncable_preferences() const {
+ return syncable_preferences_;
+}
+
+void PrefRegistrySyncable::SetSyncableRegistrationCallback(
+ const SyncableRegistrationCallback& cb) {
+ callback_ = cb;
+}
+
+void PrefRegistrySyncable::RegisterBooleanPref(const char* path,
+ bool default_value,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(path,
+ Value::CreateBooleanValue(default_value),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterIntegerPref(const char* path,
+ int default_value,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(path,
+ Value::CreateIntegerValue(default_value),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterDoublePref(const char* path,
+ double default_value,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(path,
+ Value::CreateDoubleValue(default_value),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterStringPref(const char* path,
+ const std::string& default_value,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(path,
+ Value::CreateStringValue(default_value),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterFilePathPref(
+ const char* path,
+ const base::FilePath& default_value,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(path,
+ Value::CreateStringValue(default_value.value()),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterListPref(const char* path,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(path, new ListValue(), sync_status);
+}
+
+void PrefRegistrySyncable::RegisterListPref(const char* path,
+ ListValue* default_value,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(path, default_value, sync_status);
+}
+
+void PrefRegistrySyncable::RegisterDictionaryPref(const char* path,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(path, new DictionaryValue(), sync_status);
+}
+
+void PrefRegistrySyncable::RegisterDictionaryPref(
+ const char* path,
+ DictionaryValue* default_value,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(path, default_value, sync_status);
+}
+
+void PrefRegistrySyncable::RegisterLocalizedBooleanPref(
+ const char* path,
+ int locale_default_message_id,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(
+ path,
+ CreateLocaleDefaultValue(Value::TYPE_BOOLEAN, locale_default_message_id),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterLocalizedIntegerPref(
+ const char* path,
+ int locale_default_message_id,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(
+ path,
+ CreateLocaleDefaultValue(Value::TYPE_INTEGER, locale_default_message_id),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterLocalizedDoublePref(
+ const char* path,
+ int locale_default_message_id,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(
+ path,
+ CreateLocaleDefaultValue(Value::TYPE_DOUBLE, locale_default_message_id),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterLocalizedStringPref(
+ const char* path,
+ int locale_default_message_id,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(
+ path,
+ CreateLocaleDefaultValue(Value::TYPE_STRING, locale_default_message_id),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterInt64Pref(
+ const char* path,
+ int64 default_value,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(
+ path,
+ Value::CreateStringValue(base::Int64ToString(default_value)),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterUint64Pref(
+ const char* path,
+ uint64 default_value,
+ PrefSyncStatus sync_status) {
+ RegisterSyncablePreference(
+ path,
+ Value::CreateStringValue(base::Uint64ToString(default_value)),
+ sync_status);
+}
+
+void PrefRegistrySyncable::RegisterSyncablePreference(
+ const char* path,
+ base::Value* default_value,
+ PrefSyncStatus sync_status) {
+ PrefRegistry::RegisterPreference(path, default_value);
+
+ if (sync_status == SYNCABLE_PREF) {
+ syncable_preferences_.insert(path);
+
+ if (!callback_.is_null())
+ callback_.Run(path);
+ }
+}
+
+scoped_refptr<PrefRegistrySyncable> PrefRegistrySyncable::ForkForIncognito() {
+ // TODO(joi): We can directly reuse the same PrefRegistry once
+ // PrefService no longer registers for callbacks on registration and
+ // unregistration.
+ scoped_refptr<PrefRegistrySyncable> registry(new PrefRegistrySyncable());
+ registry->defaults_ = defaults_;
+ return registry;
+}

Powered by Google App Engine
This is Rietveld 408576698