Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Unified Diff: sync/internal_api/sync_manager.cc

Issue 10702074: Refactor sync-specific parts out of SyncNotifier/SyncNotifierObserver (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sync/internal_api/sync_manager.cc
diff --git a/sync/internal_api/sync_manager.cc b/sync/internal_api/sync_manager.cc
index c8a293ea85f3ffc7e861d42891072d6535ca265d..4af7f045548067199e913b9dab765eeb679be906 100644
--- a/sync/internal_api/sync_manager.cc
+++ b/sync/internal_api/sync_manager.cc
@@ -299,11 +299,12 @@ class SyncManager::SyncInternal
bool encrypt_everything) OVERRIDE;
// SyncNotifierObserver implementation.
+ virtual ObjectIdSet GetHandledIds() OVERRIDE;
virtual void OnNotificationsEnabled() OVERRIDE;
virtual void OnNotificationsDisabled(
syncer::NotificationsDisabledReason reason) OVERRIDE;
virtual void OnIncomingNotification(
- const syncer::ModelTypePayloadMap& type_payloads,
+ const ObjectIdPayloadMap& id_payloads,
syncer::IncomingNotificationSource source) OVERRIDE;
void AddObserver(SyncManager::Observer* observer);
@@ -548,6 +549,10 @@ class SyncManager::SyncInternal
// The SyncNotifier which notifies us when updates need to be downloaded.
scoped_ptr<syncer::SyncNotifier> sync_notifier_;
+ // The model types we want to register for notifications on represented as
+ // invalidation::ObjectIds.
+ ObjectIdSet enabled_sync_types_;
+
// A multi-purpose status watch object that aggregates stats from various
// sync components.
AllStatus allstatus_;
@@ -955,7 +960,7 @@ bool SyncManager::SyncInternal::Init(
if (!signed_in && testing_mode_ == NON_TEST)
return false;
- sync_notifier_->AddObserver(this);
+ sync_notifier_->AddHandler(this);
return signed_in;
}
@@ -1178,7 +1183,18 @@ void SyncManager::SyncInternal::UpdateCredentials(
void SyncManager::SyncInternal::UpdateEnabledTypes(
const ModelTypeSet& enabled_types) {
DCHECK(thread_checker_.CalledOnValidThread());
- sync_notifier_->UpdateEnabledTypes(enabled_types);
+ // TODO(dcheng): Should this be a helper?
+ enabled_sync_types_.clear();
+ for (ModelTypeSet::Iterator iter = enabled_types.First(); iter.Good();
+ iter.Inc()) {
+ invalidation::ObjectId model_type_as_id;
+ if (!RealModelTypeToObjectId(iter.Get(), &model_type_as_id)) {
+ DLOG(WARNING) << "Invalid model type " << iter.Get();
+ continue;
+ }
+ enabled_sync_types_.insert(model_type_as_id);
+ }
+ sync_notifier_->ReloadHandlers();
}
void SyncManager::SyncInternal::SetEncryptionPassphrase(
@@ -1664,7 +1680,7 @@ void SyncManager::SyncInternal::ShutdownOnSyncThread() {
RemoveObserver(&debug_info_event_listener_);
if (sync_notifier_.get()) {
- sync_notifier_->RemoveObserver(this);
+ sync_notifier_->RemoveHandler(this);
}
sync_notifier_.reset();
@@ -2247,6 +2263,10 @@ void SyncManager::SyncInternal::UpdateNotificationInfo(
}
}
+ObjectIdSet SyncManager::SyncInternal::GetHandledIds() {
+ return enabled_sync_types_;
+}
+
void SyncManager::SyncInternal::OnNotificationsEnabled() {
DVLOG(1) << "Notifications enabled";
allstatus_.SetNotificationsEnabled(true);
@@ -2286,9 +2306,11 @@ void SyncManager::SyncInternal::OnNotificationsDisabled(
}
void SyncManager::SyncInternal::OnIncomingNotification(
- const syncer::ModelTypePayloadMap& type_payloads,
+ const ObjectIdPayloadMap& id_payloads,
syncer::IncomingNotificationSource source) {
DCHECK(thread_checker_.CalledOnValidThread());
+ ModelTypePayloadMap type_payloads =
+ ObjectIdPayloadMapToModelTypePayloadMap(id_payloads);
if (source == syncer::LOCAL_NOTIFICATION) {
if (scheduler()) {
scheduler()->ScheduleNudgeWithPayloadsAsync(
@@ -2410,12 +2432,11 @@ void SyncManager::SimulateDisableNotificationsForTest(int reason) {
void SyncManager::TriggerOnIncomingNotificationForTest(
ModelTypeSet model_types) {
DCHECK(thread_checker_.CalledOnValidThread());
- syncer::ModelTypePayloadMap model_types_with_payloads =
- syncer::ModelTypePayloadMapFromEnumSet(model_types,
- std::string());
-
- data_->OnIncomingNotification(model_types_with_payloads,
- syncer::REMOTE_NOTIFICATION);
+ ModelTypePayloadMap type_payloads =
+ ModelTypePayloadMapFromEnumSet(model_types, std::string());
+ data_->OnIncomingNotification(
+ ModelTypePayloadMapToObjectIdPayloadMap(type_payloads),
+ REMOTE_NOTIFICATION);
}
const char* ConnectionStatusToString(ConnectionStatus status) {

Powered by Google App Engine
This is Rietveld 408576698