diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-29 03:29:18 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-29 03:29:18 +0000 |
commit | 0a561205646f2e75f860b9662d249a0924f3bad6 (patch) | |
tree | c4004601868f444c7bc6453c21867c4aa308224d /chrome | |
parent | 7bd80241b862451b05566797f4ef6debf98f5c45 (diff) | |
download | chromium_src-0a561205646f2e75f860b9662d249a0924f3bad6.zip chromium_src-0a561205646f2e75f860b9662d249a0924f3bad6.tar.gz chromium_src-0a561205646f2e75f860b9662d249a0924f3bad6.tar.bz2 |
[Sync] Pass cache_guid() to invalidation client
This is so that the server can detect and suppress notifications
to the browser instance which initiated the change.
BUG=87846
TEST=
Review URL: http://codereview.chromium.org/7248023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90920 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
9 files changed, 80 insertions, 24 deletions
diff --git a/chrome/browser/sync/engine/syncapi.cc b/chrome/browser/sync/engine/syncapi.cc index cb06e13..51e603c 100644 --- a/chrome/browser/sync/engine/syncapi.cc +++ b/chrome/browser/sync/engine/syncapi.cc @@ -1934,17 +1934,21 @@ bool SyncManager::SyncInternal::SignIn(const SyncCredentials& credentials) { // Retrieve and set the sync notifier state. This should be done // only after OpenDirectory is called. syncable::ScopedDirLookup lookup(dir_manager(), username_for_share()); + std::string unique_id; std::string state; if (lookup.good()) { + unique_id = lookup->cache_guid(); state = lookup->GetAndClearNotificationState(); + VLOG(1) << "Read notification unique ID: " << unique_id; + if (VLOG_IS_ON(1)) { + std::string encoded_state; + base::Base64Encode(state, &encoded_state); + VLOG(1) << "Read notification state: " << encoded_state; + } } else { - LOG(ERROR) << "Could not read notification state"; - } - if (VLOG_IS_ON(1)) { - std::string encoded_state; - base::Base64Encode(state, &encoded_state); - VLOG(1) << "Read notification state: " << encoded_state; + LOG(ERROR) << "Could not read notification unique ID/state"; } + sync_notifier_->SetUniqueId(unique_id); sync_notifier_->SetState(state); UpdateCredentials(credentials); diff --git a/chrome/browser/sync/engine/syncapi_unittest.cc b/chrome/browser/sync/engine/syncapi_unittest.cc index 2ff2f53..438fe7a 100644 --- a/chrome/browser/sync/engine/syncapi_unittest.cc +++ b/chrome/browser/sync/engine/syncapi_unittest.cc @@ -677,6 +677,7 @@ class SyncNotifierMock : public sync_notifier::SyncNotifier { public: MOCK_METHOD1(AddObserver, void(sync_notifier::SyncNotifierObserver*)); MOCK_METHOD1(RemoveObserver, void(sync_notifier::SyncNotifierObserver*)); + MOCK_METHOD1(SetUniqueId, void(const std::string&)); MOCK_METHOD1(SetState, void(const std::string&)); MOCK_METHOD2(UpdateCredentials, void(const std::string&, const std::string&)); @@ -710,6 +711,7 @@ class SyncManagerTest : public testing::Test, sync_notifier_mock_ = new StrictMock<SyncNotifierMock>(); EXPECT_CALL(*sync_notifier_mock_, AddObserver(_)). WillOnce(Invoke(this, &SyncManagerTest::SyncNotifierAddObserver)); + EXPECT_CALL(*sync_notifier_mock_, SetUniqueId(_)); EXPECT_CALL(*sync_notifier_mock_, SetState("")); EXPECT_CALL(*sync_notifier_mock_, UpdateCredentials(credentials.email, credentials.sync_token)); diff --git a/chrome/browser/sync/notifier/invalidation_notifier.cc b/chrome/browser/sync/notifier/invalidation_notifier.cc index 03bf2b7..c7e68b8 100644 --- a/chrome/browser/sync/notifier/invalidation_notifier.cc +++ b/chrome/browser/sync/notifier/invalidation_notifier.cc @@ -47,6 +47,11 @@ void InvalidationNotifier::RemoveObserver(SyncNotifierObserver* observer) { observers_.RemoveObserver(observer); } +void InvalidationNotifier::SetUniqueId(const std::string& unique_id) { + DCHECK(non_thread_safe_.CalledOnValidThread()); + invalidation_client_id_ = unique_id; +} + void InvalidationNotifier::SetState(const std::string& state) { DCHECK(non_thread_safe_.CalledOnValidThread()); invalidation_state_ = state; diff --git a/chrome/browser/sync/notifier/invalidation_notifier.h b/chrome/browser/sync/notifier/invalidation_notifier.h index 762aa93..78f72e4 100644 --- a/chrome/browser/sync/notifier/invalidation_notifier.h +++ b/chrome/browser/sync/notifier/invalidation_notifier.h @@ -45,6 +45,7 @@ class InvalidationNotifier // SyncNotifier implementation. virtual void AddObserver(SyncNotifierObserver* observer) OVERRIDE; virtual void RemoveObserver(SyncNotifierObserver* observer) OVERRIDE; + virtual void SetUniqueId(const std::string& unique_id) OVERRIDE; virtual void SetState(const std::string& state) OVERRIDE; virtual void UpdateCredentials( const std::string& email, const std::string& token) OVERRIDE; @@ -87,6 +88,9 @@ class InvalidationNotifier // Our observers (which must live on the same thread). ObserverList<SyncNotifierObserver> observers_; + // The client ID to pass to |chrome_invalidation_client_|. + std::string invalidation_client_id_; + // The state to pass to |chrome_invalidation_client_|. std::string invalidation_state_; diff --git a/chrome/browser/sync/notifier/non_blocking_invalidation_notifier.cc b/chrome/browser/sync/notifier/non_blocking_invalidation_notifier.cc index 0164efe..5ada8b8 100644 --- a/chrome/browser/sync/notifier/non_blocking_invalidation_notifier.cc +++ b/chrome/browser/sync/notifier/non_blocking_invalidation_notifier.cc @@ -29,6 +29,7 @@ class NonBlockingInvalidationNotifier::Core void Initialize(const notifier::NotifierOptions& notifier_options, const std::string& client_info); void Teardown(); + void SetUniqueId(const std::string& unique_id); void SetState(const std::string& state); void UpdateCredentials(const std::string& email, const std::string& token); void UpdateEnabledTypes(const syncable::ModelTypeSet& types); @@ -91,6 +92,12 @@ void NonBlockingInvalidationNotifier::Core::RemoveObserver( observers_->RemoveObserver(observer); } +void NonBlockingInvalidationNotifier::Core::SetUniqueId( + const std::string& unique_id) { + DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); + invalidation_notifier_->SetUniqueId(unique_id); +} + void NonBlockingInvalidationNotifier::Core::SetState( const std::string& state) { DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); @@ -142,8 +149,9 @@ NonBlockingInvalidationNotifier::NonBlockingInvalidationNotifier( NewRunnableMethod( core_.get(), &NonBlockingInvalidationNotifier::Core::Initialize, - notifier_options, client_info))) + notifier_options, client_info))) { NOTREACHED(); + } } NonBlockingInvalidationNotifier::~NonBlockingInvalidationNotifier() { @@ -152,8 +160,9 @@ NonBlockingInvalidationNotifier::~NonBlockingInvalidationNotifier() { FROM_HERE, NewRunnableMethod( core_.get(), - &NonBlockingInvalidationNotifier::Core::Teardown))) + &NonBlockingInvalidationNotifier::Core::Teardown))) { NOTREACHED(); + } } void NonBlockingInvalidationNotifier::AddObserver( @@ -168,6 +177,19 @@ void NonBlockingInvalidationNotifier::RemoveObserver( core_->RemoveObserver(observer); } +void NonBlockingInvalidationNotifier::SetUniqueId( + const std::string& unique_id) { + DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread()); + if (!io_message_loop_proxy_->PostTask( + FROM_HERE, + NewRunnableMethod( + core_.get(), + &NonBlockingInvalidationNotifier::Core::SetUniqueId, + unique_id))) { + NOTREACHED(); + } +} + void NonBlockingInvalidationNotifier::SetState(const std::string& state) { DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread()); if (!io_message_loop_proxy_->PostTask( @@ -175,8 +197,9 @@ void NonBlockingInvalidationNotifier::SetState(const std::string& state) { NewRunnableMethod( core_.get(), &NonBlockingInvalidationNotifier::Core::SetState, - state))) + state))) { NOTREACHED(); + } } void NonBlockingInvalidationNotifier::UpdateCredentials( @@ -187,8 +210,9 @@ void NonBlockingInvalidationNotifier::UpdateCredentials( NewRunnableMethod( core_.get(), &NonBlockingInvalidationNotifier::Core::UpdateCredentials, - email, token))) + email, token))) { NOTREACHED(); + } } void NonBlockingInvalidationNotifier::UpdateEnabledTypes( @@ -199,8 +223,9 @@ void NonBlockingInvalidationNotifier::UpdateEnabledTypes( NewRunnableMethod( core_.get(), &NonBlockingInvalidationNotifier::Core::UpdateEnabledTypes, - types))) + types))) { NOTREACHED(); + } } void NonBlockingInvalidationNotifier::SendNotification() { diff --git a/chrome/browser/sync/notifier/non_blocking_invalidation_notifier.h b/chrome/browser/sync/notifier/non_blocking_invalidation_notifier.h index e71a146..4a49115 100644 --- a/chrome/browser/sync/notifier/non_blocking_invalidation_notifier.h +++ b/chrome/browser/sync/notifier/non_blocking_invalidation_notifier.h @@ -12,6 +12,7 @@ #include <string> #include "base/basictypes.h" +#include "base/compiler_specific.h" #include "base/memory/ref_counted.h" #include "chrome/browser/sync/notifier/sync_notifier.h" #include "jingle/notifier/base/notifier_options.h" @@ -31,13 +32,15 @@ class NonBlockingInvalidationNotifier : public SyncNotifier { virtual ~NonBlockingInvalidationNotifier(); // SyncNotifier implementation. - virtual void AddObserver(SyncNotifierObserver* observer); - virtual void RemoveObserver(SyncNotifierObserver* observer); - virtual void SetState(const std::string& state); + virtual void AddObserver(SyncNotifierObserver* observer) OVERRIDE; + virtual void RemoveObserver(SyncNotifierObserver* observer) OVERRIDE; + virtual void SetUniqueId(const std::string& unique_id) OVERRIDE; + virtual void SetState(const std::string& state) OVERRIDE; virtual void UpdateCredentials( - const std::string& email, const std::string& token); - virtual void UpdateEnabledTypes(const syncable::ModelTypeSet& types); - virtual void SendNotification(); + const std::string& email, const std::string& token) OVERRIDE; + virtual void UpdateEnabledTypes( + const syncable::ModelTypeSet& types) OVERRIDE; + virtual void SendNotification() OVERRIDE; private: // The real guts of NonBlockingInvalidationNotifier, which allows this class diff --git a/chrome/browser/sync/notifier/p2p_notifier.cc b/chrome/browser/sync/notifier/p2p_notifier.cc index 8b57512..ba23eb3 100644 --- a/chrome/browser/sync/notifier/p2p_notifier.cc +++ b/chrome/browser/sync/notifier/p2p_notifier.cc @@ -54,6 +54,10 @@ void P2PNotifier::RemoveObserver(SyncNotifierObserver* observer) { } } +void P2PNotifier::SetUniqueId(const std::string& unique_id) { + DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread()); +} + void P2PNotifier::SetState(const std::string& state) { DCHECK(parent_message_loop_proxy_->BelongsToCurrentThread()); } diff --git a/chrome/browser/sync/notifier/p2p_notifier.h b/chrome/browser/sync/notifier/p2p_notifier.h index aed0db6..0aa415d 100644 --- a/chrome/browser/sync/notifier/p2p_notifier.h +++ b/chrome/browser/sync/notifier/p2p_notifier.h @@ -10,6 +10,7 @@ #include <string> +#include "base/compiler_specific.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" @@ -37,13 +38,15 @@ class P2PNotifier virtual ~P2PNotifier(); // SyncNotifier implementation - virtual void AddObserver(SyncNotifierObserver* observer); - virtual void RemoveObserver(SyncNotifierObserver* observer); - virtual void SetState(const std::string& state); + virtual void AddObserver(SyncNotifierObserver* observer) OVERRIDE; + virtual void RemoveObserver(SyncNotifierObserver* observer) OVERRIDE; + virtual void SetUniqueId(const std::string& unique_id) OVERRIDE; + virtual void SetState(const std::string& state) OVERRIDE; virtual void UpdateCredentials( - const std::string& email, const std::string& token); - virtual void UpdateEnabledTypes(const syncable::ModelTypeSet& types); - virtual void SendNotification(); + const std::string& email, const std::string& token) OVERRIDE; + virtual void UpdateEnabledTypes( + const syncable::ModelTypeSet& types) OVERRIDE; + virtual void SendNotification() OVERRIDE; // TalkMediator::Delegate implementation. virtual void OnNotificationStateChange(bool notifications_enabled); diff --git a/chrome/browser/sync/notifier/sync_notifier.h b/chrome/browser/sync/notifier/sync_notifier.h index da15259..b62542b 100644 --- a/chrome/browser/sync/notifier/sync_notifier.h +++ b/chrome/browser/sync/notifier/sync_notifier.h @@ -24,7 +24,13 @@ class SyncNotifier { virtual void AddObserver(SyncNotifierObserver* observer) = 0; virtual void RemoveObserver(SyncNotifierObserver* observer) = 0; - // SetState must be called once, before any call to UpdateCredentials. + // SetUniqueId must be called once, before any call to + // UpdateCredentials. |unique_id| should be a globally unique + // string. + virtual void SetUniqueId(const std::string& unique_id) = 0; + + // SetState must be called once, before any call to + // UpdateCredentials. virtual void SetState(const std::string& state) = 0; // The observers won't be notified of any notifications until |