| Index: chrome/browser/prefs/pref_value_store.cc
|
| diff --git a/chrome/browser/prefs/pref_value_store.cc b/chrome/browser/prefs/pref_value_store.cc
|
| index dbb29aebdf4b15f0e761ab3ff3fdfec5146fbb82..44b526f1429839b0e46cd88c330e35b06ab4551e 100644
|
| --- a/chrome/browser/prefs/pref_value_store.cc
|
| +++ b/chrome/browser/prefs/pref_value_store.cc
|
| @@ -38,8 +38,9 @@ void PrefValueStore::PrefStoreKeeper::OnPrefValueChanged(
|
| pref_value_store_->OnPrefValueChanged(type_, key);
|
| }
|
|
|
| -void PrefValueStore::PrefStoreKeeper::OnInitializationCompleted() {
|
| - pref_value_store_->OnInitializationCompleted(type_);
|
| +void PrefValueStore::PrefStoreKeeper::OnInitializationCompleted(
|
| + bool succeeded) {
|
| + pref_value_store_->OnInitializationCompleted(type_, succeeded);
|
| }
|
|
|
| PrefValueStore::PrefValueStore(PrefStore* managed_platform_prefs,
|
| @@ -53,7 +54,8 @@ PrefValueStore::PrefValueStore(PrefStore* managed_platform_prefs,
|
| PrefModelAssociator* pref_sync_associator,
|
| PrefNotifier* pref_notifier)
|
| : pref_sync_associator_(pref_sync_associator),
|
| - pref_notifier_(pref_notifier) {
|
| + pref_notifier_(pref_notifier),
|
| + initialization_failed_(false) {
|
| InitPrefStore(MANAGED_PLATFORM_STORE, managed_platform_prefs);
|
| InitPrefStore(MANAGED_CLOUD_STORE, managed_cloud_prefs);
|
| InitPrefStore(EXTENSION_STORE, extension_prefs);
|
| @@ -245,7 +247,14 @@ void PrefValueStore::OnPrefValueChanged(PrefValueStore::PrefStoreType type,
|
| }
|
|
|
| void PrefValueStore::OnInitializationCompleted(
|
| - PrefValueStore::PrefStoreType type) {
|
| + PrefValueStore::PrefStoreType type, bool succeeded) {
|
| + if (initialization_failed_)
|
| + return;
|
| + if (!succeeded) {
|
| + initialization_failed_ = true;
|
| + pref_notifier_->OnInitializationCompleted(false);
|
| + return;
|
| + }
|
| CheckInitializationCompleted();
|
| }
|
|
|
| @@ -255,11 +264,13 @@ void PrefValueStore::InitPrefStore(PrefValueStore::PrefStoreType type,
|
| }
|
|
|
| void PrefValueStore::CheckInitializationCompleted() {
|
| + if (initialization_failed_)
|
| + return;
|
| for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) {
|
| scoped_refptr<PrefStore> store =
|
| GetPrefStore(static_cast<PrefStoreType>(i));
|
| if (store && !store->IsInitializationComplete())
|
| return;
|
| }
|
| - pref_notifier_->OnInitializationCompleted();
|
| + pref_notifier_->OnInitializationCompleted(true);
|
| }
|
|
|