Index: sync/engine/sync_scheduler.cc |
diff --git a/sync/engine/sync_scheduler.cc b/sync/engine/sync_scheduler.cc |
index c351326e70ccf10769624a55f3710d5e51084aa3..9b26a02fa53a1881ce1d61914938817b038c115d 100644 |
--- a/sync/engine/sync_scheduler.cc |
+++ b/sync/engine/sync_scheduler.cc |
@@ -353,15 +353,10 @@ bool SyncScheduler::ScheduleConfiguration(const ConfigurationParams& params) { |
&restricted_workers); |
session_context_->set_routing_info(params.routing_info); |
- if (params.keystore_key_status == ConfigurationParams::KEYSTORE_KEY_NEEDED) { |
- // TODO(zea): implement in such a way that we can handle failures and the |
- // subsequent retrys the scheduler might perform. See crbug.com/129665. |
- NOTIMPLEMENTED(); |
- } |
- |
- // Only reconfigure if we have types to download. |
- if (!params.types_to_download.Empty()) { |
- DCHECK(!restricted_routes.empty()); |
+ // Only perform configure if we have types to download or need to download |
+ // the encryption key. |
+ if (params.keystore_key_status == ConfigurationParams::KEYSTORE_KEY_NEEDED || |
+ !params.types_to_download.Empty()) { |
linked_ptr<SyncSession> session(new SyncSession( |
session_context_, |
this, |
@@ -667,12 +662,23 @@ const char* SyncScheduler::GetDecisionString( |
// static |
void SyncScheduler::SetSyncerStepsForPurpose( |
SyncSessionJob::SyncSessionJobPurpose purpose, |
+ const ConfigurationParams& config_params, |
SyncerStep* start, |
SyncerStep* end) { |
switch (purpose) { |
case SyncSessionJob::CONFIGURATION: |
- *start = DOWNLOAD_UPDATES; |
- *end = APPLY_UPDATES; |
+ DCHECK(config_params.keystore_key_status == |
+ ConfigurationParams::KEYSTORE_KEY_NEEDED || |
+ !config_params.types_to_download.Empty()); |
+ if (config_params.keystore_key_status == |
tim (not reviewing)
2012/07/19 21:42:03
If it's a separate http request, should we have a
Nicolas Zea
2012/07/24 22:51:24
Based on the discussion with Kevin, moved the GetK
|
+ ConfigurationParams::KEYSTORE_KEY_NEEDED) |
+ *start = GET_ENCRYPTION_KEY; |
+ else |
+ *start = DOWNLOAD_UPDATES; |
+ if (config_params.types_to_download.Empty()) |
+ *end = GET_ENCRYPTION_KEY; |
+ else |
+ *end = APPLY_UPDATES; |
return; |
case SyncSessionJob::NUDGE: |
case SyncSessionJob::POLL: |
@@ -767,7 +773,7 @@ void SyncScheduler::DoSyncSessionJob(const SyncSessionJob& job) { |
SyncerStep begin(SYNCER_END); |
SyncerStep end(SYNCER_END); |
- SetSyncerStepsForPurpose(job.purpose, &begin, &end); |
+ SetSyncerStepsForPurpose(job.purpose, job.config_params, &begin, &end); |
bool has_more_to_sync = true; |
while (ShouldRunJob(job) && has_more_to_sync) { |