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

Side by Side Diff: chrome/browser/prefs/tracked/tracked_preferences_migration.cc

Issue 329173002: Make a JsonPrefStore readable while mid-interception. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/prefs/tracked/tracked_preferences_migration.h" 5 #include "chrome/browser/prefs/tracked/tracked_preferences_migration.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 29 matching lines...) Expand all
40 }; 40 };
41 41
42 ~TrackedPreferencesMigrator(); 42 ~TrackedPreferencesMigrator();
43 43
44 // Stores the data coming in from the filter identified by |id| into this 44 // Stores the data coming in from the filter identified by |id| into this
45 // class and then calls MigrateIfReady(); 45 // class and then calls MigrateIfReady();
46 void InterceptFilterOnLoad( 46 void InterceptFilterOnLoad(
47 PrefFilterID id, 47 PrefFilterID id,
48 const InterceptablePrefFilter::FinalizeFilterOnLoadCallback& 48 const InterceptablePrefFilter::FinalizeFilterOnLoadCallback&
49 finalize_filter_on_load, 49 finalize_filter_on_load,
50 scoped_ptr<base::DictionaryValue> prefs); 50 base::DictionaryValue* prefs);
51 51
52 // Proceeds with migration if both |unprotected_prefs_| and |protected_prefs_| 52 // Proceeds with migration if both |unprotected_prefs_| and |protected_prefs_|
53 // have been set. 53 // have been set.
54 void MigrateIfReady(); 54 void MigrateIfReady();
55 55
56 const std::set<std::string> unprotected_pref_names_; 56 const std::set<std::string> unprotected_pref_names_;
57 const std::set<std::string> protected_pref_names_; 57 const std::set<std::string> protected_pref_names_;
58 58
59 const base::Callback<void(const std::string& key)> unprotected_store_cleaner_; 59 const base::Callback<void(const std::string& key)> unprotected_store_cleaner_;
60 const base::Callback<void(const std::string& key)> protected_store_cleaner_; 60 const base::Callback<void(const std::string& key)> protected_store_cleaner_;
61 const base::Callback<void(const base::Closure&)> 61 const base::Callback<void(const base::Closure&)>
62 register_on_successful_unprotected_store_write_callback_; 62 register_on_successful_unprotected_store_write_callback_;
63 const base::Callback<void(const base::Closure&)> 63 const base::Callback<void(const base::Closure&)>
64 register_on_successful_protected_store_write_callback_; 64 register_on_successful_protected_store_write_callback_;
65 65
66 InterceptablePrefFilter::FinalizeFilterOnLoadCallback 66 InterceptablePrefFilter::FinalizeFilterOnLoadCallback
67 finalize_unprotected_filter_on_load_; 67 finalize_unprotected_filter_on_load_;
68 InterceptablePrefFilter::FinalizeFilterOnLoadCallback 68 InterceptablePrefFilter::FinalizeFilterOnLoadCallback
69 finalize_protected_filter_on_load_; 69 finalize_protected_filter_on_load_;
70 70
71 scoped_ptr<base::DictionaryValue> unprotected_prefs_; 71 base::DictionaryValue* unprotected_prefs_;
72 scoped_ptr<base::DictionaryValue> protected_prefs_; 72 base::DictionaryValue* protected_prefs_;
73 73
74 DISALLOW_COPY_AND_ASSIGN(TrackedPreferencesMigrator); 74 DISALLOW_COPY_AND_ASSIGN(TrackedPreferencesMigrator);
75 }; 75 };
76 76
77 // Invokes |store_cleaner| for every |keys_to_clean|. 77 // Invokes |store_cleaner| for every |keys_to_clean|.
78 void CleanupPrefStore( 78 void CleanupPrefStore(
79 const base::Callback<void(const std::string& key)>& store_cleaner, 79 const base::Callback<void(const std::string& key)>& store_cleaner,
80 const std::set<std::string>& keys_to_clean) { 80 const std::set<std::string>& keys_to_clean) {
81 for (std::set<std::string>::const_iterator it = keys_to_clean.begin(); 81 for (std::set<std::string>::const_iterator it = keys_to_clean.begin();
82 it != keys_to_clean.end(); ++it) { 82 it != keys_to_clean.end(); ++it) {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 register_on_successful_protected_store_write_callback, 150 register_on_successful_protected_store_write_callback,
151 InterceptablePrefFilter* unprotected_pref_filter, 151 InterceptablePrefFilter* unprotected_pref_filter,
152 InterceptablePrefFilter* protected_pref_filter) 152 InterceptablePrefFilter* protected_pref_filter)
153 : unprotected_pref_names_(unprotected_pref_names), 153 : unprotected_pref_names_(unprotected_pref_names),
154 protected_pref_names_(protected_pref_names), 154 protected_pref_names_(protected_pref_names),
155 unprotected_store_cleaner_(unprotected_store_cleaner), 155 unprotected_store_cleaner_(unprotected_store_cleaner),
156 protected_store_cleaner_(protected_store_cleaner), 156 protected_store_cleaner_(protected_store_cleaner),
157 register_on_successful_unprotected_store_write_callback_( 157 register_on_successful_unprotected_store_write_callback_(
158 register_on_successful_unprotected_store_write_callback), 158 register_on_successful_unprotected_store_write_callback),
159 register_on_successful_protected_store_write_callback_( 159 register_on_successful_protected_store_write_callback_(
160 register_on_successful_protected_store_write_callback) { 160 register_on_successful_protected_store_write_callback),
161 unprotected_prefs_(NULL),
162 protected_prefs_(NULL) {
161 // The callbacks bound below will own this TrackedPreferencesMigrator by 163 // The callbacks bound below will own this TrackedPreferencesMigrator by
162 // reference. 164 // reference.
163 unprotected_pref_filter->InterceptNextFilterOnLoad( 165 unprotected_pref_filter->InterceptNextFilterOnLoad(
164 base::Bind(&TrackedPreferencesMigrator::InterceptFilterOnLoad, 166 base::Bind(&TrackedPreferencesMigrator::InterceptFilterOnLoad,
165 this, 167 this,
166 UNPROTECTED_PREF_FILTER)); 168 UNPROTECTED_PREF_FILTER));
167 protected_pref_filter->InterceptNextFilterOnLoad( 169 protected_pref_filter->InterceptNextFilterOnLoad(
168 base::Bind(&TrackedPreferencesMigrator::InterceptFilterOnLoad, 170 base::Bind(&TrackedPreferencesMigrator::InterceptFilterOnLoad,
169 this, 171 this,
170 PROTECTED_PREF_FILTER)); 172 PROTECTED_PREF_FILTER));
171 } 173 }
172 174
173 TrackedPreferencesMigrator::~TrackedPreferencesMigrator() {} 175 TrackedPreferencesMigrator::~TrackedPreferencesMigrator() {}
174 176
175 void TrackedPreferencesMigrator::InterceptFilterOnLoad( 177 void TrackedPreferencesMigrator::InterceptFilterOnLoad(
176 PrefFilterID id, 178 PrefFilterID id,
177 const InterceptablePrefFilter::FinalizeFilterOnLoadCallback& 179 const InterceptablePrefFilter::FinalizeFilterOnLoadCallback&
178 finalize_filter_on_load, 180 finalize_filter_on_load,
179 scoped_ptr<base::DictionaryValue> prefs) { 181 base::DictionaryValue* prefs) {
180 switch (id) { 182 switch (id) {
181 case UNPROTECTED_PREF_FILTER: 183 case UNPROTECTED_PREF_FILTER:
182 finalize_unprotected_filter_on_load_ = finalize_filter_on_load; 184 finalize_unprotected_filter_on_load_ = finalize_filter_on_load;
183 unprotected_prefs_ = prefs.Pass(); 185 unprotected_prefs_ = prefs;
184 break; 186 break;
185 case PROTECTED_PREF_FILTER: 187 case PROTECTED_PREF_FILTER:
186 finalize_protected_filter_on_load_ = finalize_filter_on_load; 188 finalize_protected_filter_on_load_ = finalize_filter_on_load;
187 protected_prefs_ = prefs.Pass(); 189 protected_prefs_ = prefs;
188 break; 190 break;
189 } 191 }
190 192
191 MigrateIfReady(); 193 MigrateIfReady();
192 } 194 }
193 195
194 void TrackedPreferencesMigrator::MigrateIfReady() { 196 void TrackedPreferencesMigrator::MigrateIfReady() {
195 // Wait for both stores to have been read before proceeding. 197 // Wait for both stores to have been read before proceeding.
196 if (!protected_prefs_ || !unprotected_prefs_) 198 if (!protected_prefs_ || !unprotected_prefs_)
197 return; 199 return;
198 200
199 bool protected_prefs_need_cleanup = false; 201 bool protected_prefs_need_cleanup = false;
200 bool unprotected_prefs_altered = false; 202 bool unprotected_prefs_altered = false;
201 MigratePrefsFromOldToNewStore(unprotected_pref_names_, 203 MigratePrefsFromOldToNewStore(unprotected_pref_names_,
202 protected_prefs_.get(), 204 protected_prefs_,
203 unprotected_prefs_.get(), 205 unprotected_prefs_,
204 &protected_prefs_need_cleanup, 206 &protected_prefs_need_cleanup,
205 &unprotected_prefs_altered); 207 &unprotected_prefs_altered);
206 bool unprotected_prefs_need_cleanup = false; 208 bool unprotected_prefs_need_cleanup = false;
207 bool protected_prefs_altered = false; 209 bool protected_prefs_altered = false;
208 MigratePrefsFromOldToNewStore(protected_pref_names_, 210 MigratePrefsFromOldToNewStore(protected_pref_names_,
209 unprotected_prefs_.get(), 211 unprotected_prefs_,
210 protected_prefs_.get(), 212 protected_prefs_,
211 &unprotected_prefs_need_cleanup, 213 &unprotected_prefs_need_cleanup,
212 &protected_prefs_altered); 214 &protected_prefs_altered);
213 215
214 // Hand the processed prefs back to their respective filters. 216 // Allow preference loading to proceed.
215 finalize_unprotected_filter_on_load_.Run(unprotected_prefs_.Pass(), 217 unprotected_prefs_ = NULL;
216 unprotected_prefs_altered); 218 protected_prefs_ = NULL;
217 finalize_protected_filter_on_load_.Run(protected_prefs_.Pass(), 219 finalize_unprotected_filter_on_load_.Run(unprotected_prefs_altered);
218 protected_prefs_altered); 220 finalize_protected_filter_on_load_.Run(protected_prefs_altered);
219 221
220 if (unprotected_prefs_need_cleanup) { 222 if (unprotected_prefs_need_cleanup) {
221 // Schedule a cleanup of the |protected_pref_names_| from the unprotected 223 // Schedule a cleanup of the |protected_pref_names_| from the unprotected
222 // prefs once the protected prefs were successfully written to disk (or 224 // prefs once the protected prefs were successfully written to disk (or
223 // do it immediately if |!protected_prefs_altered|). 225 // do it immediately if |!protected_prefs_altered|).
224 ScheduleSourcePrefStoreCleanup( 226 ScheduleSourcePrefStoreCleanup(
225 register_on_successful_protected_store_write_callback_, 227 register_on_successful_protected_store_write_callback_,
226 unprotected_store_cleaner_, 228 unprotected_store_cleaner_,
227 protected_pref_names_, 229 protected_pref_names_,
228 protected_prefs_altered); 230 protected_prefs_altered);
(...skipping 29 matching lines...) Expand all
258 new TrackedPreferencesMigrator( 260 new TrackedPreferencesMigrator(
259 unprotected_pref_names, 261 unprotected_pref_names,
260 protected_pref_names, 262 protected_pref_names,
261 unprotected_store_cleaner, 263 unprotected_store_cleaner,
262 protected_store_cleaner, 264 protected_store_cleaner,
263 register_on_successful_unprotected_store_write_callback, 265 register_on_successful_unprotected_store_write_callback,
264 register_on_successful_protected_store_write_callback, 266 register_on_successful_protected_store_write_callback,
265 unprotected_pref_filter, 267 unprotected_pref_filter,
266 protected_pref_filter)); 268 protected_pref_filter));
267 } 269 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698