Index: sync/internal_api/sync_manager_impl.cc |
diff --git a/sync/internal_api/sync_manager_impl.cc b/sync/internal_api/sync_manager_impl.cc |
index a541032691f0f7aa11aaa420185cc585d1a5b213..091ed289ea8ac08faf27f5bf64e6c2512c2d834e 100644 |
--- a/sync/internal_api/sync_manager_impl.cc |
+++ b/sync/internal_api/sync_manager_impl.cc |
@@ -20,7 +20,6 @@ |
#include "sync/engine/syncer_types.h" |
#include "sync/internal_api/change_reorder_buffer.h" |
#include "sync/internal_api/public/base/model_type.h" |
-#include "sync/internal_api/public/base/model_type_invalidation_map.h" |
#include "sync/internal_api/public/base_node.h" |
#include "sync/internal_api/public/configure_reason.h" |
#include "sync/internal_api/public/engine/polling_constants.h" |
@@ -1152,12 +1151,15 @@ JsArgList SyncManagerImpl::GetChildNodeIds(const JsArgList& args) { |
} |
void SyncManagerImpl::UpdateNotificationInfo( |
- const ModelTypeInvalidationMap& invalidation_map) { |
- for (ModelTypeInvalidationMap::const_iterator it = invalidation_map.begin(); |
+ const ObjectIdInvalidationMap& invalidation_map) { |
+ for (ObjectIdInvalidationMap::const_iterator it = invalidation_map.begin(); |
it != invalidation_map.end(); ++it) { |
- NotificationInfo* info = ¬ification_info_map_[it->first]; |
- info->total_count++; |
- info->payload = it->second.payload; |
+ ModelType type = UNSPECIFIED; |
+ if (ObjectIdToRealModelType(it->first, &type)) { |
+ NotificationInfo* info = ¬ification_info_map_[type]; |
+ info->total_count++; |
+ info->payload = it->second.payload; |
+ } |
} |
} |
@@ -1186,29 +1188,37 @@ void SyncManagerImpl::OnIncomingInvalidation( |
const ObjectIdInvalidationMap& invalidation_map) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- const ModelTypeInvalidationMap& type_invalidation_map = |
- ObjectIdInvalidationMapToModelTypeInvalidationMap(invalidation_map); |
- if (type_invalidation_map.empty()) { |
+ // We should never receive IDs from non-sync objects. |
+ ObjectIdSet ids = ObjectIdInvalidationMapToSet(invalidation_map); |
+ for (ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) { |
+ ModelType type; |
+ if (!ObjectIdToRealModelType(*it, &type)) { |
+ DLOG(WARNING) << "Notification has invalid id: " << ObjectIdToString(*it); |
+ } |
+ } |
+ |
+ if (invalidation_map.empty()) { |
LOG(WARNING) << "Sync received invalidation without any type information."; |
} else { |
allstatus_.IncrementNudgeCounter(NUDGE_SOURCE_NOTIFICATION); |
scheduler_->ScheduleInvalidationNudge( |
TimeDelta::FromMilliseconds(kSyncSchedulerDelayMsec), |
- type_invalidation_map, FROM_HERE); |
+ invalidation_map, FROM_HERE); |
allstatus_.IncrementNotificationsReceived(); |
- UpdateNotificationInfo(type_invalidation_map); |
- debug_info_event_listener_.OnIncomingNotification(type_invalidation_map); |
+ UpdateNotificationInfo(invalidation_map); |
+ debug_info_event_listener_.OnIncomingNotification(invalidation_map); |
} |
if (js_event_handler_.IsInitialized()) { |
base::DictionaryValue details; |
base::ListValue* changed_types = new base::ListValue(); |
details.Set("changedTypes", changed_types); |
- for (ModelTypeInvalidationMap::const_iterator it = |
- type_invalidation_map.begin(); it != type_invalidation_map.end(); |
- ++it) { |
- const std::string& model_type_str = |
- ModelTypeToString(it->first); |
+ ObjectIdSet id_set = ObjectIdInvalidationMapToSet(invalidation_map); |
+ ModelTypeSet nudged_types = ObjectIdSetToModelTypeSet(id_set); |
+ DCHECK(!nudged_types.Empty()); |
+ for (ModelTypeSet::Iterator it = nudged_types.First(); |
+ it.Good(); it.Inc()) { |
+ const std::string model_type_str = ModelTypeToString(it.Get()); |
changed_types->Append(new base::StringValue(model_type_str)); |
} |
details.SetString("source", "REMOTE_INVALIDATION"); |