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/invalidation/invalidation_service.h" | 10 #include "chrome/browser/invalidation/invalidation_service.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 "sync/internal_api/public/base/invalidation_test_util.h" |
| 13 #include "sync/notifier/object_id_invalidation_map.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 | 16 |
16 using ::testing::_; | 17 using ::testing::_; |
17 using ::testing::NotNull; | 18 using ::testing::NotNull; |
18 using ::testing::SaveArg; | 19 using ::testing::SaveArg; |
19 using ::testing::StrictMock; | 20 using ::testing::StrictMock; |
| 21 using syncer::AckHandle; |
20 | 22 |
21 namespace extensions { | 23 namespace extensions { |
22 | 24 |
23 namespace { | 25 namespace { |
24 | 26 |
25 class MockInvalidationService : public invalidation::InvalidationService { | 27 class MockInvalidationService : public invalidation::InvalidationService { |
26 public: | 28 public: |
27 MockInvalidationService(); | 29 MockInvalidationService(); |
28 ~MockInvalidationService(); | 30 ~MockInvalidationService(); |
29 MOCK_METHOD1(RegisterInvalidationHandler, | 31 MOCK_METHOD1(RegisterInvalidationHandler, |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 EXPECT_CALL(service_, | 99 EXPECT_CALL(service_, |
98 UpdateRegisteredInvalidationIds(handler_.get(), expected_ids)); | 100 UpdateRegisteredInvalidationIds(handler_.get(), expected_ids)); |
99 handler_->RegisterExtension("cccccccccccccccccccccccccccccccc"); | 101 handler_->RegisterExtension("cccccccccccccccccccccccccccccccc"); |
100 EXPECT_CALL(service_, | 102 EXPECT_CALL(service_, |
101 UpdateRegisteredInvalidationIds(handler_.get(), | 103 UpdateRegisteredInvalidationIds(handler_.get(), |
102 syncer::ObjectIdSet())); | 104 syncer::ObjectIdSet())); |
103 handler_->UnregisterExtension("cccccccccccccccccccccccccccccccc"); | 105 handler_->UnregisterExtension("cccccccccccccccccccccccccccccccc"); |
104 } | 106 } |
105 | 107 |
106 TEST_F(PushMessagingInvalidationHandlerTest, Dispatch) { | 108 TEST_F(PushMessagingInvalidationHandlerTest, Dispatch) { |
107 syncer::ObjectIdSet ids; | 109 syncer::ObjectIdInvalidationMap invalidation_map; |
108 ids.insert(invalidation::ObjectId( | 110 // A normal invalidation. |
109 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, | 111 invalidation_map.Insert( |
110 "U/dddddddddddddddddddddddddddddddd/0")); | 112 syncer::Invalidation::Init( |
111 ids.insert(invalidation::ObjectId( | 113 invalidation::ObjectId( |
112 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, | 114 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, |
113 "U/dddddddddddddddddddddddddddddddd/3")); | 115 "U/dddddddddddddddddddddddddddddddd/0"), |
| 116 10, |
| 117 "payload")); |
| 118 |
| 119 // An unknown version invalidation. |
| 120 invalidation_map.Insert(syncer::Invalidation::InitUnknownVersion( |
| 121 invalidation::ObjectId( |
| 122 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, |
| 123 "U/dddddddddddddddddddddddddddddddd/3"))); |
| 124 |
114 EXPECT_CALL(delegate_, | 125 EXPECT_CALL(delegate_, |
115 OnMessage("dddddddddddddddddddddddddddddddd", 0, "payload")); | 126 OnMessage("dddddddddddddddddddddddddddddddd", 0, "payload")); |
116 EXPECT_CALL(delegate_, | 127 EXPECT_CALL(delegate_, |
117 OnMessage("dddddddddddddddddddddddddddddddd", 3, "payload")); | 128 OnMessage("dddddddddddddddddddddddddddddddd", 3, "")); |
| 129 |
| 130 syncer::ObjectIdSet ids = invalidation_map.GetObjectIds(); |
118 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); | 131 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); |
119 ++it) { | 132 ++it) { |
120 EXPECT_CALL(service_, AcknowledgeInvalidation( | 133 const syncer::Invalidation& inv = invalidation_map.ForObject(*it).back(); |
121 *it, syncer::AckHandle::InvalidAckHandle())); | 134 const syncer::AckHandle& ack_handle = inv.ack_handle(); |
| 135 EXPECT_CALL(service_, AcknowledgeInvalidation(*it, ack_handle)); |
122 } | 136 } |
123 handler_->OnIncomingInvalidation( | 137 handler_->OnIncomingInvalidation(invalidation_map); |
124 ObjectIdSetToInvalidationMap( | |
125 ids, | |
126 syncer::Invalidation::kUnknownVersion, | |
127 "payload")); | |
128 } | 138 } |
129 | 139 |
130 // Tests that malformed object IDs don't trigger spurious callbacks. | 140 // Tests that malformed object IDs don't trigger spurious callbacks. |
131 TEST_F(PushMessagingInvalidationHandlerTest, DispatchInvalidObjectIds) { | 141 TEST_F(PushMessagingInvalidationHandlerTest, DispatchInvalidObjectIds) { |
132 syncer::ObjectIdSet ids; | 142 syncer::ObjectIdInvalidationMap invalidation_map; |
133 // Completely incorrect format. | 143 // Completely incorrect format. |
134 ids.insert(invalidation::ObjectId( | 144 invalidation_map.Insert(syncer::Invalidation::InitUnknownVersion( |
135 ipc::invalidation::ObjectSource::TEST, | 145 invalidation::ObjectId( |
136 "Invalid")); | 146 ipc::invalidation::ObjectSource::TEST, |
| 147 "Invalid"))); |
137 // Incorrect source. | 148 // Incorrect source. |
138 ids.insert(invalidation::ObjectId( | 149 invalidation_map.Insert(syncer::Invalidation::InitUnknownVersion( |
139 ipc::invalidation::ObjectSource::TEST, | 150 invalidation::ObjectId( |
140 "U/dddddddddddddddddddddddddddddddd/3")); | 151 ipc::invalidation::ObjectSource::TEST, |
| 152 "U/dddddddddddddddddddddddddddddddd/3"))); |
141 // Incorrect format type. | 153 // Incorrect format type. |
142 ids.insert(invalidation::ObjectId( | 154 invalidation_map.Insert(syncer::Invalidation::InitUnknownVersion( |
143 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, | 155 invalidation::ObjectId( |
144 "V/dddddddddddddddddddddddddddddddd/3")); | 156 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, |
| 157 "V/dddddddddddddddddddddddddddddddd/3"))); |
145 // Invalid extension ID length. | 158 // Invalid extension ID length. |
146 ids.insert(invalidation::ObjectId( | 159 invalidation_map.Insert(syncer::Invalidation::InitUnknownVersion( |
147 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, | 160 invalidation::ObjectId( |
148 "U/ddddddddddddddddddddddddddddddddd/3")); | 161 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, |
| 162 "U/ddddddddddddddddddddddddddddddddd/3"))); |
149 // Non-numeric subchannel. | 163 // Non-numeric subchannel. |
150 ids.insert(invalidation::ObjectId( | 164 invalidation_map.Insert(syncer::Invalidation::InitUnknownVersion( |
151 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, | 165 invalidation::ObjectId( |
152 "U/dddddddddddddddddddddddddddddddd/z")); | 166 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, |
| 167 "U/dddddddddddddddddddddddddddddddd/z"))); |
153 // Subchannel out of range. | 168 // Subchannel out of range. |
154 ids.insert(invalidation::ObjectId( | 169 invalidation_map.Insert(syncer::Invalidation::InitUnknownVersion( |
155 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, | 170 invalidation::ObjectId( |
156 "U/dddddddddddddddddddddddddddddddd/4")); | 171 ipc::invalidation::ObjectSource::CHROME_PUSH_MESSAGING, |
| 172 "U/dddddddddddddddddddddddddddddddd/4"))); |
157 // Invalid object IDs should still be acknowledged. | 173 // Invalid object IDs should still be acknowledged. |
| 174 syncer::ObjectIdSet ids = invalidation_map.GetObjectIds(); |
158 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); | 175 for (syncer::ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); |
159 ++it) { | 176 ++it) { |
160 EXPECT_CALL(service_, AcknowledgeInvalidation( | 177 const syncer::Invalidation& inv = invalidation_map.ForObject(*it).back(); |
161 *it, syncer::AckHandle::InvalidAckHandle())); | 178 const syncer::AckHandle& ack_handle = inv.ack_handle(); |
| 179 EXPECT_CALL(service_, AcknowledgeInvalidation(*it, ack_handle)); |
162 } | 180 } |
163 handler_->OnIncomingInvalidation( | 181 handler_->OnIncomingInvalidation(invalidation_map); |
164 ObjectIdSetToInvalidationMap( | |
165 ids, | |
166 syncer::Invalidation::kUnknownVersion, | |
167 "payload")); | |
168 } | 182 } |
169 | 183 |
170 } // namespace extensions | 184 } // namespace extensions |
OLD | NEW |