Index: chrome/browser/prefs/tracked/segregated_pref_store.cc |
diff --git a/chrome/browser/prefs/tracked/segregated_pref_store.cc b/chrome/browser/prefs/tracked/segregated_pref_store.cc |
index a430d3035a8dfb2c3ad2d9edb8a3e8c5618356a7..3a50b407788aff00c04a1a7a4ee55ac71748827d 100644 |
--- a/chrome/browser/prefs/tracked/segregated_pref_store.cc |
+++ b/chrome/browser/prefs/tracked/segregated_pref_store.cc |
@@ -35,9 +35,6 @@ void SegregatedPrefStore::AggregatingObserver::OnInitializationCompleted( |
DCHECK_LE(failed_sub_initializations_ + successful_sub_initializations_, 2); |
if (failed_sub_initializations_ + successful_sub_initializations_ == 2) { |
- if (!outer_->on_initialization_.is_null()) |
- outer_->on_initialization_.Run(); |
- |
if (successful_sub_initializations_ == 2 && outer_->read_error_delegate_) { |
PersistentPrefStore::PrefReadError read_error = outer_->GetReadError(); |
if (read_error != PersistentPrefStore::PREF_READ_ERROR_NONE) |
@@ -54,14 +51,11 @@ void SegregatedPrefStore::AggregatingObserver::OnInitializationCompleted( |
SegregatedPrefStore::SegregatedPrefStore( |
const scoped_refptr<PersistentPrefStore>& default_pref_store, |
const scoped_refptr<PersistentPrefStore>& selected_pref_store, |
- const std::set<std::string>& selected_pref_names, |
- const base::Closure& on_initialization) |
+ const std::set<std::string>& selected_pref_names) |
: default_pref_store_(default_pref_store), |
selected_pref_store_(selected_pref_store), |
selected_preference_names_(selected_pref_names), |
- on_initialization_(on_initialization), |
aggregating_observer_(this) { |
- |
default_pref_store_->AddObserver(&aggregating_observer_); |
selected_pref_store_->AddObserver(&aggregating_observer_); |
} |
@@ -128,8 +122,15 @@ PersistentPrefStore::PrefReadError SegregatedPrefStore::GetReadError() const { |
} |
PersistentPrefStore::PrefReadError SegregatedPrefStore::ReadPrefs() { |
+ // Note: Both of these stores own PrefFilters which makes ReadPrefs |
+ // asynchronous. This is okay in this case as only the first call will be |
+ // truly asynchronous, the second call will then unblock the migration in |
+ // TrackedPreferencesMigrator and complete synchronously. |
default_pref_store_->ReadPrefs(); |
- selected_pref_store_->ReadPrefs(); |
+ PersistentPrefStore::PrefReadError selected_store_read_error = |
+ selected_pref_store_->ReadPrefs(); |
+ DCHECK_NE(PersistentPrefStore::PREF_READ_ERROR_ASYNCHRONOUS_TASK_INCOMPLETE, |
+ selected_store_read_error); |
return GetReadError(); |
} |
@@ -150,34 +151,13 @@ SegregatedPrefStore::~SegregatedPrefStore() { |
selected_pref_store_->RemoveObserver(&aggregating_observer_); |
} |
-const PersistentPrefStore* SegregatedPrefStore::StoreForKey( |
- const std::string& key) const { |
- if (ContainsKey(selected_preference_names_, key) || |
- selected_pref_store_->GetValue(key, NULL)) { |
- return selected_pref_store_.get(); |
- } |
- return default_pref_store_.get(); |
-} |
- |
PersistentPrefStore* SegregatedPrefStore::StoreForKey(const std::string& key) { |
- if (ContainsKey(selected_preference_names_, key)) |
- return selected_pref_store_.get(); |
- |
- // Check if this unselected value was previously selected. If so, migrate it |
- // back to the unselected store. |
- // It's hard to do this in a single pass at startup because PrefStore does not |
- // permit us to enumerate its contents. |
- const base::Value* value = NULL; |
- if (selected_pref_store_->GetValue(key, &value)) { |
- default_pref_store_->SetValue(key, value->DeepCopy()); |
- // Commit |default_pref_store_| to guarantee that the migrated value is |
- // flushed to disk before the removal from |selected_pref_store_| is |
- // eventually flushed to disk. |
- default_pref_store_->CommitPendingWrite(); |
- |
- value = NULL; |
- selected_pref_store_->RemoveValue(key); |
- } |
+ return ContainsKey(selected_preference_names_, key) ? selected_pref_store_ |
+ : default_pref_store_; |
+} |
- return default_pref_store_.get(); |
+const PersistentPrefStore* SegregatedPrefStore::StoreForKey( |
+ const std::string& key) const { |
+ return ContainsKey(selected_preference_names_, key) ? selected_pref_store_ |
+ : default_pref_store_; |
} |