summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-27 01:35:01 +0000
committerdcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-27 01:35:01 +0000
commit7fa08b2d7b0cd91b98714111ec6105686f29cbdb (patch)
treed9cf56cf755eda1332fa1e8dedadc90299bc6f33
parent29b4cf48b343236c72472116b5cc35e5fc72e251 (diff)
downloadchromium_src-7fa08b2d7b0cd91b98714111ec6105686f29cbdb.zip
chromium_src-7fa08b2d7b0cd91b98714111ec6105686f29cbdb.tar.gz
chromium_src-7fa08b2d7b0cd91b98714111ec6105686f29cbdb.tar.bz2
Merge 169113 - Remove unregistered IDs from the invalidation state map cache.
BUG=161754 Review URL: https://chromiumcodereview.appspot.com/11316079 TBR=dcheng@chromium.org Review URL: https://codereview.chromium.org/11413175 git-svn-id: svn://svn.chromium.org/chrome/branches/1312/src@169552 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/sync/invalidations/invalidator_storage_unittest.cc8
-rw-r--r--sync/notifier/invalidation_state_tracker.cc13
-rw-r--r--sync/notifier/invalidation_state_tracker.h3
-rw-r--r--sync/notifier/sync_invalidation_listener.cc9
-rw-r--r--sync/notifier/sync_invalidation_listener.h5
-rw-r--r--sync/notifier/sync_invalidation_listener_unittest.cc20
-rw-r--r--sync/sync.gyp3
7 files changed, 50 insertions, 11 deletions
diff --git a/chrome/browser/sync/invalidations/invalidator_storage_unittest.cc b/chrome/browser/sync/invalidations/invalidator_storage_unittest.cc
index 9e6e4e3..850c574 100644
--- a/chrome/browser/sync/invalidations/invalidator_storage_unittest.cc
+++ b/chrome/browser/sync/invalidations/invalidator_storage_unittest.cc
@@ -15,14 +15,6 @@
using syncer::InvalidationStateMap;
-namespace syncer {
-
-bool operator==(const InvalidationState& lhs, const InvalidationState& rhs) {
- return lhs.version == rhs.version;
-}
-
-} // namespace syncer
-
namespace browser_sync {
namespace {
diff --git a/sync/notifier/invalidation_state_tracker.cc b/sync/notifier/invalidation_state_tracker.cc
new file mode 100644
index 0000000..9d21807
--- /dev/null
+++ b/sync/notifier/invalidation_state_tracker.cc
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "sync/notifier/invalidation_state_tracker.h"
+
+namespace syncer {
+
+bool operator==(const InvalidationState& lhs, const InvalidationState& rhs) {
+ return lhs.version == rhs.version;
+}
+
+} // namespace syncer
diff --git a/sync/notifier/invalidation_state_tracker.h b/sync/notifier/invalidation_state_tracker.h
index c547cf6..259ac83 100644
--- a/sync/notifier/invalidation_state_tracker.h
+++ b/sync/notifier/invalidation_state_tracker.h
@@ -20,6 +20,9 @@ struct InvalidationState {
int64 version;
};
+// TODO(dcheng): Remove this in favor of adding an Equals() method.
+bool operator==(const InvalidationState& lhs, const InvalidationState& rhs);
+
typedef std::map<invalidation::ObjectId, InvalidationState, ObjectIdLessThan>
InvalidationStateMap;
diff --git a/sync/notifier/sync_invalidation_listener.cc b/sync/notifier/sync_invalidation_listener.cc
index c947859..1b23501 100644
--- a/sync/notifier/sync_invalidation_listener.cc
+++ b/sync/notifier/sync_invalidation_listener.cc
@@ -289,6 +289,10 @@ void SyncInvalidationListener::DoRegistrationUpdate() {
DCHECK(CalledOnValidThread());
const ObjectIdSet& unregistered_ids =
registration_manager_->UpdateRegisteredIds(registered_ids_);
+ for (ObjectIdSet::const_iterator it = unregistered_ids.begin();
+ it != unregistered_ids.end(); ++it) {
+ invalidation_state_map_.erase(*it);
+ }
invalidation_state_tracker_.Call(
FROM_HERE, &InvalidationStateTracker::Forget, unregistered_ids);
}
@@ -298,6 +302,11 @@ void SyncInvalidationListener::StopForTest() {
Stop();
}
+InvalidationStateMap SyncInvalidationListener::GetStateMapForTest() const {
+ DCHECK(CalledOnValidThread());
+ return invalidation_state_map_;
+}
+
void SyncInvalidationListener::Stop() {
DCHECK(CalledOnValidThread());
if (!invalidation_client_.get()) {
diff --git a/sync/notifier/sync_invalidation_listener.h b/sync/notifier/sync_invalidation_listener.h
index a167119..a3249ee 100644
--- a/sync/notifier/sync_invalidation_listener.h
+++ b/sync/notifier/sync_invalidation_listener.h
@@ -126,10 +126,11 @@ class SyncInvalidationListener
virtual void OnIncomingNotification(
const notifier::Notification& notification) OVERRIDE;
- void StopForTest();
-
void DoRegistrationUpdate();
+ void StopForTest();
+ InvalidationStateMap GetStateMapForTest() const;
+
private:
void Stop();
diff --git a/sync/notifier/sync_invalidation_listener_unittest.cc b/sync/notifier/sync_invalidation_listener_unittest.cc
index 2de36c8..4942cd3 100644
--- a/sync/notifier/sync_invalidation_listener_unittest.cc
+++ b/sync/notifier/sync_invalidation_listener_unittest.cc
@@ -640,6 +640,26 @@ TEST_F(SyncInvalidationListenerTest, RegisterTypesPreserved) {
EXPECT_EQ(registered_ids_, GetRegisteredIds());
}
+// Make sure that state is correctly purged from the local invalidation state
+// map cache when an ID is unregistered.
+TEST_F(SyncInvalidationListenerTest, UnregisterCleansUpStateMapCache) {
+ client_.Ready(fake_invalidation_client_);
+
+ InvalidationStateMap state_map;
+ state_map[kBookmarksId_].version = 1;
+ FireInvalidate(kBookmarksId_, 1, "hello");
+ EXPECT_EQ(state_map, client_.GetStateMapForTest());
+ state_map[kPreferencesId_].version = 2;
+ FireInvalidate(kPreferencesId_, 2, "world");
+ EXPECT_EQ(state_map, client_.GetStateMapForTest());
+
+ ObjectIdSet ids;
+ ids.insert(kBookmarksId_);
+ client_.UpdateRegisteredIds(ids);
+ state_map.erase(kPreferencesId_);
+ EXPECT_EQ(state_map, client_.GetStateMapForTest());
+}
+
// Without readying the client, disable notifications, then enable
// them. The listener should still think notifications are disabled.
TEST_F(SyncInvalidationListenerTest, EnableNotificationsNotReady) {
diff --git a/sync/sync.gyp b/sync/sync.gyp
index be35db2..565e5df 100644
--- a/sync/sync.gyp
+++ b/sync/sync.gyp
@@ -260,6 +260,8 @@
],
'sources': [
'notifier/invalidation_handler.h',
+ 'notifier/invalidation_state_tracker.cc',
+ 'notifier/invalidation_state_tracker.h',
'notifier/invalidation_util.cc',
'notifier/invalidation_util.h',
'notifier/invalidator_factory.cc',
@@ -277,7 +279,6 @@
'sources': [
'notifier/invalidation_notifier.cc',
'notifier/invalidation_notifier.h',
- 'notifier/invalidation_state_tracker.h',
'notifier/non_blocking_invalidator.cc',
'notifier/non_blocking_invalidator.h',
'notifier/p2p_invalidator.cc',