Index: chrome/browser/sync/glue/chrome_sync_notification_bridge.cc |
diff --git a/chrome/browser/sync/glue/chrome_sync_notification_bridge.cc b/chrome/browser/sync/glue/chrome_sync_notification_bridge.cc |
index 78212d21b3f69bce073b10f088aaf66194effaaa..76b62bf4755e72e2aaa8fe8d45fbeff07700514d 100644 |
--- a/chrome/browser/sync/glue/chrome_sync_notification_bridge.cc |
+++ b/chrome/browser/sync/glue/chrome_sync_notification_bridge.cc |
@@ -25,11 +25,12 @@ class ChromeSyncNotificationBridge::Core |
// All member functions below must be called on the sync task runner. |
+ void UpdateEnabledTypes(syncer::ModelTypeSet enabled_types); |
void AddObserver(syncer::SyncNotifierObserver* observer); |
void RemoveObserver(syncer::SyncNotifierObserver* observer); |
void EmitNotification( |
- syncer::ModelTypePayloadMap payload_map, |
+ const syncer::ModelTypePayloadMap& payload_map, |
syncer::IncomingNotificationSource notification_source); |
private: |
@@ -57,6 +58,12 @@ ChromeSyncNotificationBridge::Core::~Core() { |
sync_task_runner_->RunsTasksOnCurrentThread()); |
} |
+void ChromeSyncNotificationBridge::Core::UpdateEnabledTypes( |
+ syncer::ModelTypeSet types) { |
+ DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); |
+ enabled_types_ = types; |
+} |
+ |
void ChromeSyncNotificationBridge::Core::AddObserver( |
syncer::SyncNotifierObserver* observer) { |
DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); |
@@ -70,12 +77,17 @@ void ChromeSyncNotificationBridge::Core::RemoveObserver( |
} |
void ChromeSyncNotificationBridge::Core::EmitNotification( |
- syncer::ModelTypePayloadMap payload_map, |
+ const syncer::ModelTypePayloadMap& payload_map, |
syncer::IncomingNotificationSource notification_source) { |
DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); |
+ const syncer::ModelTypePayloadMap& effective_payload_map = |
+ payload_map.empty() ? |
+ syncer::ModelTypePayloadMapFromEnumSet(enabled_types_, std::string()) : |
+ payload_map; |
+ |
FOR_EACH_OBSERVER( |
syncer::SyncNotifierObserver, observers_, |
- OnIncomingNotification(payload_map, notification_source)); |
+ OnIncomingNotification(effective_payload_map, notification_source)); |
} |
ChromeSyncNotificationBridge::ChromeSyncNotificationBridge( |
@@ -94,9 +106,9 @@ ChromeSyncNotificationBridge::ChromeSyncNotificationBridge( |
ChromeSyncNotificationBridge::~ChromeSyncNotificationBridge() {} |
void ChromeSyncNotificationBridge::UpdateEnabledTypes( |
- const syncer::ModelTypeSet types) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- enabled_types_ = types; |
+ syncer::ModelTypeSet types) { |
+ DCHECK(sync_task_runner_->RunsTasksOnCurrentThread()); |
+ core_->UpdateEnabledTypes(types); |
} |
void ChromeSyncNotificationBridge::AddObserver( |
@@ -129,14 +141,7 @@ void ChromeSyncNotificationBridge::Observe( |
content::Details<const syncer::ModelTypePayloadMap> |
payload_details(details); |
- syncer::ModelTypePayloadMap payload_map = *(payload_details.ptr()); |
- |
- if (payload_map.empty()) { |
- // No model types to invalidate, invalidating all enabled types. |
- payload_map = |
- syncer::ModelTypePayloadMapFromEnumSet(enabled_types_, std::string()); |
- } |
- |
+ const syncer::ModelTypePayloadMap& payload_map = *(payload_details.ptr()); |
sync_task_runner_->PostTask( |
FROM_HERE, |
base::Bind(&Core::EmitNotification, |