Index: chrome/browser/prefs/pref_service_syncable.h |
diff --git a/chrome/browser/prefs/pref_service_syncable.h b/chrome/browser/prefs/pref_service_syncable.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2df79c0fe93b6f148797871aea2f0e288cb69276 |
--- /dev/null |
+++ b/chrome/browser/prefs/pref_service_syncable.h |
@@ -0,0 +1,138 @@ |
+// 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. |
+ |
+#ifndef CHROME_BROWSER_PREFS_PREF_SERVICE_SYNCABLE_H_ |
+#define CHROME_BROWSER_PREFS_PREF_SERVICE_SYNCABLE_H_ |
+ |
+#include "chrome/browser/prefs/pref_model_associator.h" |
+#include "chrome/browser/prefs/pref_service.h" |
+ |
+// TODO(joi) Move to c/b/prefs and rename PrefServiceSyncableObserver. |
+class PrefServiceObserver; |
+ |
+namespace syncer { |
+class SyncableService; |
+} |
+ |
+// A PrefService that can be synced. Users are forced to declare |
+// whether preferences are syncable or not when registering them to |
+// this PrefService. |
+class PrefServiceSyncable : public PrefService { |
+ public: |
+ // Enum used when registering preferences to determine if it should be synced |
+ // or not. This is only used for profile prefs, not local state prefs. |
+ // See the Register*Pref methods for profile prefs below. |
+ enum PrefSyncStatus { |
+ UNSYNCABLE_PREF, |
+ SYNCABLE_PREF |
+ }; |
+ |
+ virtual ~PrefServiceSyncable(); |
+ |
+ // Creates an incognito copy of the pref service that shares most pref stores |
+ // but uses a fresh non-persistent overlay for the user pref store and an |
+ // individual extension pref store (to cache the effective extension prefs for |
+ // incognito windows). |
+ PrefServiceSyncable* CreateIncognitoPrefService( |
+ PrefStore* incognito_extension_prefs); |
+ |
+ // Returns true if preferences state has synchronized with the remote |
+ // preferences. If true is returned it can be assumed the local preferences |
+ // has applied changes from the remote preferences. The two may not be |
+ // identical if a change is in flight (from either side). |
+ bool IsSyncing(); |
+ |
+ void AddObserver(PrefServiceObserver* observer); |
+ void RemoveObserver(PrefServiceObserver* observer); |
+ |
+ virtual void UnregisterPreference(const char* path) OVERRIDE; |
+ |
+ void RegisterBooleanPref(const char* path, |
+ bool default_value, |
+ PrefSyncStatus sync_status); |
+ void RegisterIntegerPref(const char* path, |
+ int default_value, |
+ PrefSyncStatus sync_status); |
+ void RegisterDoublePref(const char* path, |
+ double default_value, |
+ PrefSyncStatus sync_status); |
+ void RegisterStringPref(const char* path, |
+ const std::string& default_value, |
+ PrefSyncStatus sync_status); |
+ void RegisterFilePathPref(const char* path, |
+ const FilePath& default_value, |
+ PrefSyncStatus sync_status); |
+ void RegisterListPref(const char* path, |
+ PrefSyncStatus sync_status); |
+ void RegisterDictionaryPref(const char* path, |
+ PrefSyncStatus sync_status); |
+ void RegisterListPref(const char* path, |
+ base::ListValue* default_value, |
+ PrefSyncStatus sync_status); |
+ void RegisterDictionaryPref(const char* path, |
+ base::DictionaryValue* default_value, |
+ PrefSyncStatus sync_status); |
+ void RegisterLocalizedBooleanPref(const char* path, |
+ int locale_default_message_id, |
+ PrefSyncStatus sync_status); |
+ void RegisterLocalizedIntegerPref(const char* path, |
+ int locale_default_message_id, |
+ PrefSyncStatus sync_status); |
+ void RegisterLocalizedDoublePref(const char* path, |
+ int locale_default_message_id, |
+ PrefSyncStatus sync_status); |
+ void RegisterLocalizedStringPref(const char* path, |
+ int locale_default_message_id, |
+ PrefSyncStatus sync_status); |
+ void RegisterInt64Pref(const char* path, |
+ int64 default_value, |
+ PrefSyncStatus sync_status); |
+ void RegisterUint64Pref(const char* path, |
+ uint64 default_value, |
+ PrefSyncStatus sync_status); |
+ |
+ // syncer::SyncableService getter. |
+ // TODO(zea): Have PrefService implement syncer::SyncableService directly. |
Mattias Nissler (ping if slow)
2012/12/20 13:41:52
update comment
Jói
2012/12/20 16:30:31
Done.
|
+ syncer::SyncableService* GetSyncableService(); |
+ |
+ // Do not call this after having derived an incognito or per tab pref service. |
+ virtual void UpdateCommandLinePrefStore(PrefStore* cmd_line_store) OVERRIDE; |
+ |
+ protected: |
+ // Only use ChromePrefServiceFactory to create initialized PrefServiceSyncable |
+ // objects. |
+ PrefServiceSyncable(); |
+ |
+ virtual void Initialize( |
+ PrefNotifierImpl* pref_notifier, |
+ PrefValueStore* pref_value_store, |
+ PersistentPrefStore* user_prefs, |
+ DefaultPrefStore* default_store, |
+ base::Callback<void(PersistentPrefStore::PrefReadError)> |
+ read_error_callback, |
+ bool async) OVERRIDE; |
+ |
+ private: |
+ friend class PrefModelAssociator; |
+ |
+ // Constructs objects. |
Mattias Nissler (ping if slow)
2012/12/20 13:41:52
s/objects/instances/
Jói
2012/12/20 16:30:31
Done.
|
+ friend class ChromePrefServiceFactory; |
+ friend class PrefServiceMockBuilder; |
+ |
+ // Invoked internally when the IsSyncing() state changes. |
+ void OnIsSyncingChanged(); |
+ |
Mattias Nissler (ping if slow)
2012/12/20 13:41:52
documentation.
Jói
2012/12/20 16:30:31
Done.
|
+ void RegisterSyncablePreference( |
+ const char* path, Value* default_value, PrefSyncStatus sync_status); |
Mattias Nissler (ping if slow)
2012/12/20 13:41:52
param decls on separate lines.
Jói
2012/12/20 16:30:31
Done.
|
+ |
+ // Whether CreateIncognitoPrefService() has been called to create a |
+ // "forked" PrefService. |
+ bool pref_service_forked_; |
+ |
+ PrefModelAssociator pref_sync_associator_; |
+ |
+ ObserverList<PrefServiceObserver> observer_list_; |
Mattias Nissler (ping if slow)
2012/12/20 13:41:52
DISALLOW_COPY_AND_ASSIGN
Jói
2012/12/20 16:30:31
Done.
|
+}; |
+ |
+#endif // CHROME_BROWSER_PREFS_PREF_SERVICE_SYNCABLE_H_ |