| Index: chrome/browser/extensions/extension_prefs.cc
|
| diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
|
| index cc1beb8c9eaf0b65432c99cdebd5362b97363c3a..1f128ab2f7ce218be0f3f783fd8bbde5b772d424 100644
|
| --- a/chrome/browser/extensions/extension_prefs.cc
|
| +++ b/chrome/browser/extensions/extension_prefs.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/string_util.h"
|
| #include "base/string_number_conversions.h"
|
| #include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/extensions/extension_pref_store.h"
|
| #include "chrome/browser/prefs/pref_notifier.h"
|
| #include "chrome/common/extensions/extension.h"
|
| #include "chrome/common/extensions/url_pattern.h"
|
| @@ -140,9 +141,12 @@ static void ExtentToStringSet(const ExtensionExtent& host_extent,
|
|
|
| } // namespace
|
|
|
| -ExtensionPrefs::ExtensionPrefs(PrefService* prefs, const FilePath& root_dir)
|
| +ExtensionPrefs::ExtensionPrefs(PrefService* prefs,
|
| + const FilePath& root_dir,
|
| + ExtensionPrefStore* pref_store)
|
| : prefs_(prefs),
|
| - install_directory_(root_dir) {
|
| + install_directory_(root_dir),
|
| + pref_store_(pref_store) {
|
| // TODO(asargent) - Remove this in a couple of months. (See comment above
|
| // CleanupBadExtensionKeys).
|
| CleanupBadExtensionKeys(prefs_);
|
| @@ -1190,6 +1194,7 @@ void ExtensionPrefs::InitPrefStore() {
|
|
|
| // Store winning preference for each extension controlled preference.
|
| UpdatePrefStore(ext_controlled_prefs);
|
| + pref_store_->OnInitializationCompleted();
|
| }
|
|
|
| const Value* ExtensionPrefs::GetWinningExtensionControlledPrefValue(
|
| @@ -1229,25 +1234,15 @@ void ExtensionPrefs::UpdatePrefStore(
|
| }
|
|
|
| void ExtensionPrefs::UpdatePrefStore(const std::string& pref_key) {
|
| - PrefStore* extension_pref_store =
|
| - pref_service()->GetExtensionPrefStore();
|
| - if (extension_pref_store == NULL)
|
| - return; // Profile is being shut down, Pref Service is already gone.
|
| + if (pref_store_ == NULL)
|
| + return;
|
| const Value* winning_pref_value =
|
| GetWinningExtensionControlledPrefValue(pref_key);
|
| - Value* old_value = NULL;
|
| - extension_pref_store->prefs()->Get(pref_key, &old_value);
|
| - bool changed = !Value::Equals(winning_pref_value, old_value);
|
|
|
| - if (winning_pref_value) {
|
| - extension_pref_store->prefs()->Set(pref_key,
|
| - winning_pref_value->DeepCopy());
|
| - } else {
|
| - extension_pref_store->prefs()->Remove(pref_key, NULL);
|
| - }
|
| -
|
| - if (changed)
|
| - pref_service()->pref_notifier()->OnPreferenceChanged(pref_key.c_str());
|
| + if (winning_pref_value)
|
| + pref_store_->SetExtensionPref(pref_key, winning_pref_value->DeepCopy());
|
| + else
|
| + pref_store_->RemoveExtensionPref(pref_key);
|
| }
|
|
|
| void ExtensionPrefs::SetExtensionControlledPref(const std::string& extension_id,
|
|
|