| Index: sync/sessions/sync_session.cc | 
| diff --git a/sync/sessions/sync_session.cc b/sync/sessions/sync_session.cc | 
| index ee296682111b4449f3c6f9e2b59b20ea579f5354..b7bb5ca3c7f40bcf4410fb6e657d87304ad42cc1 100644 | 
| --- a/sync/sessions/sync_session.cc | 
| +++ b/sync/sessions/sync_session.cc | 
| @@ -48,17 +48,17 @@ std::set<ModelSafeGroup> ComputeEnabledGroups( | 
| return enabled_groups; | 
| } | 
|  | 
| -void PurgeStalePayload(ModelTypePayloadMap* original, | 
| -                       const ModelSafeRoutingInfo& routing_info) { | 
| -  std::vector<ModelTypePayloadMap::iterator> iterators_to_delete; | 
| -  for (ModelTypePayloadMap::iterator i = original->begin(); | 
| +void PurgeStaleStates(ModelTypeStateMap* original, | 
| +                      const ModelSafeRoutingInfo& routing_info) { | 
| +  std::vector<ModelTypeStateMap::iterator> iterators_to_delete; | 
| +  for (ModelTypeStateMap::iterator i = original->begin(); | 
| i != original->end(); ++i) { | 
| if (routing_info.end() == routing_info.find(i->first)) { | 
| iterators_to_delete.push_back(i); | 
| } | 
| } | 
|  | 
| -  for (std::vector<ModelTypePayloadMap::iterator>::iterator | 
| +  for (std::vector<ModelTypeStateMap::iterator>::iterator | 
| it = iterators_to_delete.begin(); it != iterators_to_delete.end(); | 
| ++it) { | 
| original->erase(*it); | 
| @@ -92,8 +92,8 @@ void SyncSession::Coalesce(const SyncSession& session) { | 
| } | 
|  | 
| // When we coalesce sessions, the sync update source gets overwritten with the | 
| -  // most recent, while the type/payload map gets merged. | 
| -  CoalescePayloads(&source_.types, session.source_.types); | 
| +  // most recent, while the type/state map gets merged. | 
| +  CoalesceStates(&source_.types, session.source_.types); | 
| source_.updates_source = session.source_.updates_source; | 
|  | 
| std::vector<ModelSafeWorker*> temp; | 
| @@ -132,7 +132,7 @@ void SyncSession::RebaseRoutingInfoWithLatest(const SyncSession& session) { | 
| routing_info_.swap(temp_routing_info); | 
|  | 
| // Now update the payload map. | 
| -  PurgeStalePayload(&source_.types, session.routing_info_); | 
| +  PurgeStaleStates(&source_.types, session.routing_info_); | 
|  | 
| // Now update the workers. | 
| std::vector<ModelSafeWorker*> temp; | 
| @@ -157,7 +157,7 @@ SyncSessionSnapshot SyncSession::TakeSnapshot() const { | 
|  | 
| bool is_share_useable = true; | 
| ModelTypeSet initial_sync_ended; | 
| -  ModelTypePayloadMap download_progress_markers; | 
| +  ModelTypeStateMap download_progress_markers; | 
| for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { | 
| ModelType type(ModelTypeFromInt(i)); | 
| if (routing_info_.count(type) != 0) { | 
| @@ -166,7 +166,10 @@ SyncSessionSnapshot SyncSession::TakeSnapshot() const { | 
| else | 
| is_share_useable = false; | 
| } | 
| -    dir->GetDownloadProgressAsString(type, &download_progress_markers[type]); | 
| +    // TODO(dcheng): Is this correct? I'm guessing GetDownloadProgressAsString() | 
| +    // shouldn't care about the ack handle... | 
| +    dir->GetDownloadProgressAsString(type, | 
| +                                     &download_progress_markers[type].payload); | 
| } | 
|  | 
| return SyncSessionSnapshot( | 
|  |