Index: content/browser/background_sync/background_sync_manager.cc |
diff --git a/content/browser/background_sync/background_sync_manager.cc b/content/browser/background_sync/background_sync_manager.cc |
index b10978dde30e5412951fab805c921d8af67b644d..d596760706d62bf58d5f68afa65d7768c5f18e3f 100644 |
--- a/content/browser/background_sync/background_sync_manager.cc |
+++ b/content/browser/background_sync/background_sync_manager.cc |
@@ -163,19 +163,17 @@ BackgroundSyncManager::~BackgroundSyncManager() { |
BackgroundSyncManager::RegistrationKey::RegistrationKey( |
const BackgroundSyncRegistration& registration) |
- : RegistrationKey(registration.options()->tag, |
- registration.options()->periodicity) { |
-} |
+ : RegistrationKey(registration.options()->tag) {} |
BackgroundSyncManager::RegistrationKey::RegistrationKey( |
const BackgroundSyncRegistrationOptions& options) |
- : RegistrationKey(options.tag, options.periodicity) { |
-} |
+ : RegistrationKey(options.tag) {} |
-BackgroundSyncManager::RegistrationKey::RegistrationKey( |
- const std::string& tag, |
- SyncPeriodicity periodicity) |
- : value_(periodicity == SYNC_ONE_SHOT ? "o_" + tag : "p_" + tag) { |
+BackgroundSyncManager::RegistrationKey::RegistrationKey(const std::string& tag) |
+ : value_("o_" + tag) { |
+ // Note that the "o_" prefix on the key is because at one time one-shots were |
+ // prefixed with an "o_" and periodic with a "p_". Removing the "o_" requires |
+ // migration. |
} |
void BackgroundSyncManager::Register( |
@@ -187,7 +185,7 @@ void BackgroundSyncManager::Register( |
if (disabled_) { |
BackgroundSyncMetrics::CountRegisterFailure( |
- options.periodicity, BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
+ BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback); |
return; |
} |
@@ -209,7 +207,6 @@ void BackgroundSyncManager::Register( |
void BackgroundSyncManager::GetRegistration( |
int64_t sw_registration_id, |
const std::string& sync_registration_tag, |
- SyncPeriodicity periodicity, |
const StatusAndRegistrationCallback& callback) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
@@ -218,7 +215,7 @@ void BackgroundSyncManager::GetRegistration( |
return; |
} |
- RegistrationKey registration_key(sync_registration_tag, periodicity); |
+ RegistrationKey registration_key(sync_registration_tag); |
op_scheduler_.ScheduleOperation(base::Bind( |
&BackgroundSyncManager::GetRegistrationImpl, |
@@ -228,7 +225,6 @@ void BackgroundSyncManager::GetRegistration( |
void BackgroundSyncManager::GetRegistrations( |
int64_t sw_registration_id, |
- SyncPeriodicity periodicity, |
const StatusAndRegistrationsCallback& callback) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
@@ -246,7 +242,7 @@ void BackgroundSyncManager::GetRegistrations( |
op_scheduler_.ScheduleOperation( |
base::Bind(&BackgroundSyncManager::GetRegistrationsImpl, |
weak_ptr_factory_.GetWeakPtr(), sw_registration_id, |
- periodicity, MakeStatusAndRegistrationsCompletion(callback))); |
+ MakeStatusAndRegistrationsCompletion(callback))); |
} |
// Given a HandleId |handle_id|, return a new handle for the same |
@@ -397,8 +393,7 @@ void BackgroundSyncManager::InitDidGetDataFromBackend( |
break; |
} |
- RegistrationKey registration_key(registration_proto.tag(), |
- registration_proto.periodicity()); |
+ RegistrationKey registration_key(registration_proto.tag()); |
scoped_refptr<RefCountedRegistration> ref_registration( |
new RefCountedRegistration()); |
@@ -407,8 +402,6 @@ void BackgroundSyncManager::InitDidGetDataFromBackend( |
BackgroundSyncRegistrationOptions* options = registration->options(); |
options->tag = registration_proto.tag(); |
- options->periodicity = registration_proto.periodicity(); |
- options->min_period = registration_proto.min_period(); |
options->network_state = registration_proto.network_state(); |
registration->set_id(registration_proto.id()); |
@@ -444,7 +437,7 @@ void BackgroundSyncManager::RegisterCheckIfHasMainFrame( |
service_worker_context_->GetLiveRegistration(sw_registration_id); |
if (!sw_registration || !sw_registration->active_version()) { |
BackgroundSyncMetrics::CountRegisterFailure( |
- options.periodicity, BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER); |
+ BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER); |
PostErrorResponse(BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER, callback); |
return; |
} |
@@ -465,7 +458,7 @@ void BackgroundSyncManager::RegisterDidCheckIfMainFrame( |
if (!has_main_frame_client) { |
BackgroundSyncMetrics::CountRegisterFailure( |
- options.periodicity, BACKGROUND_SYNC_STATUS_NOT_ALLOWED); |
+ BACKGROUND_SYNC_STATUS_NOT_ALLOWED); |
PostErrorResponse(BACKGROUND_SYNC_STATUS_NOT_ALLOWED, callback); |
return; |
} |
@@ -480,14 +473,14 @@ void BackgroundSyncManager::RegisterImpl( |
if (disabled_) { |
BackgroundSyncMetrics::CountRegisterFailure( |
- options.periodicity, BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
+ BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback); |
return; |
} |
if (options.tag.length() > kMaxTagLength) { |
BackgroundSyncMetrics::CountRegisterFailure( |
- options.periodicity, BACKGROUND_SYNC_STATUS_NOT_ALLOWED); |
+ BACKGROUND_SYNC_STATUS_NOT_ALLOWED); |
PostErrorResponse(BACKGROUND_SYNC_STATUS_NOT_ALLOWED, callback); |
return; |
} |
@@ -496,7 +489,7 @@ void BackgroundSyncManager::RegisterImpl( |
service_worker_context_->GetLiveRegistration(sw_registration_id); |
if (!sw_registration || !sw_registration->active_version()) { |
BackgroundSyncMetrics::CountRegisterFailure( |
- options.periodicity, BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER); |
+ BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER); |
PostErrorResponse(BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER, callback); |
return; |
} |
@@ -518,7 +511,6 @@ void BackgroundSyncManager::RegisterImpl( |
? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE |
: BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE; |
BackgroundSyncMetrics::CountRegisterSuccess( |
- existing_registration->options()->periodicity, |
registration_could_fire, |
BackgroundSyncMetrics::REGISTRATION_IS_DUPLICATE); |
@@ -666,8 +658,6 @@ void BackgroundSyncManager::StoreRegistrations( |
registrations_proto.add_registration(); |
registration_proto->set_id(registration.id()); |
registration_proto->set_tag(registration.options()->tag); |
- registration_proto->set_periodicity(registration.options()->periodicity); |
- registration_proto->set_min_period(registration.options()->min_period); |
registration_proto->set_network_state( |
registration.options()->network_state); |
registration_proto->set_num_attempts(registration.num_attempts()); |
@@ -695,7 +685,6 @@ void BackgroundSyncManager::RegisterDidStore( |
if (status == SERVICE_WORKER_ERROR_NOT_FOUND) { |
// The service worker registration is gone. |
BackgroundSyncMetrics::CountRegisterFailure( |
- new_registration->options()->periodicity, |
BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
active_registrations_.erase(sw_registration_id); |
PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback); |
@@ -706,7 +695,6 @@ void BackgroundSyncManager::RegisterDidStore( |
LOG(ERROR) << "BackgroundSync failed to store registration due to backend " |
"failure."; |
BackgroundSyncMetrics::CountRegisterFailure( |
- new_registration->options()->periodicity, |
BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
DisableAndClearManager(base::Bind( |
callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR, |
@@ -719,7 +707,7 @@ void BackgroundSyncManager::RegisterDidStore( |
? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE |
: BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE; |
BackgroundSyncMetrics::CountRegisterSuccess( |
- new_registration->options()->periodicity, registration_could_fire, |
+ registration_could_fire, |
BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE); |
FireReadyEvents(); |
@@ -870,7 +858,6 @@ void BackgroundSyncManager::Unregister( |
if (disabled_) { |
BackgroundSyncMetrics::CountUnregister( |
- registration->options()->periodicity, |
BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR)); |
@@ -880,20 +867,19 @@ void BackgroundSyncManager::Unregister( |
op_scheduler_.ScheduleOperation(base::Bind( |
&BackgroundSyncManager::UnregisterImpl, weak_ptr_factory_.GetWeakPtr(), |
sw_registration_id, RegistrationKey(*registration), registration->id(), |
- registration->options()->periodicity, MakeStatusCompletion(callback))); |
+ MakeStatusCompletion(callback))); |
} |
void BackgroundSyncManager::UnregisterImpl( |
int64_t sw_registration_id, |
const RegistrationKey& registration_key, |
BackgroundSyncRegistration::RegistrationId sync_registration_id, |
- SyncPeriodicity periodicity, |
const StatusCallback& callback) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
if (disabled_) { |
BackgroundSyncMetrics::CountUnregister( |
- periodicity, BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
+ BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR)); |
return; |
@@ -904,8 +890,7 @@ void BackgroundSyncManager::UnregisterImpl( |
if (!existing_registration || |
existing_registration->value()->id() != sync_registration_id) { |
- BackgroundSyncMetrics::CountUnregister(periodicity, |
- BACKGROUND_SYNC_STATUS_NOT_FOUND); |
+ BackgroundSyncMetrics::CountUnregister(BACKGROUND_SYNC_STATUS_NOT_FOUND); |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_NOT_FOUND)); |
return; |
@@ -915,14 +900,13 @@ void BackgroundSyncManager::UnregisterImpl( |
RemoveActiveRegistration(sw_registration_id, registration_key); |
- StoreRegistrations(sw_registration_id, |
- base::Bind(&BackgroundSyncManager::UnregisterDidStore, |
- weak_ptr_factory_.GetWeakPtr(), |
- sw_registration_id, periodicity, callback)); |
+ StoreRegistrations( |
+ sw_registration_id, |
+ base::Bind(&BackgroundSyncManager::UnregisterDidStore, |
+ weak_ptr_factory_.GetWeakPtr(), sw_registration_id, callback)); |
} |
void BackgroundSyncManager::UnregisterDidStore(int64_t sw_registration_id, |
- SyncPeriodicity periodicity, |
const StatusCallback& callback, |
ServiceWorkerStatusCode status) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
@@ -930,7 +914,7 @@ void BackgroundSyncManager::UnregisterDidStore(int64_t sw_registration_id, |
if (status == SERVICE_WORKER_ERROR_NOT_FOUND) { |
// ServiceWorker was unregistered. |
BackgroundSyncMetrics::CountUnregister( |
- periodicity, BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
+ BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
active_registrations_.erase(sw_registration_id); |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR)); |
@@ -940,14 +924,13 @@ void BackgroundSyncManager::UnregisterDidStore(int64_t sw_registration_id, |
if (status != SERVICE_WORKER_OK) { |
LOG(ERROR) << "BackgroundSync failed to unregister due to backend failure."; |
BackgroundSyncMetrics::CountUnregister( |
- periodicity, BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
+ BACKGROUND_SYNC_STATUS_STORAGE_ERROR); |
DisableAndClearManager( |
base::Bind(callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR)); |
return; |
} |
- BackgroundSyncMetrics::CountUnregister(periodicity, |
- BACKGROUND_SYNC_STATUS_OK); |
+ BackgroundSyncMetrics::CountUnregister(BACKGROUND_SYNC_STATUS_OK); |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_OK)); |
} |
@@ -977,7 +960,6 @@ void BackgroundSyncManager::NotifyWhenFinishedImpl( |
scoped_ptr<BackgroundSyncRegistrationHandle> registration_handle, |
const StatusAndStateCallback& callback) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- DCHECK_EQ(SYNC_ONE_SHOT, registration_handle->options()->periodicity); |
if (disabled_) { |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
@@ -1034,7 +1016,6 @@ void BackgroundSyncManager::GetRegistrationImpl( |
void BackgroundSyncManager::GetRegistrationsImpl( |
int64_t sw_registration_id, |
- SyncPeriodicity periodicity, |
const StatusAndRegistrationsCallback& callback) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
@@ -1055,10 +1036,8 @@ void BackgroundSyncManager::GetRegistrationsImpl( |
const BackgroundSyncRegistrations& registrations = it->second; |
for (const auto& tag_and_registration : registrations.registration_map) { |
RefCountedRegistration* registration = tag_and_registration.second.get(); |
- if (registration->value()->options()->periodicity == periodicity) { |
- out_registrations->push_back( |
- CreateRegistrationHandle(registration).release()); |
- } |
+ out_registrations->push_back( |
+ CreateRegistrationHandle(registration).release()); |
} |
} |
@@ -1077,18 +1056,12 @@ bool BackgroundSyncManager::IsRegistrationReadyToFire( |
const BackgroundSyncRegistration& registration) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- // TODO(jkarlin): Add support for firing periodic registrations. |
- if (registration.options()->periodicity == SYNC_PERIODIC) |
- return false; |
- |
if (registration.sync_state() != BackgroundSyncState::PENDING) |
return false; |
if (clock_->Now() < registration.delay_until()) |
return false; |
- DCHECK_EQ(SYNC_ONE_SHOT, registration.options()->periodicity); |
- |
return AreOptionConditionsMet(*registration.options()); |
} |
@@ -1102,18 +1075,13 @@ void BackgroundSyncManager::RunInBackgroundIfNecessary() { |
const BackgroundSyncRegistration& registration = |
*key_and_registration.second->value(); |
if (registration.sync_state() == BackgroundSyncState::PENDING) { |
- if (registration.options()->periodicity == SYNC_ONE_SHOT) { |
- if (clock_->Now() >= registration.delay_until()) { |
- soonest_wakeup_delta = base::TimeDelta(); |
- } else { |
- base::TimeDelta delay_delta = |
- registration.delay_until() - clock_->Now(); |
- if (delay_delta < soonest_wakeup_delta) |
- soonest_wakeup_delta = delay_delta; |
- } |
+ if (clock_->Now() >= registration.delay_until()) { |
+ soonest_wakeup_delta = base::TimeDelta(); |
} else { |
- // TODO(jkarlin): Support keeping the browser alive for periodic |
- // syncs. |
+ base::TimeDelta delay_delta = |
+ registration.delay_until() - clock_->Now(); |
+ if (delay_delta < soonest_wakeup_delta) |
+ soonest_wakeup_delta = delay_delta; |
} |
} |
} |
@@ -1260,8 +1228,7 @@ void BackgroundSyncManager::FireReadyEventsDidFindRegistration( |
HasMainFrameProviderHost( |
service_worker_registration->pattern().GetOrigin(), |
- base::Bind(&BackgroundSyncMetrics::RecordEventStarted, |
- registration->value()->options()->periodicity)); |
+ base::Bind(&BackgroundSyncMetrics::RecordEventStarted)); |
FireOneShotSync( |
handle_id, service_worker_registration->active_version(), last_chance, |
@@ -1326,52 +1293,44 @@ void BackgroundSyncManager::EventCompleteImpl( |
HasMainFrameProviderHost( |
sw_registration->pattern().GetOrigin(), |
base::Bind(&BackgroundSyncMetrics::RecordEventResult, |
- registration->options()->periodicity, |
status_code == SERVICE_WORKER_OK)); |
} |
- if (registration->options()->periodicity == SYNC_ONE_SHOT) { |
+ if (registration->sync_state() == |
+ BackgroundSyncState::REREGISTERED_WHILE_FIRING) { |
+ registration->set_sync_state(BackgroundSyncState::PENDING); |
+ registration->set_num_attempts(0); |
+ } else if (status_code != SERVICE_WORKER_OK) { // Sync failed |
+ bool can_retry = |
+ registration->num_attempts() < parameters_->max_sync_attempts; |
if (registration->sync_state() == |
- BackgroundSyncState::REREGISTERED_WHILE_FIRING) { |
+ BackgroundSyncState::UNREGISTERED_WHILE_FIRING) { |
+ registration->set_sync_state(can_retry ? BackgroundSyncState::UNREGISTERED |
+ : BackgroundSyncState::FAILED); |
+ registration->RunFinishedCallbacks(); |
+ } else if (can_retry) { |
registration->set_sync_state(BackgroundSyncState::PENDING); |
- registration->set_num_attempts(0); |
- } else if (status_code != SERVICE_WORKER_OK) { // Sync failed |
- bool can_retry = |
- registration->num_attempts() < parameters_->max_sync_attempts; |
- if (registration->sync_state() == |
- BackgroundSyncState::UNREGISTERED_WHILE_FIRING) { |
- registration->set_sync_state(can_retry |
- ? BackgroundSyncState::UNREGISTERED |
- : BackgroundSyncState::FAILED); |
- registration->RunFinishedCallbacks(); |
- } else if (can_retry) { |
- registration->set_sync_state(BackgroundSyncState::PENDING); |
- registration->set_delay_until( |
- clock_->Now() + |
- parameters_->initial_retry_delay * |
- pow(parameters_->retry_delay_factor, |
- registration->num_attempts() - 1)); |
- } else { |
- registration->set_sync_state(BackgroundSyncState::FAILED); |
- registration->RunFinishedCallbacks(); |
- } |
- } else { // Sync succeeded |
- registration->set_sync_state(BackgroundSyncState::SUCCESS); |
+ registration->set_delay_until(clock_->Now() + |
+ parameters_->initial_retry_delay * |
+ pow(parameters_->retry_delay_factor, |
+ registration->num_attempts() - 1)); |
+ } else { |
+ registration->set_sync_state(BackgroundSyncState::FAILED); |
registration->RunFinishedCallbacks(); |
} |
+ } else { // Sync succeeded |
+ registration->set_sync_state(BackgroundSyncState::SUCCESS); |
+ registration->RunFinishedCallbacks(); |
+ } |
- if (registration->HasCompleted()) { |
- RegistrationKey key(*registration); |
- RefCountedRegistration* active_registration = |
- LookupActiveRegistration(service_worker_id, key); |
- if (active_registration && |
- active_registration->value()->id() == registration->id()) { |
- RemoveActiveRegistration(service_worker_id, key); |
- } |
+ if (registration->HasCompleted()) { |
+ RegistrationKey key(*registration); |
+ RefCountedRegistration* active_registration = |
+ LookupActiveRegistration(service_worker_id, key); |
+ if (active_registration && |
+ active_registration->value()->id() == registration->id()) { |
+ RemoveActiveRegistration(service_worker_id, key); |
} |
- } else { // !SYNC_ONE_SHOT |
- // TODO(jkarlin): Add support for running periodic syncs. (crbug.com/479674) |
- NOTREACHED(); |
} |
if (disabled_) { |