OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/api/push_messaging/push_messaging_invalidati
on_handler.h" | 5 #include "chrome/browser/extensions/api/push_messaging/push_messaging_invalidati
on_handler.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "chrome/browser/extensions/api/push_messaging/push_messaging_invalidati
on_handler_delegate.h" | 9 #include "chrome/browser/extensions/api/push_messaging/push_messaging_invalidati
on_handler_delegate.h" |
10 #include "chrome/browser/sync/invalidation_frontend.h" | 10 #include "chrome/browser/sync/invalidation_frontend.h" |
11 #include "google/cacheinvalidation/types.pb.h" | 11 #include "google/cacheinvalidation/types.pb.h" |
| 12 #include "sync/internal_api/public/base/invalidation_test_util.h" |
12 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
14 | 15 |
15 using ::testing::_; | 16 using ::testing::_; |
16 using ::testing::InSequence; | 17 using ::testing::InSequence; |
17 using ::testing::NotNull; | 18 using ::testing::NotNull; |
18 using ::testing::SaveArg; | 19 using ::testing::SaveArg; |
19 using ::testing::StrictMock; | 20 using ::testing::StrictMock; |
20 | 21 |
21 namespace extensions { | 22 namespace extensions { |
22 | 23 |
23 namespace { | 24 namespace { |
24 | 25 |
25 // TODO(dcheng): Hardcoded for now. Once the svn export is finished, use | 26 // TODO(dcheng): Hardcoded for now. Once the svn export is finished, use |
26 // ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING. | 27 // ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING. |
27 const int kSourceId = 1030; | 28 const int kSourceId = 1030; |
28 | 29 |
29 class MockInvalidationFrontend : public InvalidationFrontend { | 30 class MockInvalidationFrontend : public InvalidationFrontend { |
30 public: | 31 public: |
31 MockInvalidationFrontend(); | 32 MockInvalidationFrontend(); |
32 ~MockInvalidationFrontend(); | 33 ~MockInvalidationFrontend(); |
33 MOCK_METHOD1(RegisterInvalidationHandler, | 34 MOCK_METHOD1(RegisterInvalidationHandler, |
34 void(syncer::InvalidationHandler*)); | 35 void(syncer::InvalidationHandler*)); |
35 MOCK_METHOD2(UpdateRegisteredInvalidationIds, | 36 MOCK_METHOD2(UpdateRegisteredInvalidationIds, |
36 void(syncer::InvalidationHandler*, const syncer::ObjectIdSet&)); | 37 void(syncer::InvalidationHandler*, const syncer::ObjectIdSet&)); |
37 MOCK_METHOD1(UnregisterInvalidationHandler, | 38 MOCK_METHOD1(UnregisterInvalidationHandler, |
38 void(syncer::InvalidationHandler*)); | 39 void(syncer::InvalidationHandler*)); |
| 40 MOCK_METHOD2(AcknowledgeInvalidation, void(const invalidation::ObjectId&, |
| 41 const syncer::AckHandle&)); |
39 MOCK_CONST_METHOD0(GetInvalidatorState, syncer::InvalidatorState()); | 42 MOCK_CONST_METHOD0(GetInvalidatorState, syncer::InvalidatorState()); |
40 | 43 |
41 private: | 44 private: |
42 DISALLOW_COPY_AND_ASSIGN(MockInvalidationFrontend); | 45 DISALLOW_COPY_AND_ASSIGN(MockInvalidationFrontend); |
43 }; | 46 }; |
44 | 47 |
45 MockInvalidationFrontend::MockInvalidationFrontend() {} | 48 MockInvalidationFrontend::MockInvalidationFrontend() {} |
46 MockInvalidationFrontend::~MockInvalidationFrontend() {} | 49 MockInvalidationFrontend::~MockInvalidationFrontend() {} |
47 | 50 |
48 class MockInvalidationHandlerDelegate | 51 class MockInvalidationHandlerDelegate |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 ids.insert(invalidation::ObjectId( | 160 ids.insert(invalidation::ObjectId( |
158 kSourceId, | 161 kSourceId, |
159 "U/dddddddddddddddddddddddddddddddd/0")); | 162 "U/dddddddddddddddddddddddddddddddd/0")); |
160 ids.insert(invalidation::ObjectId( | 163 ids.insert(invalidation::ObjectId( |
161 kSourceId, | 164 kSourceId, |
162 "U/dddddddddddddddddddddddddddddddd/3")); | 165 "U/dddddddddddddddddddddddddddddddd/3")); |
163 EXPECT_CALL(delegate_, | 166 EXPECT_CALL(delegate_, |
164 OnMessage("dddddddddddddddddddddddddddddddd", 0, "payload")); | 167 OnMessage("dddddddddddddddddddddddddddddddd", 0, "payload")); |
165 EXPECT_CALL(delegate_, | 168 EXPECT_CALL(delegate_, |
166 OnMessage("dddddddddddddddddddddddddddddddd", 3, "payload")); | 169 OnMessage("dddddddddddddddddddddddddddddddd", 3, "payload")); |
| 170 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); |
| 171 ++it) { |
| 172 EXPECT_CALL(service_, AcknowledgeInvalidation( |
| 173 *it, syncer::AckHandle::InvalidAckHandle())); |
| 174 } |
167 handler_->OnIncomingInvalidation(ObjectIdSetToInvalidationMap(ids, "payload"), | 175 handler_->OnIncomingInvalidation(ObjectIdSetToInvalidationMap(ids, "payload"), |
168 syncer::REMOTE_INVALIDATION); | 176 syncer::REMOTE_INVALIDATION); |
169 } | 177 } |
170 | 178 |
171 // Tests that malformed object IDs don't trigger spurious callbacks. | 179 // Tests that malformed object IDs don't trigger spurious callbacks. |
172 TEST_F(PushMessagingInvalidationHandlerTest, DispatchInvalidObjectIds) { | 180 TEST_F(PushMessagingInvalidationHandlerTest, DispatchInvalidObjectIds) { |
173 syncer::ObjectIdSet ids; | 181 syncer::ObjectIdSet ids; |
174 // Completely incorrect format. | 182 // Completely incorrect format. |
175 ids.insert(invalidation::ObjectId( | 183 ids.insert(invalidation::ObjectId( |
176 ipc::invalidation::ObjectSource::TEST, | 184 ipc::invalidation::ObjectSource::TEST, |
(...skipping 11 matching lines...) Expand all Loading... |
188 kSourceId, | 196 kSourceId, |
189 "U/ddddddddddddddddddddddddddddddddd/3")); | 197 "U/ddddddddddddddddddddddddddddddddd/3")); |
190 // Non-numeric subchannel. | 198 // Non-numeric subchannel. |
191 ids.insert(invalidation::ObjectId( | 199 ids.insert(invalidation::ObjectId( |
192 kSourceId, | 200 kSourceId, |
193 "U/dddddddddddddddddddddddddddddddd/z")); | 201 "U/dddddddddddddddddddddddddddddddd/z")); |
194 // Subchannel out of range. | 202 // Subchannel out of range. |
195 ids.insert(invalidation::ObjectId( | 203 ids.insert(invalidation::ObjectId( |
196 kSourceId, | 204 kSourceId, |
197 "U/dddddddddddddddddddddddddddddddd/4")); | 205 "U/dddddddddddddddddddddddddddddddd/4")); |
| 206 // Invalid object IDs should still be acknowledged though. |
| 207 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); |
| 208 ++it) { |
| 209 EXPECT_CALL(service_, AcknowledgeInvalidation( |
| 210 *it, syncer::AckHandle::InvalidAckHandle())); |
| 211 } |
198 handler_->OnIncomingInvalidation(ObjectIdSetToInvalidationMap(ids, "payload"), | 212 handler_->OnIncomingInvalidation(ObjectIdSetToInvalidationMap(ids, "payload"), |
199 syncer::REMOTE_INVALIDATION); | 213 syncer::REMOTE_INVALIDATION); |
200 } | 214 } |
201 | 215 |
202 } // namespace extensions | 216 } // namespace extensions |
OLD | NEW |