Index: chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc |
diff --git a/chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc b/chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc |
index 5c29b50a1f90e6bb5a2d17f3d3f8c8b8e5cacfe4..f868f9c680eec40d9ecf9998fc55e09fe9ca0485 100644 |
--- a/chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc |
+++ b/chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc |
@@ -9,7 +9,6 @@ |
#include "chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_delegate.h" |
#include "chrome/browser/invalidation/invalidation_service.h" |
#include "google/cacheinvalidation/types.pb.h" |
-#include "sync/internal_api/public/base/invalidation_test_util.h" |
#include "sync/notifier/object_id_invalidation_map.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -18,7 +17,6 @@ using ::testing::_; |
using ::testing::NotNull; |
using ::testing::SaveArg; |
using ::testing::StrictMock; |
-using syncer::AckHandle; |
namespace extensions { |
@@ -34,8 +32,6 @@ class MockInvalidationService : public invalidation::InvalidationService { |
void(syncer::InvalidationHandler*, const syncer::ObjectIdSet&)); |
MOCK_METHOD1(UnregisterInvalidationHandler, |
void(syncer::InvalidationHandler*)); |
- MOCK_METHOD2(AcknowledgeInvalidation, void(const invalidation::ObjectId&, |
- const syncer::AckHandle&)); |
MOCK_CONST_METHOD0(GetInvalidatorState, syncer::InvalidatorState()); |
MOCK_CONST_METHOD0(GetInvalidatorClientId, std::string()); |
@@ -126,14 +122,6 @@ TEST_F(PushMessagingInvalidationHandlerTest, Dispatch) { |
OnMessage("dddddddddddddddddddddddddddddddd", 0, "payload")); |
EXPECT_CALL(delegate_, |
OnMessage("dddddddddddddddddddddddddddddddd", 3, "")); |
- |
- syncer::ObjectIdSet ids = invalidation_map.GetObjectIds(); |
- for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); |
- ++it) { |
- const syncer::Invalidation& inv = invalidation_map.ForObject(*it).back(); |
- const syncer::AckHandle& ack_handle = inv.ack_handle(); |
- EXPECT_CALL(service_, AcknowledgeInvalidation(*it, ack_handle)); |
- } |
handler_->OnIncomingInvalidation(invalidation_map); |
} |
@@ -170,15 +158,50 @@ TEST_F(PushMessagingInvalidationHandlerTest, DispatchInvalidObjectIds) { |
invalidation::ObjectId( |
ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, |
"U/dddddddddddddddddddddddddddddddd/4"))); |
- // Invalid object IDs should still be acknowledged. |
- syncer::ObjectIdSet ids = invalidation_map.GetObjectIds(); |
- for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); |
- ++it) { |
- const syncer::Invalidation& inv = invalidation_map.ForObject(*it).back(); |
- const syncer::AckHandle& ack_handle = inv.ack_handle(); |
- EXPECT_CALL(service_, AcknowledgeInvalidation(*it, ack_handle)); |
- } |
handler_->OnIncomingInvalidation(invalidation_map); |
} |
+// Test version filtering of incoming invalidations. |
+TEST_F(PushMessagingInvalidationHandlerTest, InvalidationVersionsOutOfOrder) { |
+ const invalidation::ObjectId id0( |
+ ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, |
+ "U/dddddddddddddddddddddddddddddddd/0"); |
+ const invalidation::ObjectId id3( |
+ ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, |
+ "U/dddddddddddddddddddddddddddddddd/3"); |
+ |
+ // The first received invalidation should get through. |
+ syncer::ObjectIdInvalidationMap map1; |
+ map1.Insert(syncer::Invalidation::Init(id0, 5, "5")); |
+ EXPECT_CALL(delegate_, OnMessage("dddddddddddddddddddddddddddddddd", 0, "5")); |
+ handler_->OnIncomingInvalidation(map1); |
+ testing::Mock::VerifyAndClearExpectations(&delegate_); |
+ |
+ // Invalid versions are always allowed through. |
+ syncer::ObjectIdInvalidationMap map2; |
+ map2.Insert(syncer::Invalidation::InitUnknownVersion(id0)); |
+ EXPECT_CALL(delegate_, OnMessage("dddddddddddddddddddddddddddddddd", 0, "")); |
+ handler_->OnIncomingInvalidation(map2); |
+ testing::Mock::VerifyAndClearExpectations(&delegate_); |
+ |
+ // An older version should not make it through. |
+ syncer::ObjectIdInvalidationMap map3; |
+ map3.Insert(syncer::Invalidation::Init(id0, 4, "4")); |
+ handler_->OnIncomingInvalidation(map3); |
+ |
+ // A newer version will make it through. |
+ syncer::ObjectIdInvalidationMap map4; |
+ map4.Insert(syncer::Invalidation::Init(id0, 6, "6")); |
+ EXPECT_CALL(delegate_, OnMessage("dddddddddddddddddddddddddddddddd", 0, "6")); |
+ handler_->OnIncomingInvalidation(map4); |
+ testing::Mock::VerifyAndClearExpectations(&delegate_); |
+ |
+ // An unrelated object should be unaffected by all the above. |
+ syncer::ObjectIdInvalidationMap map5; |
+ map5.Insert(syncer::Invalidation::Init(id3, 1, "1")); |
+ EXPECT_CALL(delegate_, OnMessage("dddddddddddddddddddddddddddddddd", 3, "1")); |
+ handler_->OnIncomingInvalidation(map5); |
+ testing::Mock::VerifyAndClearExpectations(&delegate_); |
+} |
+ |
} // namespace extensions |