summaryrefslogtreecommitdiffstats
path: root/sync/notifier
diff options
context:
space:
mode:
Diffstat (limited to 'sync/notifier')
-rw-r--r--sync/notifier/fake_invalidation_state_tracker.cc9
-rw-r--r--sync/notifier/fake_invalidation_state_tracker.h3
-rw-r--r--sync/notifier/invalidation_state_tracker.h6
-rw-r--r--sync/notifier/sync_invalidation_listener.cc10
-rw-r--r--sync/notifier/sync_invalidation_listener_unittest.cc17
5 files changed, 45 insertions, 0 deletions
diff --git a/sync/notifier/fake_invalidation_state_tracker.cc b/sync/notifier/fake_invalidation_state_tracker.cc
index 2af5db5..a228922 100644
--- a/sync/notifier/fake_invalidation_state_tracker.cc
+++ b/sync/notifier/fake_invalidation_state_tracker.cc
@@ -47,6 +47,15 @@ void FakeInvalidationStateTracker::Forget(const ObjectIdSet& ids) {
}
}
+void FakeInvalidationStateTracker::SetInvalidatorClientId(
+ const std::string& client_id) {
+ invalidator_client_id_ = client_id;
+}
+
+std::string FakeInvalidationStateTracker::GetInvalidatorClientId() const {
+ return invalidator_client_id_;
+}
+
void FakeInvalidationStateTracker::SetBootstrapData(
const std::string& data) {
bootstrap_data_ = data;
diff --git a/sync/notifier/fake_invalidation_state_tracker.h b/sync/notifier/fake_invalidation_state_tracker.h
index a3ea0bf..79606ee 100644
--- a/sync/notifier/fake_invalidation_state_tracker.h
+++ b/sync/notifier/fake_invalidation_state_tracker.h
@@ -27,6 +27,8 @@ class FakeInvalidationStateTracker
int64 max_version,
const std::string& payload) OVERRIDE;
virtual void Forget(const ObjectIdSet& ids) OVERRIDE;
+ virtual void SetInvalidatorClientId(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;
virtual void GenerateAckHandles(
@@ -40,6 +42,7 @@ class FakeInvalidationStateTracker
private:
InvalidationStateMap state_map_;
+ std::string invalidator_client_id_;
std::string bootstrap_data_;
};
diff --git a/sync/notifier/invalidation_state_tracker.h b/sync/notifier/invalidation_state_tracker.h
index 957b9c4..58a5bc8 100644
--- a/sync/notifier/invalidation_state_tracker.h
+++ b/sync/notifier/invalidation_state_tracker.h
@@ -62,6 +62,12 @@ class InvalidationStateTracker {
// Removes all state tracked for |ids|.
virtual void Forget(const ObjectIdSet& ids) = 0;
+ // 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;
+ virtual std::string GetInvalidatorClientId() const = 0;
+
// Used by invalidation::InvalidationClient for persistence. |data| is an
// opaque blob that an invalidation client can use after a restart to
// bootstrap itself. |data| is binary data (not valid UTF8, embedded nulls,
diff --git a/sync/notifier/sync_invalidation_listener.cc b/sync/notifier/sync_invalidation_listener.cc
index e84bc38..4e57bb8 100644
--- a/sync/notifier/sync_invalidation_listener.cc
+++ b/sync/notifier/sync_invalidation_listener.cc
@@ -95,6 +95,16 @@ void SyncInvalidationListener::Start(
registration_manager_.reset(
new RegistrationManager(invalidation_client_.get()));
+
+ // TODO(rlarocque): This call exists as part of an effort to move the
+ // invalidator's ID out of sync. It writes the provided (sync-managed) ID to
+ // storage that lives on the UI thread. Once this has been in place for a
+ // milestone or two, we can remove it and start looking for invalidator client
+ // IDs exclusively in the InvalidationStateTracker. See crbug.com/124142.
+ invalidation_state_tracker_.Call(
+ FROM_HERE,
+ &InvalidationStateTracker::SetInvalidatorClientId,
+ client_id);
}
void SyncInvalidationListener::UpdateCredentials(
diff --git a/sync/notifier/sync_invalidation_listener_unittest.cc b/sync/notifier/sync_invalidation_listener_unittest.cc
index 4ab5b99..37016a8 100644
--- a/sync/notifier/sync_invalidation_listener_unittest.cc
+++ b/sync/notifier/sync_invalidation_listener_unittest.cc
@@ -226,6 +226,10 @@ class SyncInvalidationListenerTest : public testing::Test {
return fake_tracker_.GetMaxVersion(id);
}
+ std::string GetInvalidatorClientId() const {
+ return fake_tracker_.GetInvalidatorClientId();
+ }
+
std::string GetBootstrapData() const {
return fake_tracker_.GetBootstrapData();
}
@@ -300,6 +304,11 @@ class SyncInvalidationListenerTest : public testing::Test {
MakeWeakHandle(fake_tracker_.AsWeakPtr()),
&fake_delegate_);
DCHECK(fake_invalidation_client_);
+
+ // TODO(rlarocque): This is necessary for the deferred write of the client
+ // ID to take place. We can remove this statement when we remove the
+ // WriteInvalidatorClientId test. See crbug.com/124142.
+ message_loop_.RunUntilIdle();
}
void StopClient() {
@@ -326,6 +335,14 @@ class SyncInvalidationListenerTest : public testing::Test {
SyncInvalidationListener client_;
};
+// Verify the client ID is written to the state tracker on client start.
+// TODO(rlarocque): Remove this test when migration code is removed.
+// See crbug.com/124142.
+TEST_F(SyncInvalidationListenerTest, WriteInvalidatorClientId) {
+ // The client is started by the harness, so we don't have to do anything here.
+ EXPECT_EQ(kClientId, GetInvalidatorClientId());
+}
+
// Write a new state to the client. It should propagate to the
// tracker.
TEST_F(SyncInvalidationListenerTest, WriteState) {