From 6529382867932acbf83e49bc107fbe4ea28ad311 Mon Sep 17 00:00:00 2001 From: "akalin@chromium.org" Date: Fri, 10 Aug 2012 04:07:19 +0000 Subject: [Sync] Avoid unregistering object IDs on shutdown Add RegisterHandler() and UnregisterHandler(), which should be called before and after calls to UpdateRegisteredIds(). Use UnregisterHandler() on shutdown instead of UpdateRegisteredIds(_, ObjectIdSet()). Make SyncNotifierHelper non-thread-safe. Fix test breakages that this revealed. Also add GetAllRegisteredIds() instead of making it the return value of UpdateRegisteredIds(). Propagate UpdateRegisteredIds()/RegisterHandler()/UnregisterHandler() all the way up to ProfileSyncService. Make FakeSyncManager be created on the sync thread. Clean up SyncBackendHost startup/shutdown behavior a bit. BUG=140325 Review URL: https://chromiumcodereview.appspot.com/10824161 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150990 0039d316-1c4b-4281-b951-d872f2087c98 --- sync/internal_api/public/sync_manager.h | 11 ++++-- sync/internal_api/public/test/fake_sync_manager.h | 43 +++++++++++++---------- 2 files changed, 33 insertions(+), 21 deletions(-) (limited to 'sync/internal_api/public') diff --git a/sync/internal_api/public/sync_manager.h b/sync/internal_api/public/sync_manager.h index 0cb6a4c..01d919c 100644 --- a/sync/internal_api/public/sync_manager.h +++ b/sync/internal_api/public/sync_manager.h @@ -407,12 +407,19 @@ class SyncManager { virtual void UpdateEnabledTypes( const ModelTypeSet& enabled_types) = 0; - // Forwards to the underlying notifier (see - // SyncNotifier::UpdateRegisteredIds()). + // Forwards to the underlying notifier (see comments in sync_notifier.h). + virtual void RegisterInvalidationHandler( + SyncNotifierObserver* handler) = 0; + + // Forwards to the underlying notifier (see comments in sync_notifier.h). virtual void UpdateRegisteredInvalidationIds( SyncNotifierObserver* handler, const ObjectIdSet& ids) = 0; + // Forwards to the underlying notifier (see comments in sync_notifier.h). + virtual void UnregisterInvalidationHandler( + SyncNotifierObserver* handler) = 0; + // Put the syncer in normal mode ready to perform nudges and polls. virtual void StartSyncingNormally( const ModelSafeRoutingInfo& routing_info) = 0; diff --git a/sync/internal_api/public/test/fake_sync_manager.h b/sync/internal_api/public/test/fake_sync_manager.h index 12f3f70..71fe35e 100644 --- a/sync/internal_api/public/test/fake_sync_manager.h +++ b/sync/internal_api/public/test/fake_sync_manager.h @@ -10,7 +10,7 @@ #include "base/memory/ref_counted.h" #include "base/observer_list.h" #include "sync/internal_api/public/sync_manager.h" -#include "sync/notifier/sync_notifier_helper.h" +#include "sync/notifier/sync_notifier_registrar.h" namespace base { class SequencedTaskRunner; @@ -20,25 +20,23 @@ namespace syncer { class FakeSyncManager : public SyncManager { public: - explicit FakeSyncManager(); + // |initial_sync_ended_types|: The set of types that have initial_sync_ended + // set to true. This value will be used by InitialSyncEndedTypes() until the + // next configuration is performed. + // + // |progress_marker_types|: The set of types that have valid progress + // markers. This will be used by GetTypesWithEmptyProgressMarkerToken() until + // the next configuration is performed. + // + // |configure_fail_types|: The set of types that will fail + // configuration. Once ConfigureSyncer is called, the + // |initial_sync_ended_types_| and |progress_marker_types_| will be updated + // to include those types that didn't fail. + FakeSyncManager(ModelTypeSet initial_sync_ended_types, + ModelTypeSet progress_marker_types, + ModelTypeSet configure_fail_types); virtual ~FakeSyncManager(); - // The set of types that have initial_sync_ended set to true. This value will - // be used by InitialSyncEndedTypes() until the next configuration is - // performed. - void set_initial_sync_ended_types(ModelTypeSet types); - - // The set of types that have valid progress markers. This will be used by - // GetTypesWithEmptyProgressMarkerToken() until the next configuration is - // performed. - void set_progress_marker_types(ModelTypeSet types); - - // The set of types that will fail configuration. Once ConfigureSyncer is - // called, the |initial_sync_ended_types_| and - // |progress_marker_types_| will be updated to include those types - // that didn't fail. - void set_configure_fail_types(ModelTypeSet types); - // Returns those types that have been cleaned (purged from the directory) // since the last call to GetAndResetCleanedTypes(), or since startup if never // called. @@ -63,6 +61,9 @@ class FakeSyncManager : public SyncManager { // Posts a method to disable notifications on the sync thread. void DisableNotifications(NotificationsDisabledReason reason); + // Block until the sync thread has finished processing any pending messages. + void WaitForSyncThread(); + // SyncManager implementation. // Note: we treat whatever message loop this is called from as the sync // loop for purposes of callbacks. @@ -94,9 +95,13 @@ class FakeSyncManager : public SyncManager { virtual bool PurgePartiallySyncedTypes() OVERRIDE; virtual void UpdateCredentials(const SyncCredentials& credentials) OVERRIDE; virtual void UpdateEnabledTypes(const ModelTypeSet& types) OVERRIDE; + virtual void RegisterInvalidationHandler( + SyncNotifierObserver* handler) OVERRIDE; virtual void UpdateRegisteredInvalidationIds( SyncNotifierObserver* handler, const ObjectIdSet& ids) OVERRIDE; + virtual void UnregisterInvalidationHandler( + SyncNotifierObserver* handler) OVERRIDE; virtual void StartSyncingNormally( const ModelSafeRoutingInfo& routing_info) OVERRIDE; virtual void SetEncryptionPassphrase(const std::string& passphrase, @@ -150,7 +155,7 @@ class FakeSyncManager : public SyncManager { ModelTypeSet enabled_types_; // Faked notifier state. - SyncNotifierHelper notifier_helper_; + SyncNotifierRegistrar registrar_; DISALLOW_COPY_AND_ASSIGN(FakeSyncManager); }; -- cgit v1.1