summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-29 03:29:18 +0000
committerakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-29 03:29:18 +0000
commit0a561205646f2e75f860b9662d249a0924f3bad6 (patch)
treec4004601868f444c7bc6453c21867c4aa308224d /chrome
parent7bd80241b862451b05566797f4ef6debf98f5c45 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/sync/engine/syncapi.cc16
-rw-r--r--chrome/browser/sync/engine/syncapi_unittest.cc2
-rw-r--r--chrome/browser/sync/notifier/invalidation_notifier.cc5
-rw-r--r--chrome/browser/sync/notifier/invalidation_notifier.h4
-rw-r--r--chrome/browser/sync/notifier/non_blocking_invalidation_notifier.cc35
-rw-r--r--chrome/browser/sync/notifier/non_blocking_invalidation_notifier.h15
-rw-r--r--chrome/browser/sync/notifier/p2p_notifier.cc4
-rw-r--r--chrome/browser/sync/notifier/p2p_notifier.h15
-rw-r--r--chrome/browser/sync/notifier/sync_notifier.h8
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