Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / prefs / tracked / segregated_pref_store.cc
index 13d5ecf..3a50b40 100644 (file)
@@ -35,10 +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)
@@ -55,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_);
 }
@@ -129,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();
 }
@@ -151,32 +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)) {
-    scoped_ptr<base::Value> migrated_value(value->DeepCopy());
-    value = NULL;
-    default_pref_store_->SetValue(key, migrated_value.release());
-    default_pref_store_->CommitPendingWrite();
-    selected_pref_store_->RemoveValue(key);
-    selected_pref_store_->CommitPendingWrite();
-  }
+  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_;
 }