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

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

Issue 1348603003: [BackgroundSync] Move BackgroundSyncState from proto to mojo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Android fix Created 5 years, 3 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" 9 #include "base/location.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 BackgroundSyncRegistration* registration = ref_registration->value(); 285 BackgroundSyncRegistration* registration = ref_registration->value();
286 286
287 BackgroundSyncRegistrationOptions* options = registration->options(); 287 BackgroundSyncRegistrationOptions* options = registration->options();
288 options->tag = registration_proto.tag(); 288 options->tag = registration_proto.tag();
289 options->periodicity = registration_proto.periodicity(); 289 options->periodicity = registration_proto.periodicity();
290 options->min_period = registration_proto.min_period(); 290 options->min_period = registration_proto.min_period();
291 options->network_state = registration_proto.network_state(); 291 options->network_state = registration_proto.network_state();
292 options->power_state = registration_proto.power_state(); 292 options->power_state = registration_proto.power_state();
293 293
294 registration->set_id(registration_proto.id()); 294 registration->set_id(registration_proto.id());
295 registration->set_sync_state(registration_proto.sync_state());
296
297 if (registration->sync_state() == SYNC_STATE_FIRING) {
298 // If the browser (or worker) closed while firing the event, consider
299 // it pending again>
300 registration->set_sync_state(SYNC_STATE_PENDING);
301 }
302 } 295 }
303 } 296 }
304 297
305 if (corruption_detected) 298 if (corruption_detected)
306 break; 299 break;
307 } 300 }
308 301
309 if (corruption_detected) { 302 if (corruption_detected) {
310 LOG(ERROR) << "Corruption detected in background sync backend"; 303 LOG(ERROR) << "Corruption detected in background sync backend";
311 DisableAndClearManager(base::Bind(callback)); 304 DisableAndClearManager(base::Bind(callback));
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 PostErrorResponse(BACKGROUND_SYNC_STATUS_NOT_ALLOWED, callback); 349 PostErrorResponse(BACKGROUND_SYNC_STATUS_NOT_ALLOWED, callback);
357 return; 350 return;
358 } 351 }
359 352
360 RefCountedRegistration* existing_registration_ref = 353 RefCountedRegistration* existing_registration_ref =
361 LookupActiveRegistration(sw_registration_id, RegistrationKey(options)); 354 LookupActiveRegistration(sw_registration_id, RegistrationKey(options));
362 if (existing_registration_ref && 355 if (existing_registration_ref &&
363 existing_registration_ref->value()->options()->Equals(options)) { 356 existing_registration_ref->value()->options()->Equals(options)) {
364 BackgroundSyncRegistration* existing_registration = 357 BackgroundSyncRegistration* existing_registration =
365 existing_registration_ref->value(); 358 existing_registration_ref->value();
366 if (existing_registration->sync_state() == SYNC_STATE_FAILED) { 359 if (existing_registration->sync_state() == BACKGROUND_SYNC_STATE_FAILED) {
367 existing_registration->set_sync_state(SYNC_STATE_PENDING); 360 existing_registration->set_sync_state(BACKGROUND_SYNC_STATE_PENDING);
368 StoreRegistrations( 361 StoreRegistrations(
369 sw_registration_id, 362 sw_registration_id,
370 base::Bind(&BackgroundSyncManager::RegisterDidStore, 363 base::Bind(&BackgroundSyncManager::RegisterDidStore,
371 weak_ptr_factory_.GetWeakPtr(), sw_registration_id, 364 weak_ptr_factory_.GetWeakPtr(), sw_registration_id,
372 make_scoped_refptr(existing_registration_ref), callback)); 365 make_scoped_refptr(existing_registration_ref), callback));
373 return; 366 return;
374 } 367 }
375 368
376 // Record the duplicated registration 369 // Record the duplicated registration
377 BackgroundSyncMetrics::CountRegister( 370 BackgroundSyncMetrics::CountRegister(
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 BackgroundSyncRegistrationsProto registrations_proto; 491 BackgroundSyncRegistrationsProto registrations_proto;
499 registrations_proto.set_next_registration_id(registrations.next_id); 492 registrations_proto.set_next_registration_id(registrations.next_id);
500 registrations_proto.set_origin(registrations.origin.spec()); 493 registrations_proto.set_origin(registrations.origin.spec());
501 494
502 for (const auto& key_and_registration : registrations.registration_map) { 495 for (const auto& key_and_registration : registrations.registration_map) {
503 const BackgroundSyncRegistration& registration = 496 const BackgroundSyncRegistration& registration =
504 *key_and_registration.second->value(); 497 *key_and_registration.second->value();
505 BackgroundSyncRegistrationProto* registration_proto = 498 BackgroundSyncRegistrationProto* registration_proto =
506 registrations_proto.add_registration(); 499 registrations_proto.add_registration();
507 registration_proto->set_id(registration.id()); 500 registration_proto->set_id(registration.id());
508 registration_proto->set_sync_state(registration.sync_state());
509 registration_proto->set_tag(registration.options()->tag); 501 registration_proto->set_tag(registration.options()->tag);
510 registration_proto->set_periodicity(registration.options()->periodicity); 502 registration_proto->set_periodicity(registration.options()->periodicity);
511 registration_proto->set_min_period(registration.options()->min_period); 503 registration_proto->set_min_period(registration.options()->min_period);
512 registration_proto->set_network_state( 504 registration_proto->set_network_state(
513 registration.options()->network_state); 505 registration.options()->network_state);
514 registration_proto->set_power_state(registration.options()->power_state); 506 registration_proto->set_power_state(registration.options()->power_state);
515 } 507 }
516 std::string serialized; 508 std::string serialized;
517 bool success = registrations_proto.SerializeToString(&serialized); 509 bool success = registrations_proto.SerializeToString(&serialized);
518 DCHECK(success); 510 DCHECK(success);
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 } 821 }
830 822
831 bool BackgroundSyncManager::IsRegistrationReadyToFire( 823 bool BackgroundSyncManager::IsRegistrationReadyToFire(
832 const BackgroundSyncRegistration& registration) { 824 const BackgroundSyncRegistration& registration) {
833 DCHECK_CURRENTLY_ON(BrowserThread::IO); 825 DCHECK_CURRENTLY_ON(BrowserThread::IO);
834 826
835 // TODO(jkarlin): Add support for firing periodic registrations. 827 // TODO(jkarlin): Add support for firing periodic registrations.
836 if (registration.options()->periodicity == SYNC_PERIODIC) 828 if (registration.options()->periodicity == SYNC_PERIODIC)
837 return false; 829 return false;
838 830
839 if (registration.sync_state() != SYNC_STATE_PENDING) 831 if (registration.sync_state() != BACKGROUND_SYNC_STATE_PENDING)
840 return false; 832 return false;
841 833
842 DCHECK_EQ(SYNC_ONE_SHOT, registration.options()->periodicity); 834 DCHECK_EQ(SYNC_ONE_SHOT, registration.options()->periodicity);
843 835
844 return AreOptionConditionsMet(*registration.options()); 836 return AreOptionConditionsMet(*registration.options());
845 } 837 }
846 838
847 void BackgroundSyncManager::SchedulePendingRegistrations() { 839 void BackgroundSyncManager::SchedulePendingRegistrations() {
848 #if defined(OS_ANDROID) 840 #if defined(OS_ANDROID)
849 bool keep_browser_alive_for_one_shot = false; 841 bool keep_browser_alive_for_one_shot = false;
850 842
851 for (const auto& sw_id_and_registrations : active_registrations_) { 843 for (const auto& sw_id_and_registrations : active_registrations_) {
852 for (const auto& key_and_registration : 844 for (const auto& key_and_registration :
853 sw_id_and_registrations.second.registration_map) { 845 sw_id_and_registrations.second.registration_map) {
854 const BackgroundSyncRegistration& registration = 846 const BackgroundSyncRegistration& registration =
855 *key_and_registration.second->value(); 847 *key_and_registration.second->value();
856 if (registration.sync_state() == SYNC_STATE_PENDING) { 848 if (registration.sync_state() == BACKGROUND_SYNC_STATE_PENDING) {
857 if (registration.options()->periodicity == SYNC_ONE_SHOT) { 849 if (registration.options()->periodicity == SYNC_ONE_SHOT) {
858 keep_browser_alive_for_one_shot = true; 850 keep_browser_alive_for_one_shot = true;
859 } else { 851 } else {
860 // TODO(jkarlin): Support keeping the browser alive for periodic 852 // TODO(jkarlin): Support keeping the browser alive for periodic
861 // syncs. 853 // syncs.
862 } 854 }
863 } 855 }
864 } 856 }
865 } 857 }
866 858
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 for (auto& key_and_registration : 895 for (auto& key_and_registration :
904 sw_id_and_registrations.second.registration_map) { 896 sw_id_and_registrations.second.registration_map) {
905 BackgroundSyncRegistration* registration = 897 BackgroundSyncRegistration* registration =
906 key_and_registration.second->value(); 898 key_and_registration.second->value();
907 if (IsRegistrationReadyToFire(*registration)) { 899 if (IsRegistrationReadyToFire(*registration)) {
908 sw_id_and_keys_to_fire.push_back( 900 sw_id_and_keys_to_fire.push_back(
909 std::make_pair(service_worker_id, key_and_registration.first)); 901 std::make_pair(service_worker_id, key_and_registration.first));
910 // The state change is not saved to persistent storage because 902 // The state change is not saved to persistent storage because
911 // if the sync event is killed mid-sync then it should return to 903 // if the sync event is killed mid-sync then it should return to
912 // SYNC_STATE_PENDING. 904 // SYNC_STATE_PENDING.
913 registration->set_sync_state(SYNC_STATE_FIRING); 905 registration->set_sync_state(BACKGROUND_SYNC_STATE_FIRING);
914 } 906 }
915 } 907 }
916 } 908 }
917 909
918 // If there are no registrations currently ready, then just run |callback|. 910 // If there are no registrations currently ready, then just run |callback|.
919 // Otherwise, fire them all, and record the result when done. 911 // Otherwise, fire them all, and record the result when done.
920 if (sw_id_and_keys_to_fire.size() == 0) { 912 if (sw_id_and_keys_to_fire.size() == 0) {
921 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 913 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
922 base::Bind(callback)); 914 base::Bind(callback));
923 } else { 915 } else {
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1028 1020
1029 // The event ran to completion, we should count it, no matter what happens 1021 // The event ran to completion, we should count it, no matter what happens
1030 // from here. 1022 // from here.
1031 BackgroundSyncMetrics::RecordEventResult(registration->options()->periodicity, 1023 BackgroundSyncMetrics::RecordEventResult(registration->options()->periodicity,
1032 status_code == SERVICE_WORKER_OK); 1024 status_code == SERVICE_WORKER_OK);
1033 1025
1034 if (registration->options()->periodicity == SYNC_ONE_SHOT) { 1026 if (registration->options()->periodicity == SYNC_ONE_SHOT) {
1035 if (status_code != SERVICE_WORKER_OK) { 1027 if (status_code != SERVICE_WORKER_OK) {
1036 // TODO(jkarlin) Fire the sync event on the next page load controlled by 1028 // TODO(jkarlin) Fire the sync event on the next page load controlled by
1037 // this registration. (crbug.com/479665) 1029 // this registration. (crbug.com/479665)
1038 registration->set_sync_state(SYNC_STATE_FAILED); 1030 registration->set_sync_state(BACKGROUND_SYNC_STATE_FAILED);
1039 } else { 1031 } else {
1040 RegistrationKey key(*registration); 1032 RegistrationKey key(*registration);
1041 // Remove the registration if it's still active. 1033 // Remove the registration if it's still active.
1042 RefCountedRegistration* active_registration = 1034 RefCountedRegistration* active_registration =
1043 LookupActiveRegistration(service_worker_id, key); 1035 LookupActiveRegistration(service_worker_id, key);
1044 if (active_registration && 1036 if (active_registration &&
1045 active_registration->value()->id() == registration->id()) 1037 active_registration->value()->id() == registration->id())
1046 RemoveActiveRegistration(service_worker_id, key); 1038 RemoveActiveRegistration(service_worker_id, key);
1047 } 1039 }
1048 } else { 1040 } else {
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1192 BackgroundSyncManager::MakeStatusCompletion(const StatusCallback& callback) { 1184 BackgroundSyncManager::MakeStatusCompletion(const StatusCallback& callback) {
1193 DCHECK_CURRENTLY_ON(BrowserThread::IO); 1185 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1194 1186
1195 return base::Bind( 1187 return base::Bind(
1196 &BackgroundSyncManager::CompleteOperationCallback<StatusCallback, 1188 &BackgroundSyncManager::CompleteOperationCallback<StatusCallback,
1197 BackgroundSyncStatus>, 1189 BackgroundSyncStatus>,
1198 weak_ptr_factory_.GetWeakPtr(), callback); 1190 weak_ptr_factory_.GetWeakPtr(), callback);
1199 } 1191 }
1200 1192
1201 } // namespace content 1193 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698