diff options
author | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-27 01:35:01 +0000 |
---|---|---|
committer | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-27 01:35:01 +0000 |
commit | 7fa08b2d7b0cd91b98714111ec6105686f29cbdb (patch) | |
tree | d9cf56cf755eda1332fa1e8dedadc90299bc6f33 | |
parent | 29b4cf48b343236c72472116b5cc35e5fc72e251 (diff) | |
download | chromium_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.cc | 8 | ||||
-rw-r--r-- | sync/notifier/invalidation_state_tracker.cc | 13 | ||||
-rw-r--r-- | sync/notifier/invalidation_state_tracker.h | 3 | ||||
-rw-r--r-- | sync/notifier/sync_invalidation_listener.cc | 9 | ||||
-rw-r--r-- | sync/notifier/sync_invalidation_listener.h | 5 | ||||
-rw-r--r-- | sync/notifier/sync_invalidation_listener_unittest.cc | 20 | ||||
-rw-r--r-- | sync/sync.gyp | 3 |
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', |