Chromium Code Reviews| Index: chrome/browser/sync/engine/syncapi.cc |
| =================================================================== |
| --- chrome/browser/sync/engine/syncapi.cc (revision 71618) |
| +++ chrome/browser/sync/engine/syncapi.cc (working copy) |
| @@ -41,6 +41,7 @@ |
| #include "chrome/browser/sync/protocol/sync.pb.h" |
| #include "chrome/browser/sync/protocol/theme_specifics.pb.h" |
| #include "chrome/browser/sync/protocol/typed_url_specifics.pb.h" |
| +#include "chrome/browser/sync/sessions/sync_session.h" |
| #include "chrome/browser/sync/sessions/sync_session_context.h" |
| #include "chrome/browser/sync/syncable/autofill_migration.h" |
| #include "chrome/browser/sync/syncable/directory_manager.h" |
| @@ -83,6 +84,7 @@ |
| static const int kThreadExitTimeoutMsec = 60000; |
| static const int kSSLPort = 443; |
| +static const int kSyncerThreadDelayMsec = 250; |
| #if defined(OS_CHROMEOS) |
| static const int kChromeOSNetworkChangeReactionDelayHackMsec = 5000; |
| @@ -2194,21 +2196,28 @@ |
| void SyncManager::SyncInternal::OnIncomingNotification( |
| const IncomingNotificationData& notification_data) { |
| syncable::ModelTypeBitSet model_types; |
| + browser_sync::sessions::TypePayloadMap model_types_with_payloads; |
| // Check if the service url is a sync URL. An empty service URL is |
| // treated as a legacy sync notification. If we're listening to |
| // server-issued notifications, no need to check the service_url. |
| if (notifier_options_.notification_method == |
| notifier::NOTIFICATION_SERVER) { |
| - VLOG(1) << "Sync received server notification: " << |
| + VLOG(1) << "Sync received server notification from " << |
| + notification_data.service_url << ": " << |
| notification_data.service_specific_data; |
| + const std::string& model_type_list = notification_data.service_url; |
| + const std::string& notification_payload = |
| + notification_data.service_specific_data; |
| - if (!syncable::ModelTypeBitSetFromString( |
| - notification_data.service_specific_data, |
| - &model_types)) { |
| + if (!syncable::ModelTypeBitSetFromString(model_type_list, &model_types)) { |
| LOG(DFATAL) << "Could not extract model types from server data."; |
| model_types.set(); |
| } |
| + |
| + model_types_with_payloads = |
| + browser_sync::sessions::ModelTypeBitSetToTypePayloadMap( |
| + model_types, notification_payload); |
| } else if (notification_data.service_url.empty() || |
| (notification_data.service_url == |
| browser_sync::kSyncLegacyServiceUrl) || |
| @@ -2218,6 +2227,9 @@ |
| // Catch for sync integration tests (uses p2p). Just set all datatypes. |
| model_types.set(); |
|
akalin
2011/01/26 01:15:17
This should probably set only enabled types, i.e.
Nicolas Zea
2011/01/26 01:41:28
Done.
|
| + model_types_with_payloads = |
| + browser_sync::sessions::ModelTypeBitSetToTypePayloadMap( |
| + model_types, std::string()); |
| } else { |
| LOG(WARNING) << "Notification fron unexpected source: " |
| << notification_data.service_url; |
| @@ -2225,11 +2237,10 @@ |
| if (model_types.any()) { |
| if (syncer_thread()) { |
| - // Introduce a delay to help coalesce initial notifications. |
| - syncer_thread()->NudgeSyncerWithDataTypes( |
| - 250, |
| - SyncerThread::kNotification, |
| - model_types); |
| + syncer_thread()->NudgeSyncerWithPayloads( |
| + kSyncerThreadDelayMsec, |
| + SyncerThread::kNotification, |
| + model_types_with_payloads); |
| } |
| allstatus_.IncrementNotificationsReceived(); |
| } else { |