diff options
author | bartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 17:08:51 +0000 |
---|---|---|
committer | bartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-16 17:08:51 +0000 |
commit | fcf3880e1654c58a8cec516b23aa98f28b97bf21 (patch) | |
tree | ebded38fa1c3dffe17bf7b8f797a1c4f89d3be66 /sync | |
parent | c8412e73cc8498a583eb987832b6f69373baa697 (diff) | |
download | chromium_src-fcf3880e1654c58a8cec516b23aa98f28b97bf21.zip chromium_src-fcf3880e1654c58a8cec516b23aa98f28b97bf21.tar.gz chromium_src-fcf3880e1654c58a8cec516b23aa98f28b97bf21.tar.bz2 |
Reduce dependency of TiclInvalidationService on Profile
With this CL, a URLRequestContext and an InvalidationStateTracker are
passed to TiclInvalidationService as explicit dependencies. This reduces
the dependency of TiclInvalidationService on Profile, taking a step toward
eventually removing the dependency altogether.
BUG=358696
TEST=Updated unit tests
Review URL: https://codereview.chromium.org/221963003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264226 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync')
-rw-r--r-- | sync/notifier/fake_invalidation_state_tracker.cc | 2 | ||||
-rw-r--r-- | sync/notifier/fake_invalidation_state_tracker.h | 2 | ||||
-rw-r--r-- | sync/notifier/invalidation_state_tracker.h | 11 | ||||
-rw-r--r-- | sync/notifier/non_blocking_invalidator.cc | 88 | ||||
-rw-r--r-- | sync/notifier/non_blocking_invalidator.h | 36 | ||||
-rw-r--r-- | sync/notifier/non_blocking_invalidator_unittest.cc | 7 | ||||
-rw-r--r-- | sync/tools/null_invalidation_state_tracker.cc | 2 | ||||
-rw-r--r-- | sync/tools/null_invalidation_state_tracker.h | 2 |
8 files changed, 96 insertions, 54 deletions
diff --git a/sync/notifier/fake_invalidation_state_tracker.cc b/sync/notifier/fake_invalidation_state_tracker.cc index 47e2f0f..ccef53e 100644 --- a/sync/notifier/fake_invalidation_state_tracker.cc +++ b/sync/notifier/fake_invalidation_state_tracker.cc @@ -18,7 +18,7 @@ FakeInvalidationStateTracker::FakeInvalidationStateTracker() {} FakeInvalidationStateTracker::~FakeInvalidationStateTracker() {} -void FakeInvalidationStateTracker::SetInvalidatorClientId( +void FakeInvalidationStateTracker::ClearAndSetNewClientId( const std::string& client_id) { Clear(); invalidator_client_id_ = client_id; diff --git a/sync/notifier/fake_invalidation_state_tracker.h b/sync/notifier/fake_invalidation_state_tracker.h index d1daaba..eb62256 100644 --- a/sync/notifier/fake_invalidation_state_tracker.h +++ b/sync/notifier/fake_invalidation_state_tracker.h @@ -20,7 +20,7 @@ class FakeInvalidationStateTracker virtual ~FakeInvalidationStateTracker(); // InvalidationStateTracker implementation. - virtual void SetInvalidatorClientId(const std::string& client_id) OVERRIDE; + virtual void ClearAndSetNewClientId(const std::string& client_id) OVERRIDE; virtual std::string GetInvalidatorClientId() const OVERRIDE; virtual void SetBootstrapData(const std::string& data) OVERRIDE; virtual std::string GetBootstrapData() const OVERRIDE; diff --git a/sync/notifier/invalidation_state_tracker.h b/sync/notifier/invalidation_state_tracker.h index 81a07ea..22e3e6f 100644 --- a/sync/notifier/invalidation_state_tracker.h +++ b/sync/notifier/invalidation_state_tracker.h @@ -30,14 +30,16 @@ class TaskRunner; namespace syncer { -class InvalidationStateTracker { +class SYNC_EXPORT InvalidationStateTracker { public: InvalidationStateTracker() {} + virtual ~InvalidationStateTracker() {} // The per-client unique ID used to register the invalidation client with the // server. This is used to squelch invalidation notifications that originate - // from changes made by this client. - virtual void SetInvalidatorClientId(const std::string& data) = 0; + // from changes made by this client. Setting the client ID clears all other + // state. + virtual void ClearAndSetNewClientId(const std::string& data) = 0; virtual std::string GetInvalidatorClientId() const = 0; // Used by invalidation::InvalidationClient for persistence. |data| is an @@ -55,9 +57,6 @@ class InvalidationStateTracker { // Erases invalidation versions, client ID, and state stored on disk. virtual void Clear() = 0; - - protected: - virtual ~InvalidationStateTracker() {} }; } // namespace syncer diff --git a/sync/notifier/non_blocking_invalidator.cc b/sync/notifier/non_blocking_invalidator.cc index db8d018..df40477 100644 --- a/sync/notifier/non_blocking_invalidator.cc +++ b/sync/notifier/non_blocking_invalidator.cc @@ -13,7 +13,9 @@ #include "base/thread_task_runner_handle.h" #include "base/threading/thread.h" #include "jingle/notifier/listener/push_client.h" +#include "sync/internal_api/public/util/weak_handle.h" #include "sync/notifier/gcm_network_channel_delegate.h" +#include "sync/notifier/invalidation_handler.h" #include "sync/notifier/invalidation_notifier.h" #include "sync/notifier/object_id_invalidation_map.h" #include "sync/notifier/sync_system_resources.h" @@ -95,10 +97,9 @@ class NonBlockingInvalidator::Core // InvalidationHandler to observe the InvalidationNotifier we create. public InvalidationHandler { public: - // Called on parent thread. |delegate_observer| should be - // initialized. + // Called on parent thread. |delegate_observer| should be initialized. explicit Core( - const WeakHandle<InvalidationHandler>& delegate_observer); + const WeakHandle<NonBlockingInvalidator>& delegate_observer); // Helpers called on I/O thread. void Initialize( @@ -123,7 +124,7 @@ class NonBlockingInvalidator::Core virtual ~Core(); // The variables below should be used only on the I/O thread. - const WeakHandle<InvalidationHandler> delegate_observer_; + const WeakHandle<NonBlockingInvalidator> delegate_observer_; scoped_ptr<InvalidationNotifier> invalidation_notifier_; scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_; @@ -131,7 +132,7 @@ class NonBlockingInvalidator::Core }; NonBlockingInvalidator::Core::Core( - const WeakHandle<InvalidationHandler>& delegate_observer) + const WeakHandle<NonBlockingInvalidator>& delegate_observer) : delegate_observer_(delegate_observer) { DCHECK(delegate_observer_.IsInitialized()); } @@ -185,15 +186,16 @@ void NonBlockingInvalidator::Core::RequestDetailedStatus( void NonBlockingInvalidator::Core::OnInvalidatorStateChange( InvalidatorState reason) { DCHECK(network_task_runner_->BelongsToCurrentThread()); - delegate_observer_.Call( - FROM_HERE, &InvalidationHandler::OnInvalidatorStateChange, reason); + delegate_observer_.Call(FROM_HERE, + &NonBlockingInvalidator::OnInvalidatorStateChange, + reason); } void NonBlockingInvalidator::Core::OnIncomingInvalidation( const ObjectIdInvalidationMap& invalidation_map) { DCHECK(network_task_runner_->BelongsToCurrentThread()); delegate_observer_.Call(FROM_HERE, - &InvalidationHandler::OnIncomingInvalidation, + &NonBlockingInvalidator::OnIncomingInvalidation, invalidation_map); } @@ -206,11 +208,11 @@ NonBlockingInvalidator::NonBlockingInvalidator( const std::string& invalidator_client_id, const UnackedInvalidationsMap& saved_invalidations, const std::string& invalidation_bootstrap_data, - const WeakHandle<InvalidationStateTracker>& - invalidation_state_tracker, + InvalidationStateTracker* invalidation_state_tracker, const std::string& client_info, const scoped_refptr<net::URLRequestContextGetter>& request_context_getter) - : parent_task_runner_(base::ThreadTaskRunnerHandle::Get()), + : invalidation_state_tracker_(invalidation_state_tracker), + parent_task_runner_(base::ThreadTaskRunnerHandle::Get()), network_task_runner_(request_context_getter->GetNetworkTaskRunner()), weak_ptr_factory_(this) { core_ = new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr())); @@ -220,7 +222,7 @@ NonBlockingInvalidator::NonBlockingInvalidator( invalidator_client_id, saved_invalidations, invalidation_bootstrap_data, - invalidation_state_tracker, + MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()), client_info, request_context_getter); @@ -298,19 +300,6 @@ void NonBlockingInvalidator::RequestDetailedStatus( } } -void NonBlockingInvalidator::OnInvalidatorStateChange(InvalidatorState state) { - DCHECK(parent_task_runner_->BelongsToCurrentThread()); - registrar_.UpdateInvalidatorState(state); -} - -void NonBlockingInvalidator::OnIncomingInvalidation( - const ObjectIdInvalidationMap& invalidation_map) { - DCHECK(parent_task_runner_->BelongsToCurrentThread()); - registrar_.DispatchInvalidationsToHandlers(invalidation_map); -} - -std::string NonBlockingInvalidator::GetOwnerName() const { return "Sync"; } - NetworkChannelCreator NonBlockingInvalidator::MakePushClientChannelCreator( const notifier::NotifierOptions& notifier_options) { @@ -326,4 +315,53 @@ NetworkChannelCreator NonBlockingInvalidator::MakeGCMNetworkChannelCreator( base::Passed(&delegate)); } +void NonBlockingInvalidator::ClearAndSetNewClientId(const std::string& data) { + DCHECK(parent_task_runner_->BelongsToCurrentThread()); + invalidation_state_tracker_->ClearAndSetNewClientId(data); +} + +std::string NonBlockingInvalidator::GetInvalidatorClientId() const { + DCHECK(parent_task_runner_->BelongsToCurrentThread()); + return invalidation_state_tracker_->GetInvalidatorClientId(); +} + +void NonBlockingInvalidator::SetBootstrapData(const std::string& data) { + DCHECK(parent_task_runner_->BelongsToCurrentThread()); + invalidation_state_tracker_->SetBootstrapData(data); +} + +std::string NonBlockingInvalidator::GetBootstrapData() const { + DCHECK(parent_task_runner_->BelongsToCurrentThread()); + return invalidation_state_tracker_->GetBootstrapData(); +} + +void NonBlockingInvalidator::SetSavedInvalidations( + const UnackedInvalidationsMap& states) { + DCHECK(parent_task_runner_->BelongsToCurrentThread()); + invalidation_state_tracker_->SetSavedInvalidations(states); +} + +UnackedInvalidationsMap NonBlockingInvalidator::GetSavedInvalidations() const { + DCHECK(parent_task_runner_->BelongsToCurrentThread()); + return invalidation_state_tracker_->GetSavedInvalidations(); +} + +void NonBlockingInvalidator::Clear() { + DCHECK(parent_task_runner_->BelongsToCurrentThread()); + invalidation_state_tracker_->Clear(); +} + +void NonBlockingInvalidator::OnInvalidatorStateChange(InvalidatorState state) { + DCHECK(parent_task_runner_->BelongsToCurrentThread()); + registrar_.UpdateInvalidatorState(state); +} + +void NonBlockingInvalidator::OnIncomingInvalidation( + const ObjectIdInvalidationMap& invalidation_map) { + DCHECK(parent_task_runner_->BelongsToCurrentThread()); + registrar_.DispatchInvalidationsToHandlers(invalidation_map); +} + +std::string NonBlockingInvalidator::GetOwnerName() const { return "Sync"; } + } // namespace syncer diff --git a/sync/notifier/non_blocking_invalidator.h b/sync/notifier/non_blocking_invalidator.h index 47bd216..efdf89d 100644 --- a/sync/notifier/non_blocking_invalidator.h +++ b/sync/notifier/non_blocking_invalidator.h @@ -17,11 +17,11 @@ #include "base/memory/weak_ptr.h" #include "jingle/notifier/base/notifier_options.h" #include "sync/base/sync_export.h" -#include "sync/internal_api/public/util/weak_handle.h" -#include "sync/notifier/invalidation_handler.h" #include "sync/notifier/invalidation_state_tracker.h" #include "sync/notifier/invalidator.h" #include "sync/notifier/invalidator_registrar.h" +#include "sync/notifier/invalidator_state.h" +#include "sync/notifier/unacked_invalidation_set.h" namespace base { class SingleThreadTaskRunner; @@ -38,17 +38,15 @@ typedef base::Callback<scoped_ptr<SyncNetworkChannel>(void)> class SYNC_EXPORT_PRIVATE NonBlockingInvalidator : public Invalidator, - // InvalidationHandler to "observe" our Core via WeakHandle. - public InvalidationHandler { + public InvalidationStateTracker { public: - // |invalidation_state_tracker| must be initialized. + // |invalidation_state_tracker| must be initialized and must outlive |this|. NonBlockingInvalidator( NetworkChannelCreator network_channel_creator, const std::string& invalidator_client_id, const UnackedInvalidationsMap& saved_invalidations, const std::string& invalidation_bootstrap_data, - const WeakHandle<InvalidationStateTracker>& - invalidation_state_tracker, + InvalidationStateTracker* invalidation_state_tracker, const std::string& client_info, const scoped_refptr<net::URLRequestContextGetter>& request_context_getter); @@ -67,12 +65,6 @@ class SYNC_EXPORT_PRIVATE NonBlockingInvalidator base::Callback<void(const base::DictionaryValue&)> callback) const OVERRIDE; - // InvalidationHandler implementation. - virtual void OnInvalidatorStateChange(InvalidatorState state) OVERRIDE; - virtual void OnIncomingInvalidation( - const ObjectIdInvalidationMap& invalidation_map) OVERRIDE; - virtual std::string GetOwnerName() const OVERRIDE; - // Static functions to construct callback that creates network channel for // SyncSystemResources. The goal is to pass network channel to invalidator at // the same time not exposing channel specific parameters to invalidator and @@ -82,11 +74,29 @@ class SYNC_EXPORT_PRIVATE NonBlockingInvalidator static NetworkChannelCreator MakeGCMNetworkChannelCreator( scoped_refptr<net::URLRequestContextGetter> request_context_getter, scoped_ptr<GCMNetworkChannelDelegate> delegate); + + // These methods are forwarded to the invalidation_state_tracker_. + virtual void ClearAndSetNewClientId(const std::string& data) OVERRIDE; + virtual std::string GetInvalidatorClientId() const OVERRIDE; + virtual void SetBootstrapData(const std::string& data) OVERRIDE; + virtual std::string GetBootstrapData() const OVERRIDE; + virtual void SetSavedInvalidations( + const UnackedInvalidationsMap& states) OVERRIDE; + virtual UnackedInvalidationsMap GetSavedInvalidations() const OVERRIDE; + virtual void Clear() OVERRIDE; + private: + void OnInvalidatorStateChange(InvalidatorState state); + void OnIncomingInvalidation(const ObjectIdInvalidationMap& invalidation_map); + std::string GetOwnerName() const; + + friend class NonBlockingInvalidatorTestDelegate; + struct InitializeOptions; class Core; InvalidatorRegistrar registrar_; + InvalidationStateTracker* invalidation_state_tracker_; // The real guts of NonBlockingInvalidator, which allows this class to live // completely on the parent thread. diff --git a/sync/notifier/non_blocking_invalidator_unittest.cc b/sync/notifier/non_blocking_invalidator_unittest.cc index 3dd2dbb..07700a5 100644 --- a/sync/notifier/non_blocking_invalidator_unittest.cc +++ b/sync/notifier/non_blocking_invalidator_unittest.cc @@ -13,7 +13,6 @@ #include "google/cacheinvalidation/types.pb.h" #include "jingle/notifier/base/fake_base_task.h" #include "net/url_request/url_request_test_util.h" -#include "sync/internal_api/public/util/weak_handle.h" #include "sync/notifier/fake_invalidation_handler.h" #include "sync/notifier/invalidation_state_tracker.h" #include "sync/notifier/invalidator_test_template.h" @@ -21,8 +20,6 @@ namespace syncer { -namespace { - class NonBlockingInvalidatorTestDelegate { public: NonBlockingInvalidatorTestDelegate() : io_thread_("IO thread") {} @@ -52,7 +49,7 @@ class NonBlockingInvalidatorTestDelegate { invalidator_client_id, UnackedInvalidationsMap(), initial_state, - MakeWeakHandle(invalidation_state_tracker), + invalidation_state_tracker.get(), "fake_client_info", request_context_getter_)); } @@ -98,6 +95,4 @@ INSTANTIATE_TYPED_TEST_CASE_P( NonBlockingInvalidatorTest, InvalidatorTest, NonBlockingInvalidatorTestDelegate); -} // namespace - } // namespace syncer diff --git a/sync/tools/null_invalidation_state_tracker.cc b/sync/tools/null_invalidation_state_tracker.cc index 6823759..d7f949f 100644 --- a/sync/tools/null_invalidation_state_tracker.cc +++ b/sync/tools/null_invalidation_state_tracker.cc @@ -17,7 +17,7 @@ namespace syncer { NullInvalidationStateTracker::NullInvalidationStateTracker() {} NullInvalidationStateTracker::~NullInvalidationStateTracker() {} -void NullInvalidationStateTracker::SetInvalidatorClientId( +void NullInvalidationStateTracker::ClearAndSetNewClientId( const std::string& data) { LOG(INFO) << "Setting invalidator client ID to: " << data; } diff --git a/sync/tools/null_invalidation_state_tracker.h b/sync/tools/null_invalidation_state_tracker.h index a12844c..a08fe7d 100644 --- a/sync/tools/null_invalidation_state_tracker.h +++ b/sync/tools/null_invalidation_state_tracker.h @@ -18,7 +18,7 @@ class NullInvalidationStateTracker NullInvalidationStateTracker(); virtual ~NullInvalidationStateTracker(); - virtual void SetInvalidatorClientId(const std::string& data) OVERRIDE; + virtual void ClearAndSetNewClientId(const std::string& data) OVERRIDE; virtual std::string GetInvalidatorClientId() const OVERRIDE; virtual std::string GetBootstrapData() const OVERRIDE; |