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

Side by Side Diff: content/browser/background_sync/background_sync_manager.cc

Issue 1170623003: Revert "content: Remove use of MessageLoopProxy and deprecated MessageLoop APIs" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/browser/background_sync/background_sync_manager.h" 5 #include "content/browser/background_sync/background_sync_manager.h"
6 6
7 #include "base/barrier_closure.h" 7 #include "base/barrier_closure.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/location.h"
10 #include "base/single_thread_task_runner.h"
11 #include "base/thread_task_runner_handle.h"
12 #include "content/browser/background_sync/background_sync_network_observer.h" 9 #include "content/browser/background_sync/background_sync_network_observer.h"
13 #include "content/browser/background_sync/background_sync_power_observer.h" 10 #include "content/browser/background_sync/background_sync_power_observer.h"
14 #include "content/browser/service_worker/service_worker_context_wrapper.h" 11 #include "content/browser/service_worker/service_worker_context_wrapper.h"
15 #include "content/browser/service_worker/service_worker_storage.h" 12 #include "content/browser/service_worker/service_worker_storage.h"
16 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
17 14
18 #if defined(OS_ANDROID) 15 #if defined(OS_ANDROID)
19 #include "content/browser/android/background_sync_launcher_android.h" 16 #include "content/browser/android/background_sync_launcher_android.h"
20 #endif 17 #endif
21 18
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 68
72 void BackgroundSyncManager::Register( 69 void BackgroundSyncManager::Register(
73 int64 sw_registration_id, 70 int64 sw_registration_id,
74 const BackgroundSyncRegistration& sync_registration, 71 const BackgroundSyncRegistration& sync_registration,
75 const StatusAndRegistrationCallback& callback) { 72 const StatusAndRegistrationCallback& callback) {
76 DCHECK_CURRENTLY_ON(BrowserThread::IO); 73 DCHECK_CURRENTLY_ON(BrowserThread::IO);
77 DCHECK_EQ(BackgroundSyncRegistration::kInvalidRegistrationId, 74 DCHECK_EQ(BackgroundSyncRegistration::kInvalidRegistrationId,
78 sync_registration.id); 75 sync_registration.id);
79 76
80 if (disabled_) { 77 if (disabled_) {
81 base::ThreadTaskRunnerHandle::Get()->PostTask( 78 base::MessageLoop::current()->PostTask(
82 FROM_HERE, 79 FROM_HERE,
83 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration())); 80 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration()));
84 return; 81 return;
85 } 82 }
86 83
87 op_scheduler_.ScheduleOperation(base::Bind( 84 op_scheduler_.ScheduleOperation(base::Bind(
88 &BackgroundSyncManager::RegisterImpl, weak_ptr_factory_.GetWeakPtr(), 85 &BackgroundSyncManager::RegisterImpl, weak_ptr_factory_.GetWeakPtr(),
89 sw_registration_id, sync_registration, 86 sw_registration_id, sync_registration,
90 MakeStatusAndRegistrationCompletion(callback))); 87 MakeStatusAndRegistrationCompletion(callback)));
91 } 88 }
92 89
93 void BackgroundSyncManager::Unregister( 90 void BackgroundSyncManager::Unregister(
94 int64 sw_registration_id, 91 int64 sw_registration_id,
95 const std::string& sync_registration_tag, 92 const std::string& sync_registration_tag,
96 SyncPeriodicity periodicity, 93 SyncPeriodicity periodicity,
97 BackgroundSyncRegistration::RegistrationId sync_registration_id, 94 BackgroundSyncRegistration::RegistrationId sync_registration_id,
98 const StatusCallback& callback) { 95 const StatusCallback& callback) {
99 DCHECK_CURRENTLY_ON(BrowserThread::IO); 96 DCHECK_CURRENTLY_ON(BrowserThread::IO);
100 97
101 if (disabled_) { 98 if (disabled_) {
102 base::ThreadTaskRunnerHandle::Get()->PostTask( 99 base::MessageLoop::current()->PostTask(
103 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE)); 100 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE));
104 return; 101 return;
105 } 102 }
106 103
107 RegistrationKey registration_key(sync_registration_tag, periodicity); 104 RegistrationKey registration_key(sync_registration_tag, periodicity);
108 105
109 op_scheduler_.ScheduleOperation(base::Bind( 106 op_scheduler_.ScheduleOperation(base::Bind(
110 &BackgroundSyncManager::UnregisterImpl, weak_ptr_factory_.GetWeakPtr(), 107 &BackgroundSyncManager::UnregisterImpl, weak_ptr_factory_.GetWeakPtr(),
111 sw_registration_id, registration_key, sync_registration_id, 108 sw_registration_id, registration_key, sync_registration_id,
112 MakeStatusCompletion(callback))); 109 MakeStatusCompletion(callback)));
113 } 110 }
114 111
115 void BackgroundSyncManager::GetRegistration( 112 void BackgroundSyncManager::GetRegistration(
116 int64 sw_registration_id, 113 int64 sw_registration_id,
117 const std::string& sync_registration_tag, 114 const std::string& sync_registration_tag,
118 SyncPeriodicity periodicity, 115 SyncPeriodicity periodicity,
119 const StatusAndRegistrationCallback& callback) { 116 const StatusAndRegistrationCallback& callback) {
120 DCHECK_CURRENTLY_ON(BrowserThread::IO); 117 DCHECK_CURRENTLY_ON(BrowserThread::IO);
121 118
122 if (disabled_) { 119 if (disabled_) {
123 base::ThreadTaskRunnerHandle::Get()->PostTask( 120 base::MessageLoop::current()->PostTask(
124 FROM_HERE, 121 FROM_HERE,
125 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration())); 122 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration()));
126 return; 123 return;
127 } 124 }
128 125
129 RegistrationKey registration_key(sync_registration_tag, periodicity); 126 RegistrationKey registration_key(sync_registration_tag, periodicity);
130 127
131 op_scheduler_.ScheduleOperation(base::Bind( 128 op_scheduler_.ScheduleOperation(base::Bind(
132 &BackgroundSyncManager::GetRegistrationImpl, 129 &BackgroundSyncManager::GetRegistrationImpl,
133 weak_ptr_factory_.GetWeakPtr(), sw_registration_id, registration_key, 130 weak_ptr_factory_.GetWeakPtr(), sw_registration_id, registration_key,
134 MakeStatusAndRegistrationCompletion(callback))); 131 MakeStatusAndRegistrationCompletion(callback)));
135 } 132 }
136 133
137 void BackgroundSyncManager::GetRegistrations( 134 void BackgroundSyncManager::GetRegistrations(
138 int64 sw_registration_id, 135 int64 sw_registration_id,
139 SyncPeriodicity periodicity, 136 SyncPeriodicity periodicity,
140 const StatusAndRegistrationsCallback& callback) { 137 const StatusAndRegistrationsCallback& callback) {
141 DCHECK_CURRENTLY_ON(BrowserThread::IO); 138 DCHECK_CURRENTLY_ON(BrowserThread::IO);
142 139
143 if (disabled_) { 140 if (disabled_) {
144 base::ThreadTaskRunnerHandle::Get()->PostTask( 141 base::MessageLoop::current()->PostTask(
145 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE, 142 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE,
146 std::vector<BackgroundSyncRegistration>())); 143 std::vector<BackgroundSyncRegistration>()));
147 return; 144 return;
148 } 145 }
149 146
150 op_scheduler_.ScheduleOperation( 147 op_scheduler_.ScheduleOperation(
151 base::Bind(&BackgroundSyncManager::GetRegistrationsImpl, 148 base::Bind(&BackgroundSyncManager::GetRegistrationsImpl,
152 weak_ptr_factory_.GetWeakPtr(), sw_registration_id, 149 weak_ptr_factory_.GetWeakPtr(), sw_registration_id,
153 periodicity, MakeStatusAndRegistrationsCompletion(callback))); 150 periodicity, MakeStatusAndRegistrationsCompletion(callback)));
154 } 151 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 196
200 op_scheduler_.ScheduleOperation(base::Bind(&BackgroundSyncManager::InitImpl, 197 op_scheduler_.ScheduleOperation(base::Bind(&BackgroundSyncManager::InitImpl,
201 weak_ptr_factory_.GetWeakPtr(), 198 weak_ptr_factory_.GetWeakPtr(),
202 MakeEmptyCompletion())); 199 MakeEmptyCompletion()));
203 } 200 }
204 201
205 void BackgroundSyncManager::InitImpl(const base::Closure& callback) { 202 void BackgroundSyncManager::InitImpl(const base::Closure& callback) {
206 DCHECK_CURRENTLY_ON(BrowserThread::IO); 203 DCHECK_CURRENTLY_ON(BrowserThread::IO);
207 204
208 if (disabled_) { 205 if (disabled_) {
209 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 206 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
210 base::Bind(callback));
211 return; 207 return;
212 } 208 }
213 209
214 GetDataFromBackend( 210 GetDataFromBackend(
215 kBackgroundSyncUserDataKey, 211 kBackgroundSyncUserDataKey,
216 base::Bind(&BackgroundSyncManager::InitDidGetDataFromBackend, 212 base::Bind(&BackgroundSyncManager::InitDidGetDataFromBackend,
217 weak_ptr_factory_.GetWeakPtr(), callback)); 213 weak_ptr_factory_.GetWeakPtr(), callback));
218 } 214 }
219 215
220 void BackgroundSyncManager::InitDidGetDataFromBackend( 216 void BackgroundSyncManager::InitDidGetDataFromBackend(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 } 269 }
274 270
275 if (corruption_detected) { 271 if (corruption_detected) {
276 LOG(ERROR) << "Corruption detected in background sync backend"; 272 LOG(ERROR) << "Corruption detected in background sync backend";
277 DisableAndClearManager(base::Bind(callback)); 273 DisableAndClearManager(base::Bind(callback));
278 return; 274 return;
279 } 275 }
280 276
281 FireReadyEvents(); 277 FireReadyEvents();
282 278
283 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 279 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
284 base::Bind(callback));
285 } 280 }
286 281
287 void BackgroundSyncManager::RegisterImpl( 282 void BackgroundSyncManager::RegisterImpl(
288 int64 sw_registration_id, 283 int64 sw_registration_id,
289 const BackgroundSyncRegistration& sync_registration, 284 const BackgroundSyncRegistration& sync_registration,
290 const StatusAndRegistrationCallback& callback) { 285 const StatusAndRegistrationCallback& callback) {
291 DCHECK_CURRENTLY_ON(BrowserThread::IO); 286 DCHECK_CURRENTLY_ON(BrowserThread::IO);
292 287
293 if (disabled_) { 288 if (disabled_) {
294 base::ThreadTaskRunnerHandle::Get()->PostTask( 289 base::MessageLoop::current()->PostTask(
295 FROM_HERE, 290 FROM_HERE,
296 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration())); 291 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration()));
297 return; 292 return;
298 } 293 }
299 294
300 const BackgroundSyncRegistration* existing_registration = LookupRegistration( 295 const BackgroundSyncRegistration* existing_registration = LookupRegistration(
301 sw_registration_id, RegistrationKey(sync_registration)); 296 sw_registration_id, RegistrationKey(sync_registration));
302 if (existing_registration && 297 if (existing_registration &&
303 existing_registration->Equals(sync_registration)) { 298 existing_registration->Equals(sync_registration)) {
304 base::ThreadTaskRunnerHandle::Get()->PostTask( 299 base::MessageLoop::current()->PostTask(
305 FROM_HERE, base::Bind(callback, ERROR_TYPE_OK, *existing_registration)); 300 FROM_HERE, base::Bind(callback, ERROR_TYPE_OK, *existing_registration));
306 return; 301 return;
307 } 302 }
308 303
309 BackgroundSyncRegistration new_registration = sync_registration; 304 BackgroundSyncRegistration new_registration = sync_registration;
310 BackgroundSyncRegistrations* registrations = 305 BackgroundSyncRegistrations* registrations =
311 &sw_to_registrations_map_[sw_registration_id]; 306 &sw_to_registrations_map_[sw_registration_id];
312 new_registration.id = registrations->next_id++; 307 new_registration.id = registrations->next_id++;
313 308
314 ServiceWorkerRegistration* sw_registration = 309 ServiceWorkerRegistration* sw_registration =
315 service_worker_context_->GetLiveRegistration(sw_registration_id); 310 service_worker_context_->GetLiveRegistration(sw_registration_id);
316 if (!sw_registration || !sw_registration->active_version()) { 311 if (!sw_registration || !sw_registration->active_version()) {
317 base::ThreadTaskRunnerHandle::Get()->PostTask( 312 base::MessageLoop::current()->PostTask(
318 FROM_HERE, base::Bind(callback, ERROR_TYPE_NO_SERVICE_WORKER, 313 FROM_HERE, base::Bind(callback, ERROR_TYPE_NO_SERVICE_WORKER,
319 BackgroundSyncRegistration())); 314 BackgroundSyncRegistration()));
320 return; 315 return;
321 } 316 }
322 317
323 AddRegistrationToMap(sw_registration_id, 318 AddRegistrationToMap(sw_registration_id,
324 sw_registration->pattern().GetOrigin(), 319 sw_registration->pattern().GetOrigin(),
325 new_registration); 320 new_registration);
326 321
327 StoreRegistrations( 322 StoreRegistrations(
328 sw_registration_id, 323 sw_registration_id,
329 base::Bind(&BackgroundSyncManager::RegisterDidStore, 324 base::Bind(&BackgroundSyncManager::RegisterDidStore,
330 weak_ptr_factory_.GetWeakPtr(), sw_registration_id, 325 weak_ptr_factory_.GetWeakPtr(), sw_registration_id,
331 new_registration, callback)); 326 new_registration, callback));
332 } 327 }
333 328
334 void BackgroundSyncManager::DisableAndClearManager( 329 void BackgroundSyncManager::DisableAndClearManager(
335 const base::Closure& callback) { 330 const base::Closure& callback) {
336 DCHECK_CURRENTLY_ON(BrowserThread::IO); 331 DCHECK_CURRENTLY_ON(BrowserThread::IO);
337 332
338 if (disabled_) { 333 if (disabled_) {
339 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 334 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
340 base::Bind(callback));
341 return; 335 return;
342 } 336 }
343 337
344 disabled_ = true; 338 disabled_ = true;
345 sw_to_registrations_map_.clear(); 339 sw_to_registrations_map_.clear();
346 340
347 // Delete all backend entries. The memory representation of registered syncs 341 // Delete all backend entries. The memory representation of registered syncs
348 // may be out of sync with storage (e.g., due to corruption detection on 342 // may be out of sync with storage (e.g., due to corruption detection on
349 // loading from storage), so reload the registrations from storage again. 343 // loading from storage), so reload the registrations from storage again.
350 GetDataFromBackend( 344 GetDataFromBackend(
351 kBackgroundSyncUserDataKey, 345 kBackgroundSyncUserDataKey,
352 base::Bind(&BackgroundSyncManager::DisableAndClearDidGetRegistrations, 346 base::Bind(&BackgroundSyncManager::DisableAndClearDidGetRegistrations,
353 weak_ptr_factory_.GetWeakPtr(), callback)); 347 weak_ptr_factory_.GetWeakPtr(), callback));
354 } 348 }
355 349
356 void BackgroundSyncManager::DisableAndClearDidGetRegistrations( 350 void BackgroundSyncManager::DisableAndClearDidGetRegistrations(
357 const base::Closure& callback, 351 const base::Closure& callback,
358 const std::vector<std::pair<int64, std::string>>& user_data, 352 const std::vector<std::pair<int64, std::string>>& user_data,
359 ServiceWorkerStatusCode status) { 353 ServiceWorkerStatusCode status) {
360 DCHECK_CURRENTLY_ON(BrowserThread::IO); 354 DCHECK_CURRENTLY_ON(BrowserThread::IO);
361 355
362 if (status != SERVICE_WORKER_OK || user_data.empty()) { 356 if (status != SERVICE_WORKER_OK || user_data.empty()) {
363 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 357 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
364 base::Bind(callback));
365 return; 358 return;
366 } 359 }
367 360
368 base::Closure barrier_closure = 361 base::Closure barrier_closure =
369 base::BarrierClosure(user_data.size(), base::Bind(callback)); 362 base::BarrierClosure(user_data.size(), base::Bind(callback));
370 363
371 for (const auto& sw_id_and_regs : user_data) { 364 for (const auto& sw_id_and_regs : user_data) {
372 service_worker_context_->ClearRegistrationUserData( 365 service_worker_context_->ClearRegistrationUserData(
373 sw_id_and_regs.first, kBackgroundSyncUserDataKey, 366 sw_id_and_regs.first, kBackgroundSyncUserDataKey,
374 base::Bind(&BackgroundSyncManager::DisableAndClearManagerClearedOne, 367 base::Bind(&BackgroundSyncManager::DisableAndClearManagerClearedOne,
375 weak_ptr_factory_.GetWeakPtr(), barrier_closure)); 368 weak_ptr_factory_.GetWeakPtr(), barrier_closure));
376 } 369 }
377 } 370 }
378 371
379 void BackgroundSyncManager::DisableAndClearManagerClearedOne( 372 void BackgroundSyncManager::DisableAndClearManagerClearedOne(
380 const base::Closure& barrier_closure, 373 const base::Closure& barrier_closure,
381 ServiceWorkerStatusCode status) { 374 ServiceWorkerStatusCode status) {
382 DCHECK_CURRENTLY_ON(BrowserThread::IO); 375 DCHECK_CURRENTLY_ON(BrowserThread::IO);
383 376
384 // The status doesn't matter at this point, there is nothing else to be done. 377 // The status doesn't matter at this point, there is nothing else to be done.
385 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 378 base::MessageLoop::current()->PostTask(FROM_HERE,
386 base::Bind(barrier_closure)); 379 base::Bind(barrier_closure));
387 } 380 }
388 381
389 BackgroundSyncManager::BackgroundSyncRegistration* 382 BackgroundSyncManager::BackgroundSyncRegistration*
390 BackgroundSyncManager::LookupRegistration( 383 BackgroundSyncManager::LookupRegistration(
391 int64 sw_registration_id, 384 int64 sw_registration_id,
392 const RegistrationKey& registration_key) { 385 const RegistrationKey& registration_key) {
393 DCHECK_CURRENTLY_ON(BrowserThread::IO); 386 DCHECK_CURRENTLY_ON(BrowserThread::IO);
394 387
395 SWIdToRegistrationsMap::iterator it = 388 SWIdToRegistrationsMap::iterator it =
396 sw_to_registrations_map_.find(sw_registration_id); 389 sw_to_registrations_map_.find(sw_registration_id);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 void BackgroundSyncManager::RegisterDidStore( 438 void BackgroundSyncManager::RegisterDidStore(
446 int64 sw_registration_id, 439 int64 sw_registration_id,
447 const BackgroundSyncRegistration& new_registration, 440 const BackgroundSyncRegistration& new_registration,
448 const StatusAndRegistrationCallback& callback, 441 const StatusAndRegistrationCallback& callback,
449 ServiceWorkerStatusCode status) { 442 ServiceWorkerStatusCode status) {
450 DCHECK_CURRENTLY_ON(BrowserThread::IO); 443 DCHECK_CURRENTLY_ON(BrowserThread::IO);
451 444
452 if (status == SERVICE_WORKER_ERROR_NOT_FOUND) { 445 if (status == SERVICE_WORKER_ERROR_NOT_FOUND) {
453 // The registration is gone. 446 // The registration is gone.
454 sw_to_registrations_map_.erase(sw_registration_id); 447 sw_to_registrations_map_.erase(sw_registration_id);
455 base::ThreadTaskRunnerHandle::Get()->PostTask( 448 base::MessageLoop::current()->PostTask(
456 FROM_HERE, 449 FROM_HERE,
457 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration())); 450 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration()));
458 return; 451 return;
459 } 452 }
460 453
461 if (status != SERVICE_WORKER_OK) { 454 if (status != SERVICE_WORKER_OK) {
462 LOG(ERROR) << "BackgroundSync failed to store registration due to backend " 455 LOG(ERROR) << "BackgroundSync failed to store registration due to backend "
463 "failure."; 456 "failure.";
464 DisableAndClearManager( 457 DisableAndClearManager(
465 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration())); 458 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration()));
466 return; 459 return;
467 } 460 }
468 461
469 FireReadyEvents(); 462 FireReadyEvents();
470 base::ThreadTaskRunnerHandle::Get()->PostTask( 463 base::MessageLoop::current()->PostTask(
471 FROM_HERE, base::Bind(callback, ERROR_TYPE_OK, new_registration)); 464 FROM_HERE, base::Bind(callback, ERROR_TYPE_OK, new_registration));
472 } 465 }
473 466
474 void BackgroundSyncManager::RemoveRegistrationFromMap( 467 void BackgroundSyncManager::RemoveRegistrationFromMap(
475 int64 sw_registration_id, 468 int64 sw_registration_id,
476 const RegistrationKey& registration_key) { 469 const RegistrationKey& registration_key) {
477 DCHECK_CURRENTLY_ON(BrowserThread::IO); 470 DCHECK_CURRENTLY_ON(BrowserThread::IO);
478 DCHECK(LookupRegistration(sw_registration_id, registration_key)); 471 DCHECK(LookupRegistration(sw_registration_id, registration_key));
479 472
480 BackgroundSyncRegistrations* registrations = 473 BackgroundSyncRegistrations* registrations =
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 } 523 }
531 524
532 void BackgroundSyncManager::UnregisterImpl( 525 void BackgroundSyncManager::UnregisterImpl(
533 int64 sw_registration_id, 526 int64 sw_registration_id,
534 const RegistrationKey& registration_key, 527 const RegistrationKey& registration_key,
535 BackgroundSyncRegistration::RegistrationId sync_registration_id, 528 BackgroundSyncRegistration::RegistrationId sync_registration_id,
536 const StatusCallback& callback) { 529 const StatusCallback& callback) {
537 DCHECK_CURRENTLY_ON(BrowserThread::IO); 530 DCHECK_CURRENTLY_ON(BrowserThread::IO);
538 531
539 if (disabled_) { 532 if (disabled_) {
540 base::ThreadTaskRunnerHandle::Get()->PostTask( 533 base::MessageLoop::current()->PostTask(
541 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE)); 534 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE));
542 return; 535 return;
543 } 536 }
544 537
545 const BackgroundSyncRegistration* existing_registration = 538 const BackgroundSyncRegistration* existing_registration =
546 LookupRegistration(sw_registration_id, registration_key); 539 LookupRegistration(sw_registration_id, registration_key);
547 if (!existing_registration || 540 if (!existing_registration ||
548 existing_registration->id != sync_registration_id) { 541 existing_registration->id != sync_registration_id) {
549 base::ThreadTaskRunnerHandle::Get()->PostTask( 542 base::MessageLoop::current()->PostTask(
550 FROM_HERE, base::Bind(callback, ERROR_TYPE_NOT_FOUND)); 543 FROM_HERE, base::Bind(callback, ERROR_TYPE_NOT_FOUND));
551 return; 544 return;
552 } 545 }
553 546
554 RemoveRegistrationFromMap(sw_registration_id, registration_key); 547 RemoveRegistrationFromMap(sw_registration_id, registration_key);
555 548
556 StoreRegistrations( 549 StoreRegistrations(
557 sw_registration_id, 550 sw_registration_id,
558 base::Bind(&BackgroundSyncManager::UnregisterDidStore, 551 base::Bind(&BackgroundSyncManager::UnregisterDidStore,
559 weak_ptr_factory_.GetWeakPtr(), sw_registration_id, callback)); 552 weak_ptr_factory_.GetWeakPtr(), sw_registration_id, callback));
560 } 553 }
561 554
562 void BackgroundSyncManager::UnregisterDidStore( 555 void BackgroundSyncManager::UnregisterDidStore(
563 int64 sw_registration_id, 556 int64 sw_registration_id,
564 const StatusCallback& callback, 557 const StatusCallback& callback,
565 ServiceWorkerStatusCode status) { 558 ServiceWorkerStatusCode status) {
566 DCHECK_CURRENTLY_ON(BrowserThread::IO); 559 DCHECK_CURRENTLY_ON(BrowserThread::IO);
567 560
568 if (status == SERVICE_WORKER_ERROR_NOT_FOUND) { 561 if (status == SERVICE_WORKER_ERROR_NOT_FOUND) {
569 // ServiceWorker was unregistered. 562 // ServiceWorker was unregistered.
570 sw_to_registrations_map_.erase(sw_registration_id); 563 sw_to_registrations_map_.erase(sw_registration_id);
571 base::ThreadTaskRunnerHandle::Get()->PostTask( 564 base::MessageLoop::current()->PostTask(
572 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE)); 565 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE));
573 return; 566 return;
574 } 567 }
575 568
576 if (status != SERVICE_WORKER_OK) { 569 if (status != SERVICE_WORKER_OK) {
577 LOG(ERROR) << "BackgroundSync failed to unregister due to backend failure."; 570 LOG(ERROR) << "BackgroundSync failed to unregister due to backend failure.";
578 DisableAndClearManager(base::Bind(callback, ERROR_TYPE_STORAGE)); 571 DisableAndClearManager(base::Bind(callback, ERROR_TYPE_STORAGE));
579 return; 572 return;
580 } 573 }
581 574
582 base::ThreadTaskRunnerHandle::Get()->PostTask( 575 base::MessageLoop::current()->PostTask(FROM_HERE,
583 FROM_HERE, base::Bind(callback, ERROR_TYPE_OK)); 576 base::Bind(callback, ERROR_TYPE_OK));
584 } 577 }
585 578
586 void BackgroundSyncManager::GetRegistrationImpl( 579 void BackgroundSyncManager::GetRegistrationImpl(
587 int64 sw_registration_id, 580 int64 sw_registration_id,
588 const RegistrationKey& registration_key, 581 const RegistrationKey& registration_key,
589 const StatusAndRegistrationCallback& callback) { 582 const StatusAndRegistrationCallback& callback) {
590 DCHECK_CURRENTLY_ON(BrowserThread::IO); 583 DCHECK_CURRENTLY_ON(BrowserThread::IO);
591 584
592 if (disabled_) { 585 if (disabled_) {
593 base::ThreadTaskRunnerHandle::Get()->PostTask( 586 base::MessageLoop::current()->PostTask(
594 FROM_HERE, 587 FROM_HERE,
595 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration())); 588 base::Bind(callback, ERROR_TYPE_STORAGE, BackgroundSyncRegistration()));
596 return; 589 return;
597 } 590 }
598 591
599 const BackgroundSyncRegistration* out_registration = 592 const BackgroundSyncRegistration* out_registration =
600 LookupRegistration(sw_registration_id, registration_key); 593 LookupRegistration(sw_registration_id, registration_key);
601 if (!out_registration) { 594 if (!out_registration) {
602 base::ThreadTaskRunnerHandle::Get()->PostTask( 595 base::MessageLoop::current()->PostTask(
603 FROM_HERE, base::Bind(callback, ERROR_TYPE_NOT_FOUND, 596 FROM_HERE, base::Bind(callback, ERROR_TYPE_NOT_FOUND,
604 BackgroundSyncRegistration())); 597 BackgroundSyncRegistration()));
605 return; 598 return;
606 } 599 }
607 600
608 base::ThreadTaskRunnerHandle::Get()->PostTask( 601 base::MessageLoop::current()->PostTask(
609 FROM_HERE, base::Bind(callback, ERROR_TYPE_OK, *out_registration)); 602 FROM_HERE, base::Bind(callback, ERROR_TYPE_OK, *out_registration));
610 } 603 }
611 604
612 void BackgroundSyncManager::GetRegistrationsImpl( 605 void BackgroundSyncManager::GetRegistrationsImpl(
613 int64 sw_registration_id, 606 int64 sw_registration_id,
614 SyncPeriodicity periodicity, 607 SyncPeriodicity periodicity,
615 const StatusAndRegistrationsCallback& callback) { 608 const StatusAndRegistrationsCallback& callback) {
616 DCHECK_CURRENTLY_ON(BrowserThread::IO); 609 DCHECK_CURRENTLY_ON(BrowserThread::IO);
617 610
618 std::vector<BackgroundSyncRegistration> out_registrations; 611 std::vector<BackgroundSyncRegistration> out_registrations;
619 612
620 if (disabled_) { 613 if (disabled_) {
621 base::ThreadTaskRunnerHandle::Get()->PostTask( 614 base::MessageLoop::current()->PostTask(
622 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE, out_registrations)); 615 FROM_HERE, base::Bind(callback, ERROR_TYPE_STORAGE, out_registrations));
623 return; 616 return;
624 } 617 }
625 618
626 SWIdToRegistrationsMap::iterator it = 619 SWIdToRegistrationsMap::iterator it =
627 sw_to_registrations_map_.find(sw_registration_id); 620 sw_to_registrations_map_.find(sw_registration_id);
628 621
629 if (it != sw_to_registrations_map_.end()) { 622 if (it != sw_to_registrations_map_.end()) {
630 const BackgroundSyncRegistrations& registrations = it->second; 623 const BackgroundSyncRegistrations& registrations = it->second;
631 for (const auto& tag_and_registration : registrations.registration_map) { 624 for (const auto& tag_and_registration : registrations.registration_map) {
632 const BackgroundSyncRegistration& registration = 625 const BackgroundSyncRegistration& registration =
633 tag_and_registration.second; 626 tag_and_registration.second;
634 if (registration.periodicity == periodicity) 627 if (registration.periodicity == periodicity)
635 out_registrations.push_back(registration); 628 out_registrations.push_back(registration);
636 } 629 }
637 } 630 }
638 631
639 base::ThreadTaskRunnerHandle::Get()->PostTask( 632 base::MessageLoop::current()->PostTask(
640 FROM_HERE, base::Bind(callback, ERROR_TYPE_OK, out_registrations)); 633 FROM_HERE, base::Bind(callback, ERROR_TYPE_OK, out_registrations));
641 } 634 }
642 635
643 bool BackgroundSyncManager::IsRegistrationReadyToFire( 636 bool BackgroundSyncManager::IsRegistrationReadyToFire(
644 const BackgroundSyncRegistration& registration) { 637 const BackgroundSyncRegistration& registration) {
645 DCHECK_CURRENTLY_ON(BrowserThread::IO); 638 DCHECK_CURRENTLY_ON(BrowserThread::IO);
646 639
647 // TODO(jkarlin): Add support for firing periodic registrations. 640 // TODO(jkarlin): Add support for firing periodic registrations.
648 if (registration.periodicity == SYNC_PERIODIC) 641 if (registration.periodicity == SYNC_PERIODIC)
649 return false; 642 return false;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 689
697 op_scheduler_.ScheduleOperation( 690 op_scheduler_.ScheduleOperation(
698 base::Bind(&BackgroundSyncManager::FireReadyEventsImpl, 691 base::Bind(&BackgroundSyncManager::FireReadyEventsImpl,
699 weak_ptr_factory_.GetWeakPtr(), MakeEmptyCompletion())); 692 weak_ptr_factory_.GetWeakPtr(), MakeEmptyCompletion()));
700 } 693 }
701 694
702 void BackgroundSyncManager::FireReadyEventsImpl(const base::Closure& callback) { 695 void BackgroundSyncManager::FireReadyEventsImpl(const base::Closure& callback) {
703 DCHECK_CURRENTLY_ON(BrowserThread::IO); 696 DCHECK_CURRENTLY_ON(BrowserThread::IO);
704 697
705 if (disabled_) { 698 if (disabled_) {
706 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 699 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
707 base::Bind(callback));
708 return; 700 return;
709 } 701 }
710 702
711 // Find the registrations that are ready to run. 703 // Find the registrations that are ready to run.
712 std::vector<std::pair<int64, RegistrationKey>> sw_id_and_keys_to_fire; 704 std::vector<std::pair<int64, RegistrationKey>> sw_id_and_keys_to_fire;
713 705
714 for (auto& sw_id_and_registrations : sw_to_registrations_map_) { 706 for (auto& sw_id_and_registrations : sw_to_registrations_map_) {
715 const int64 service_worker_id = sw_id_and_registrations.first; 707 const int64 service_worker_id = sw_id_and_registrations.first;
716 for (auto& key_and_registration : 708 for (auto& key_and_registration :
717 sw_id_and_registrations.second.registration_map) { 709 sw_id_and_registrations.second.registration_map) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 void BackgroundSyncManager::FireReadyEventsDidFindRegistration( 742 void BackgroundSyncManager::FireReadyEventsDidFindRegistration(
751 const RegistrationKey& registration_key, 743 const RegistrationKey& registration_key,
752 BackgroundSyncRegistration::RegistrationId registration_id, 744 BackgroundSyncRegistration::RegistrationId registration_id,
753 const base::Closure& callback, 745 const base::Closure& callback,
754 ServiceWorkerStatusCode service_worker_status, 746 ServiceWorkerStatusCode service_worker_status,
755 const scoped_refptr<ServiceWorkerRegistration>& 747 const scoped_refptr<ServiceWorkerRegistration>&
756 service_worker_registration) { 748 service_worker_registration) {
757 DCHECK_CURRENTLY_ON(BrowserThread::IO); 749 DCHECK_CURRENTLY_ON(BrowserThread::IO);
758 750
759 if (service_worker_status != SERVICE_WORKER_OK) { 751 if (service_worker_status != SERVICE_WORKER_OK) {
760 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 752 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
761 base::Bind(callback));
762 return; 753 return;
763 } 754 }
764 755
765 FireOneShotSync( 756 FireOneShotSync(
766 service_worker_registration->active_version(), 757 service_worker_registration->active_version(),
767 base::Bind(&BackgroundSyncManager::EventComplete, 758 base::Bind(&BackgroundSyncManager::EventComplete,
768 weak_ptr_factory_.GetWeakPtr(), service_worker_registration, 759 weak_ptr_factory_.GetWeakPtr(), service_worker_registration,
769 service_worker_registration->id(), registration_key, 760 service_worker_registration->id(), registration_key,
770 registration_id)); 761 registration_id));
771 762
772 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 763 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
773 base::Bind(callback));
774 } 764 }
775 765
776 // |service_worker_registration| is just to keep the registration alive 766 // |service_worker_registration| is just to keep the registration alive
777 // while the event is firing. 767 // while the event is firing.
778 void BackgroundSyncManager::EventComplete( 768 void BackgroundSyncManager::EventComplete(
779 const scoped_refptr<ServiceWorkerRegistration>& service_worker_registration, 769 const scoped_refptr<ServiceWorkerRegistration>& service_worker_registration,
780 int64 service_worker_id, 770 int64 service_worker_id,
781 const RegistrationKey& key, 771 const RegistrationKey& key,
782 BackgroundSyncRegistration::RegistrationId sync_registration_id, 772 BackgroundSyncRegistration::RegistrationId sync_registration_id,
783 ServiceWorkerStatusCode status_code) { 773 ServiceWorkerStatusCode status_code) {
(...skipping 10 matching lines...) Expand all
794 784
795 void BackgroundSyncManager::EventCompleteImpl( 785 void BackgroundSyncManager::EventCompleteImpl(
796 int64 service_worker_id, 786 int64 service_worker_id,
797 const RegistrationKey& key, 787 const RegistrationKey& key,
798 BackgroundSyncRegistration::RegistrationId sync_registration_id, 788 BackgroundSyncRegistration::RegistrationId sync_registration_id,
799 ServiceWorkerStatusCode status_code, 789 ServiceWorkerStatusCode status_code,
800 const base::Closure& callback) { 790 const base::Closure& callback) {
801 DCHECK_CURRENTLY_ON(BrowserThread::IO); 791 DCHECK_CURRENTLY_ON(BrowserThread::IO);
802 792
803 if (disabled_) { 793 if (disabled_) {
804 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 794 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
805 base::Bind(callback));
806 return; 795 return;
807 } 796 }
808 797
809 BackgroundSyncRegistration* registration = 798 BackgroundSyncRegistration* registration =
810 LookupRegistration(service_worker_id, key); 799 LookupRegistration(service_worker_id, key);
811 if (!registration || registration->id != sync_registration_id) { 800 if (!registration || registration->id != sync_registration_id) {
812 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 801 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
813 base::Bind(callback));
814 return; 802 return;
815 } 803 }
816 804
817 if (registration->periodicity == SYNC_ONE_SHOT) { 805 if (registration->periodicity == SYNC_ONE_SHOT) {
818 if (status_code != SERVICE_WORKER_OK) { 806 if (status_code != SERVICE_WORKER_OK) {
819 // TODO(jkarlin) Fire the sync event on the next page load controlled by 807 // TODO(jkarlin) Fire the sync event on the next page load controlled by
820 // this registration. (crbug.com/479665) 808 // this registration. (crbug.com/479665)
821 registration->sync_state = SYNC_STATE_FAILED; 809 registration->sync_state = SYNC_STATE_FAILED;
822 } else { 810 } else {
823 registration = nullptr; 811 registration = nullptr;
(...skipping 12 matching lines...) Expand all
836 824
837 void BackgroundSyncManager::EventCompleteDidStore( 825 void BackgroundSyncManager::EventCompleteDidStore(
838 int64 service_worker_id, 826 int64 service_worker_id,
839 const base::Closure& callback, 827 const base::Closure& callback,
840 ServiceWorkerStatusCode status_code) { 828 ServiceWorkerStatusCode status_code) {
841 DCHECK_CURRENTLY_ON(BrowserThread::IO); 829 DCHECK_CURRENTLY_ON(BrowserThread::IO);
842 830
843 if (status_code == SERVICE_WORKER_ERROR_NOT_FOUND) { 831 if (status_code == SERVICE_WORKER_ERROR_NOT_FOUND) {
844 // The registration is gone. 832 // The registration is gone.
845 sw_to_registrations_map_.erase(service_worker_id); 833 sw_to_registrations_map_.erase(service_worker_id);
846 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 834 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
847 base::Bind(callback));
848 return; 835 return;
849 } 836 }
850 837
851 if (status_code != SERVICE_WORKER_OK) { 838 if (status_code != SERVICE_WORKER_OK) {
852 LOG(ERROR) << "BackgroundSync failed to store registration due to backend " 839 LOG(ERROR) << "BackgroundSync failed to store registration due to backend "
853 "failure."; 840 "failure.";
854 DisableAndClearManager(base::Bind(callback)); 841 DisableAndClearManager(base::Bind(callback));
855 return; 842 return;
856 } 843 }
857 844
858 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 845 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
859 base::Bind(callback));
860 } 846 }
861 847
862 void BackgroundSyncManager::OnRegistrationDeletedImpl( 848 void BackgroundSyncManager::OnRegistrationDeletedImpl(
863 int64 registration_id, 849 int64 registration_id,
864 const base::Closure& callback) { 850 const base::Closure& callback) {
865 DCHECK_CURRENTLY_ON(BrowserThread::IO); 851 DCHECK_CURRENTLY_ON(BrowserThread::IO);
866 852
867 // The backend (ServiceWorkerStorage) will delete the data, so just delete the 853 // The backend (ServiceWorkerStorage) will delete the data, so just delete the
868 // memory representation here. 854 // memory representation here.
869 sw_to_registrations_map_.erase(registration_id); 855 sw_to_registrations_map_.erase(registration_id);
870 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 856 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback));
871 base::Bind(callback));
872 } 857 }
873 858
874 void BackgroundSyncManager::OnStorageWipedImpl(const base::Closure& callback) { 859 void BackgroundSyncManager::OnStorageWipedImpl(const base::Closure& callback) {
875 DCHECK_CURRENTLY_ON(BrowserThread::IO); 860 DCHECK_CURRENTLY_ON(BrowserThread::IO);
876 861
877 sw_to_registrations_map_.clear(); 862 sw_to_registrations_map_.clear();
878 disabled_ = false; 863 disabled_ = false;
879 InitImpl(callback); 864 InitImpl(callback);
880 } 865 }
881 866
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 BackgroundSyncManager::MakeStatusCompletion(const StatusCallback& callback) { 919 BackgroundSyncManager::MakeStatusCompletion(const StatusCallback& callback) {
935 DCHECK_CURRENTLY_ON(BrowserThread::IO); 920 DCHECK_CURRENTLY_ON(BrowserThread::IO);
936 921
937 return base::Bind( 922 return base::Bind(
938 &BackgroundSyncManager::CompleteOperationCallback<StatusCallback, 923 &BackgroundSyncManager::CompleteOperationCallback<StatusCallback,
939 ErrorType>, 924 ErrorType>,
940 weak_ptr_factory_.GetWeakPtr(), callback); 925 weak_ptr_factory_.GetWeakPtr(), callback);
941 } 926 }
942 927
943 } // namespace content 928 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/appcache/mock_appcache_storage.cc ('k') | content/browser/background_sync/background_sync_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698