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

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

Issue 5441002: Clean up pref change notification handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix extension prefs breakage Created 10 years 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
« no previous file with comments | « chrome/browser/prefs/pref_service.h ('k') | chrome/browser/prefs/pref_service_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prefs/pref_service.cc
diff --git a/chrome/browser/prefs/pref_service.cc b/chrome/browser/prefs/pref_service.cc
index f7a11ffebcaac4091707e9c51843b52e7819ca56..524a858dfc901172ac0e3a59a594d916ccc30b4e 100644
--- a/chrome/browser/prefs/pref_service.cc
+++ b/chrome/browser/prefs/pref_service.cc
@@ -21,9 +21,13 @@
#include "base/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/browser/browser_thread.h"
-#include "chrome/browser/prefs/pref_notifier.h"
+#include "chrome/browser/policy/configuration_policy_pref_store.h"
+#include "chrome/browser/prefs/command_line_pref_store.h"
+#include "chrome/browser/prefs/in_memory_pref_store.h"
+#include "chrome/browser/prefs/pref_notifier_impl.h"
#include "chrome/browser/prefs/pref_value_store.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/json_pref_store.h"
#include "chrome/common/notification_service.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
@@ -83,6 +87,8 @@ void NotifyReadError(PrefService* pref, int message_id) {
// static
PrefService* PrefService::CreatePrefService(const FilePath& pref_filename,
Profile* profile) {
+ using policy::ConfigurationPolicyPrefStore;
+
#if defined(OS_LINUX)
// We'd like to see what fraction of our users have the preferences
// stored on a network file system, as we've had no end of troubles
@@ -96,19 +102,54 @@ PrefService* PrefService::CreatePrefService(const FilePath& pref_filename,
}
#endif
- return new PrefService(
- PrefValueStore::CreatePrefValueStore(pref_filename, profile, false));
+ ConfigurationPolicyPrefStore* managed =
+ ConfigurationPolicyPrefStore::CreateManagedPlatformPolicyPrefStore();
+ ConfigurationPolicyPrefStore* device_management =
+ ConfigurationPolicyPrefStore::CreateDeviceManagementPolicyPrefStore(
+ profile);
+ InMemoryPrefStore* extension = new InMemoryPrefStore();
+ CommandLinePrefStore* command_line =
+ new CommandLinePrefStore(CommandLine::ForCurrentProcess());
+ JsonPrefStore* user = new JsonPrefStore(
+ pref_filename,
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
+ ConfigurationPolicyPrefStore* recommended =
+ ConfigurationPolicyPrefStore::CreateRecommendedPolicyPrefStore();
+
+ return new PrefService(managed, device_management, extension, command_line,
+ user, recommended, profile);
}
// static
PrefService* PrefService::CreateUserPrefService(const FilePath& pref_filename) {
- return new PrefService(
- PrefValueStore::CreatePrefValueStore(pref_filename, NULL, true));
-}
-
-PrefService::PrefService(PrefValueStore* pref_value_store)
- : pref_value_store_(pref_value_store) {
- pref_notifier_.reset(new PrefNotifier(this, pref_value_store));
+ JsonPrefStore* user = new JsonPrefStore(
+ pref_filename,
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
+ InMemoryPrefStore* extension = new InMemoryPrefStore();
+
+ return new PrefService(NULL, NULL, extension, NULL, user, NULL, NULL);
+}
+
+PrefService::PrefService(PrefStore* managed_platform_prefs,
+ PrefStore* device_management_prefs,
+ PrefStore* extension_prefs,
+ PrefStore* command_line_prefs,
+ PrefStore* user_prefs,
+ PrefStore* recommended_prefs,
+ Profile* profile) {
+ pref_notifier_.reset(new PrefNotifierImpl(this));
+ extension_store_ = extension_prefs;
+ default_store_ = new InMemoryPrefStore();
+ pref_value_store_ =
+ new PrefValueStore(managed_platform_prefs,
+ device_management_prefs,
+ extension_store_,
+ command_line_prefs,
+ user_prefs,
+ recommended_prefs,
+ default_store_,
+ pref_notifier_.get(),
+ profile);
InitFromStorage();
}
@@ -319,6 +360,18 @@ const PrefService::Preference* PrefService::FindPreference(
return it == prefs_.end() ? NULL : *it;
}
+bool PrefService::ReadOnly() const {
+ return pref_value_store_->ReadOnly();
+}
+
+PrefNotifier* PrefService::pref_notifier() const {
+ return pref_notifier_.get();
+}
+
+PrefStore* PrefService::GetExtensionPrefStore() {
+ return extension_store_;
+}
+
bool PrefService::IsManagedPreference(const char* pref_name) const {
const Preference* pref = FindPreference(pref_name);
if (pref && pref->IsManaged()) {
@@ -355,10 +408,6 @@ const ListValue* PrefService::GetList(const char* path) const {
return static_cast<const ListValue*>(value);
}
-bool PrefService::ReadOnly() const {
- return pref_value_store_->ReadOnly();
-}
-
void PrefService::AddPrefObserver(const char* path,
NotificationObserver* obs) {
pref_notifier_->AddPrefObserver(path, obs);
@@ -388,11 +437,11 @@ void PrefService::RegisterPreference(const char* path, Value* default_value) {
// easier for callers to check for empty dict/list prefs. The PrefValueStore
// accepts ownership of the value (null or default_value).
if (Value::TYPE_LIST == orig_type || Value::TYPE_DICTIONARY == orig_type) {
- pref_value_store_->SetDefaultPrefValue(path, Value::CreateNullValue());
+ default_store_->prefs()->Set(path, Value::CreateNullValue());
} else {
// Hand off ownership.
DCHECK(!PrefStore::IsUseDefaultSentinelValue(default_value));
- pref_value_store_->SetDefaultPrefValue(path, scoped_value.release());
+ default_store_->prefs()->Set(path, scoped_value.release());
}
pref_value_store_->RegisterPreferenceType(path, orig_type);
@@ -407,8 +456,7 @@ void PrefService::ClearPref(const char* path) {
NOTREACHED() << "Trying to clear an unregistered pref: " << path;
return;
}
- if (pref_value_store_->RemoveUserPrefValue(path))
- pref_notifier_->OnUserPreferenceSet(path);
+ pref_value_store_->RemoveUserPrefValue(path);
}
void PrefService::Set(const char* path, const Value& value) {
@@ -422,21 +470,17 @@ void PrefService::Set(const char* path, const Value& value) {
// Allow dictionary and list types to be set to null, which removes their
// user values.
- bool value_changed = false;
if (value.GetType() == Value::TYPE_NULL &&
(pref->GetType() == Value::TYPE_DICTIONARY ||
pref->GetType() == Value::TYPE_LIST)) {
- value_changed = pref_value_store_->RemoveUserPrefValue(path);
+ pref_value_store_->RemoveUserPrefValue(path);
} else if (pref->GetType() != value.GetType()) {
NOTREACHED() << "Trying to set pref " << path
<< " of type " << pref->GetType()
<< " to value of type " << value.GetType();
} else {
- value_changed = pref_value_store_->SetUserPrefValue(path, value.DeepCopy());
+ pref_value_store_->SetUserPrefValue(path, value.DeepCopy());
}
-
- if (value_changed)
- pref_notifier_->OnUserPreferenceSet(path);
}
void PrefService::SetBoolean(const char* path, bool value) {
@@ -514,7 +558,7 @@ DictionaryValue* PrefService::GetMutableDictionary(const char* path) {
if (!pref_value_store_->GetUserValue(path, &tmp_value) ||
!tmp_value->IsType(Value::TYPE_DICTIONARY)) {
dict = new DictionaryValue;
- pref_value_store_->SetUserPrefValue(path, dict);
+ pref_value_store_->SetUserPrefValueSilently(path, dict);
} else {
dict = static_cast<DictionaryValue*>(tmp_value);
}
@@ -541,7 +585,7 @@ ListValue* PrefService::GetMutableList(const char* path) {
if (!pref_value_store_->GetUserValue(path, &tmp_value) ||
!tmp_value->IsType(Value::TYPE_LIST)) {
list = new ListValue;
- pref_value_store_->SetUserPrefValue(path, list);
+ pref_value_store_->SetUserPrefValueSilently(path, list);
} else {
list = static_cast<ListValue*>(tmp_value);
}
@@ -575,12 +619,7 @@ void PrefService::SetUserPrefValue(const char* path, Value* new_value) {
return;
}
- if (pref_value_store_->SetUserPrefValue(path, new_value))
- pref_notifier_->OnUserPreferenceSet(path);
-}
-
-PrefStore* PrefService::GetExtensionPrefStore() const {
- return pref_value_store()->GetExtensionPrefStore();
+ pref_value_store_->SetUserPrefValue(path, new_value);
}
///////////////////////////////////////////////////////////////////////////////
« no previous file with comments | « chrome/browser/prefs/pref_service.h ('k') | chrome/browser/prefs/pref_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698