| 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) ||
|
| @@ -2216,8 +2225,13 @@
|
| browser_sync::kSyncServiceUrl)) {
|
| VLOG(1) << "Sync received P2P notification.";
|
|
|
| - // Catch for sync integration tests (uses p2p). Just set all datatypes.
|
| - model_types.set();
|
| + // Catch for sync integration tests (uses p2p). Just set all enabled
|
| + // datatypes.
|
| + ModelSafeRoutingInfo routes;
|
| + registrar_->GetModelSafeRoutingInfo(&routes);
|
| + model_types_with_payloads =
|
| + browser_sync::sessions::RoutingInfoToTypePayloadMap(routes,
|
| + std::string());
|
| } else {
|
| LOG(WARNING) << "Notification fron unexpected source: "
|
| << notification_data.service_url;
|
| @@ -2225,11 +2239,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 {
|
|
|