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

Side by Side Diff: chrome/browser/invalidation/invalidator_storage.cc

Issue 59793008: sync: don't allow NULL profile in ProfileSyncService and friends (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix test Created 7 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/invalidation/invalidator_storage.h" 5 #include "chrome/browser/invalidation/invalidator_storage.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 prefs::kInvalidatorClientId, 107 prefs::kInvalidatorClientId,
108 std::string(), 108 std::string(),
109 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 109 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
110 registry->RegisterDictionaryPref( 110 registry->RegisterDictionaryPref(
111 prefs::kSyncMaxInvalidationVersions, 111 prefs::kSyncMaxInvalidationVersions,
112 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 112 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
113 } 113 }
114 114
115 InvalidatorStorage::InvalidatorStorage(PrefService* pref_service) 115 InvalidatorStorage::InvalidatorStorage(PrefService* pref_service)
116 : pref_service_(pref_service) { 116 : pref_service_(pref_service) {
117 // TODO(tim): Create a Mock instead of maintaining the if(!pref_service_) case 117 DCHECK(pref_service);
118 // throughout this file. This is a problem now due to lack of injection at 118 MigrateMaxInvalidationVersionsPref();
119 // ProfileSyncService. Bug 130176.
120 if (pref_service_)
121 MigrateMaxInvalidationVersionsPref();
122 } 119 }
123 120
124 InvalidatorStorage::~InvalidatorStorage() { 121 InvalidatorStorage::~InvalidatorStorage() {
125 } 122 }
126 123
127 InvalidationStateMap InvalidatorStorage::GetAllInvalidationStates() const { 124 InvalidationStateMap InvalidatorStorage::GetAllInvalidationStates() const {
128 DCHECK(thread_checker_.CalledOnValidThread()); 125 DCHECK(thread_checker_.CalledOnValidThread());
129 InvalidationStateMap state_map; 126 InvalidationStateMap state_map;
130 if (!pref_service_) {
131 return state_map;
132 }
133 const base::ListValue* state_map_list = 127 const base::ListValue* state_map_list =
134 pref_service_->GetList(prefs::kInvalidatorMaxInvalidationVersions); 128 pref_service_->GetList(prefs::kInvalidatorMaxInvalidationVersions);
135 CHECK(state_map_list); 129 CHECK(state_map_list);
136 DeserializeFromList(*state_map_list, &state_map); 130 DeserializeFromList(*state_map_list, &state_map);
137 return state_map; 131 return state_map;
138 } 132 }
139 133
140 void InvalidatorStorage::SetMaxVersionAndPayload( 134 void InvalidatorStorage::SetMaxVersionAndPayload(
141 const invalidation::ObjectId& id, 135 const invalidation::ObjectId& id,
142 int64 max_version, 136 int64 max_version,
143 const std::string& payload) { 137 const std::string& payload) {
144 DCHECK(thread_checker_.CalledOnValidThread()); 138 DCHECK(thread_checker_.CalledOnValidThread());
145 CHECK(pref_service_);
146 InvalidationStateMap state_map = GetAllInvalidationStates(); 139 InvalidationStateMap state_map = GetAllInvalidationStates();
147 InvalidationStateMap::iterator it = state_map.find(id); 140 InvalidationStateMap::iterator it = state_map.find(id);
148 if ((it != state_map.end()) && (max_version <= it->second.version)) { 141 if ((it != state_map.end()) && (max_version <= it->second.version)) {
149 NOTREACHED(); 142 NOTREACHED();
150 return; 143 return;
151 } 144 }
152 state_map[id].version = max_version; 145 state_map[id].version = max_version;
153 state_map[id].payload = payload; 146 state_map[id].payload = payload;
154 147
155 base::ListValue state_map_list; 148 base::ListValue state_map_list;
156 SerializeToList(state_map, &state_map_list); 149 SerializeToList(state_map, &state_map_list);
157 pref_service_->Set(prefs::kInvalidatorMaxInvalidationVersions, 150 pref_service_->Set(prefs::kInvalidatorMaxInvalidationVersions,
158 state_map_list); 151 state_map_list);
159 } 152 }
160 153
161 void InvalidatorStorage::Forget(const syncer::ObjectIdSet& ids) { 154 void InvalidatorStorage::Forget(const syncer::ObjectIdSet& ids) {
162 DCHECK(thread_checker_.CalledOnValidThread()); 155 DCHECK(thread_checker_.CalledOnValidThread());
163 CHECK(pref_service_);
164 InvalidationStateMap state_map = GetAllInvalidationStates(); 156 InvalidationStateMap state_map = GetAllInvalidationStates();
165 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); 157 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end();
166 ++it) { 158 ++it) {
167 state_map.erase(*it); 159 state_map.erase(*it);
168 } 160 }
169 161
170 base::ListValue state_map_list; 162 base::ListValue state_map_list;
171 SerializeToList(state_map, &state_map_list); 163 SerializeToList(state_map, &state_map_list);
172 pref_service_->Set(prefs::kInvalidatorMaxInvalidationVersions, 164 pref_service_->Set(prefs::kInvalidatorMaxInvalidationVersions,
173 state_map_list); 165 state_map_list);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 } 257 }
266 } 258 }
267 259
268 void InvalidatorStorage::SetInvalidatorClientId(const std::string& client_id) { 260 void InvalidatorStorage::SetInvalidatorClientId(const std::string& client_id) {
269 DCHECK(thread_checker_.CalledOnValidThread()); 261 DCHECK(thread_checker_.CalledOnValidThread());
270 Clear(); // We can't reuse our old invalidation state if the ID changes. 262 Clear(); // We can't reuse our old invalidation state if the ID changes.
271 pref_service_->SetString(prefs::kInvalidatorClientId, client_id); 263 pref_service_->SetString(prefs::kInvalidatorClientId, client_id);
272 } 264 }
273 265
274 std::string InvalidatorStorage::GetInvalidatorClientId() const { 266 std::string InvalidatorStorage::GetInvalidatorClientId() const {
275 return pref_service_ ? 267 return pref_service_->GetString(prefs::kInvalidatorClientId);
276 pref_service_->GetString(prefs::kInvalidatorClientId) :
277 std::string();
278 } 268 }
279 269
280 void InvalidatorStorage::SetBootstrapData(const std::string& data) { 270 void InvalidatorStorage::SetBootstrapData(const std::string& data) {
281 DCHECK(thread_checker_.CalledOnValidThread()); 271 DCHECK(thread_checker_.CalledOnValidThread());
282 std::string base64_data; 272 std::string base64_data;
283 base::Base64Encode(data, &base64_data); 273 base::Base64Encode(data, &base64_data);
284 pref_service_->SetString(prefs::kInvalidatorInvalidationState, 274 pref_service_->SetString(prefs::kInvalidatorInvalidationState,
285 base64_data); 275 base64_data);
286 } 276 }
287 277
288 std::string InvalidatorStorage::GetBootstrapData() const { 278 std::string InvalidatorStorage::GetBootstrapData() const {
289 std::string base64_data( 279 std::string base64_data(
290 pref_service_ 280 pref_service_->GetString(prefs::kInvalidatorInvalidationState));
291 ? pref_service_->GetString(prefs::kInvalidatorInvalidationState)
292 : std::string());
293 std::string data; 281 std::string data;
294 base::Base64Decode(base64_data, &data); 282 base::Base64Decode(base64_data, &data);
295 return data; 283 return data;
296 } 284 }
297 285
298 void InvalidatorStorage::Clear() { 286 void InvalidatorStorage::Clear() {
299 DCHECK(thread_checker_.CalledOnValidThread()); 287 DCHECK(thread_checker_.CalledOnValidThread());
300 pref_service_->ClearPref(prefs::kInvalidatorMaxInvalidationVersions); 288 pref_service_->ClearPref(prefs::kInvalidatorMaxInvalidationVersions);
301 pref_service_->ClearPref(prefs::kInvalidatorClientId); 289 pref_service_->ClearPref(prefs::kInvalidatorClientId);
302 pref_service_->ClearPref(prefs::kInvalidatorInvalidationState); 290 pref_service_->ClearPref(prefs::kInvalidatorInvalidationState);
303 } 291 }
304 292
305 void InvalidatorStorage::GenerateAckHandles( 293 void InvalidatorStorage::GenerateAckHandles(
306 const syncer::ObjectIdSet& ids, 294 const syncer::ObjectIdSet& ids,
307 const scoped_refptr<base::TaskRunner>& task_runner, 295 const scoped_refptr<base::TaskRunner>& task_runner,
308 const base::Callback<void(const syncer::AckHandleMap&)> callback) { 296 const base::Callback<void(const syncer::AckHandleMap&)> callback) {
309 DCHECK(thread_checker_.CalledOnValidThread()); 297 DCHECK(thread_checker_.CalledOnValidThread());
310 CHECK(pref_service_);
311 InvalidationStateMap state_map = GetAllInvalidationStates(); 298 InvalidationStateMap state_map = GetAllInvalidationStates();
312 299
313 syncer::AckHandleMap ack_handles; 300 syncer::AckHandleMap ack_handles;
314 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); 301 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end();
315 ++it) { 302 ++it) {
316 state_map[*it].expected = syncer::AckHandle::CreateUnique(); 303 state_map[*it].expected = syncer::AckHandle::CreateUnique();
317 ack_handles.insert(std::make_pair(*it, state_map[*it].expected)); 304 ack_handles.insert(std::make_pair(*it, state_map[*it].expected));
318 } 305 }
319 306
320 base::ListValue state_map_list; 307 base::ListValue state_map_list;
321 SerializeToList(state_map, &state_map_list); 308 SerializeToList(state_map, &state_map_list);
322 pref_service_->Set(prefs::kInvalidatorMaxInvalidationVersions, 309 pref_service_->Set(prefs::kInvalidatorMaxInvalidationVersions,
323 state_map_list); 310 state_map_list);
324 311
325 ignore_result(task_runner->PostTask(FROM_HERE, 312 ignore_result(task_runner->PostTask(FROM_HERE,
326 base::Bind(callback, ack_handles))); 313 base::Bind(callback, ack_handles)));
327 } 314 }
328 315
329 void InvalidatorStorage::Acknowledge(const invalidation::ObjectId& id, 316 void InvalidatorStorage::Acknowledge(const invalidation::ObjectId& id,
330 const syncer::AckHandle& ack_handle) { 317 const syncer::AckHandle& ack_handle) {
331 DCHECK(thread_checker_.CalledOnValidThread()); 318 DCHECK(thread_checker_.CalledOnValidThread());
332 CHECK(pref_service_);
333 InvalidationStateMap state_map = GetAllInvalidationStates(); 319 InvalidationStateMap state_map = GetAllInvalidationStates();
334 320
335 InvalidationStateMap::iterator it = state_map.find(id); 321 InvalidationStateMap::iterator it = state_map.find(id);
336 // This could happen if the acknowledgement is delayed and Forget() has 322 // This could happen if the acknowledgement is delayed and Forget() has
337 // already been called. 323 // already been called.
338 if (it == state_map.end()) 324 if (it == state_map.end())
339 return; 325 return;
340 it->second.current = ack_handle; 326 it->second.current = ack_handle;
341 327
342 base::ListValue state_map_list; 328 base::ListValue state_map_list;
343 SerializeToList(state_map, &state_map_list); 329 SerializeToList(state_map, &state_map_list);
344 pref_service_->Set(prefs::kInvalidatorMaxInvalidationVersions, 330 pref_service_->Set(prefs::kInvalidatorMaxInvalidationVersions,
345 state_map_list); 331 state_map_list);
346 } 332 }
347 333
348 } // namespace invalidation 334 } // namespace invalidation
OLDNEW
« no previous file with comments | « chrome/browser/invalidation/invalidator_storage.h ('k') | chrome/browser/sync/backend_migrator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698