Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(457)

Side by Side Diff: chrome/browser/invalidation/invalidation_service_android_unittest.cc

Issue 23643002: Enable invalidations for arbitrary objects on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/invalidation/invalidation_service_android.h" 5 #include "chrome/browser/invalidation/invalidation_service_android.h"
6 6
7 #include <string>
8 #include <vector>
9
10 #include "base/bind.h"
7 #include "chrome/browser/chrome_notification_types.h" 11 #include "chrome/browser/chrome_notification_types.h"
8 #include "chrome/browser/invalidation/invalidation_service_factory.h" 12 #include "chrome/browser/invalidation/invalidation_service_factory.h"
9 #include "chrome/browser/invalidation/invalidation_service_test_template.h" 13 #include "chrome/browser/invalidation/invalidation_service_test_template.h"
10 #include "chrome/test/base/testing_profile.h" 14 #include "chrome/test/base/testing_profile.h"
11 #include "content/public/browser/notification_service.h" 15 #include "content/public/browser/notification_service.h"
16 #include "sync/notifier/fake_invalidation_handler.h"
12 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
13 18
14 namespace invalidation { 19 namespace invalidation {
15 20
16 class InvalidationServiceAndroidTestDelegate { 21 class InvalidationServiceAndroidTestDelegate {
17 public: 22 public:
18 InvalidationServiceAndroidTestDelegate() { } 23 InvalidationServiceAndroidTestDelegate() { }
19 24
20 ~InvalidationServiceAndroidTestDelegate() { 25 ~InvalidationServiceAndroidTestDelegate() {
21 DestroyInvalidationService(); 26 DestroyInvalidationService();
(...skipping 27 matching lines...) Expand all
49 } 54 }
50 55
51 scoped_ptr<TestingProfile> profile_; 56 scoped_ptr<TestingProfile> profile_;
52 scoped_ptr<InvalidationServiceAndroid> invalidation_service_android_; 57 scoped_ptr<InvalidationServiceAndroid> invalidation_service_android_;
53 }; 58 };
54 59
55 INSTANTIATE_TYPED_TEST_CASE_P( 60 INSTANTIATE_TYPED_TEST_CASE_P(
56 AndroidInvalidationServiceTest, InvalidationServiceTest, 61 AndroidInvalidationServiceTest, InvalidationServiceTest,
57 InvalidationServiceAndroidTestDelegate); 62 InvalidationServiceAndroidTestDelegate);
58 63
64 class InvalidationServiceAndroidRegistrationTest : public testing::Test {
65 protected:
66 InvalidationServiceAndroidRegistrationTest()
67 : invalidation_service_(&profile_),
68 object_registration_updated_(false) {
69 invalidation_service_.SetUpdateRegistrationCallbackForTest(base::Bind(
70 &InvalidationServiceAndroidRegistrationTest::UpdateRegistration,
71 base::Unretained(this)));
72 OBJECT_SET_A.insert(invalidation::ObjectId(1, "A"));
73 OBJECT_SET_A.insert(invalidation::ObjectId(2, "B"));
74 OBJECT_SET_A.insert(invalidation::ObjectId(3, "C"));
75 OBJECT_SET_B.insert(invalidation::ObjectId(1, "D"));
76 OBJECT_SET_B.insert(invalidation::ObjectId(2, "E"));
77 OBJECT_SET_C.insert(invalidation::ObjectId(3, "F"));
78 OBJECT_SET_SYNC.insert(
79 invalidation::ObjectId(ipc::invalidation::ObjectSource::CHROME_SYNC,
80 "A"));
81 OBJECT_SET_SYNC.insert(
82 invalidation::ObjectId(ipc::invalidation::ObjectSource::CHROME_SYNC,
83 "B"));
84 OBJECT_SET_MIXED.insert(OBJECT_SET_A.begin(), OBJECT_SET_A.end());
85 OBJECT_SET_MIXED.insert(OBJECT_SET_SYNC.begin(), OBJECT_SET_SYNC.end());
86 }
87
88 virtual ~InvalidationServiceAndroidRegistrationTest() {
89 invalidation_service_.Shutdown();
90 }
91
92 // Determines if the object registration was updated since the last time this
93 // method was called.
94 bool ObjectRegistrationUpdated() {
95 bool updated = object_registration_updated_;
96 object_registration_updated_ = false;
97 return updated;
98 }
99
100 // Determines if all of the object ids in the given set were registered in
101 // the last registration update.
102 bool ObjectsRegistered(const syncer::ObjectIdSet& ids) {
103 return CheckObjectRegistration(ids, true /* expect_registered */);
104 }
105
106 // Determines if none of the object ids in the given set were registered in
107 // the last registration update.
108 bool ObjectsNotRegistered(const syncer::ObjectIdSet& ids) {
109 return CheckObjectRegistration(ids, false /* expect_registered */);
110 }
111
112 // Get the number of objects which are registered.
113 size_t RegisteredObjectCount() {
114 return registered_object_ids_.size();
115 }
116
117 // Determines if the given object id was registered in the last registration
118 // update.
119 bool IsRegistered(const invalidation::ObjectId& id) {
120 return registered_object_ids_.find(id) != registered_object_ids_.end();
121 }
122
123 // Disjoint object id sets containing non-Sync object ids.
124 syncer::ObjectIdSet OBJECT_SET_A;
125 syncer::ObjectIdSet OBJECT_SET_B;
126 syncer::ObjectIdSet OBJECT_SET_C;
127
128 // An object id set containing Sync object ids.
129 syncer::ObjectIdSet OBJECT_SET_SYNC;
130
131 // An object id set comprised of the union of OBJECT_SET_A and
132 // OBJECT_SET_SYNC.
133 syncer::ObjectIdSet OBJECT_SET_MIXED;
134
135 TestingProfile profile_;
136
137 // The invalidation service used for testing.
138 InvalidationServiceAndroid invalidation_service_;
139
140 private:
141 // Determines if all of the object ids in the given set have the same
142 // registration status.
143 bool CheckObjectRegistration(const syncer::ObjectIdSet& ids,
144 bool expect_registered) {
145 syncer::ObjectIdSet::const_iterator id;
146 for (id = ids.begin(); id != ids.end(); ++id)
147 if (IsRegistered(*id) != expect_registered)
148 return false;
149 return true;
150 }
151
152 // Callback invoked when the invalidation service updates the registration.
153 void UpdateRegistration(const std::vector<int>& object_sources,
154 const std::vector<std::string>& object_names) {
155 object_registration_updated_ = true;
156 registered_object_ids_.clear();
157 for (size_t i = 0; i < object_sources.size(); ++i) {
158 registered_object_ids_.insert(invalidation::ObjectId(
159 object_sources[i], object_names[i]));
160 }
161 }
162
163 bool object_registration_updated_;
164 syncer::ObjectIdSet registered_object_ids_;
165 };
166
167 TEST_F(InvalidationServiceAndroidRegistrationTest, NoObjectRegistration) {
168 syncer::FakeInvalidationHandler handler;
169 invalidation_service_.RegisterInvalidationHandler(&handler);
170 EXPECT_EQ(0U, RegisteredObjectCount());
171 invalidation_service_.UnregisterInvalidationHandler(&handler);
172 }
173
174 TEST_F(InvalidationServiceAndroidRegistrationTest, UpdateObjectRegistration) {
175 syncer::FakeInvalidationHandler handler1;
176 syncer::FakeInvalidationHandler handler2;
177 syncer::FakeInvalidationHandler handler3;
178 syncer::FakeInvalidationHandler handler4;
179 invalidation_service_.RegisterInvalidationHandler(&handler1);
180 invalidation_service_.RegisterInvalidationHandler(&handler2);
181 invalidation_service_.RegisterInvalidationHandler(&handler3);
182 invalidation_service_.RegisterInvalidationHandler(&handler4);
183
184 // Register for object set A.
185 invalidation_service_.UpdateRegisteredInvalidationIds(&handler1,
186 OBJECT_SET_A);
187 EXPECT_TRUE(ObjectRegistrationUpdated());
188 EXPECT_EQ(OBJECT_SET_A.size(), RegisteredObjectCount());
189 EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_A));
190
191 // Register for object sets B and C.
192 invalidation_service_.UpdateRegisteredInvalidationIds(&handler2,
193 OBJECT_SET_B);
194 EXPECT_TRUE(ObjectRegistrationUpdated());
195 invalidation_service_.UpdateRegisteredInvalidationIds(&handler3,
196 OBJECT_SET_C);
197 EXPECT_TRUE(ObjectRegistrationUpdated());
198 EXPECT_EQ(OBJECT_SET_A.size() + OBJECT_SET_B.size() + OBJECT_SET_C.size(),
199 RegisteredObjectCount());
200 EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_A));
201 EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_B));
202 EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_C));
203
204 // Register for sync object set. Expect no registration update.
205 invalidation_service_.UpdateRegisteredInvalidationIds(&handler4,
206 OBJECT_SET_SYNC);
207 EXPECT_FALSE(ObjectRegistrationUpdated());
208 EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_SYNC));
209
210 // Unregister for object set C.
211 invalidation_service_.UpdateRegisteredInvalidationIds(&handler3,
212 syncer::ObjectIdSet());
213 EXPECT_TRUE(ObjectRegistrationUpdated());
214 EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_C));
215
216 // Unregister for object set A.
217 invalidation_service_.UpdateRegisteredInvalidationIds(&handler1,
218 syncer::ObjectIdSet());
219 EXPECT_TRUE(ObjectRegistrationUpdated());
220 EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_A));
221
222 // Unregister for sync object set. Expect no registration update.
223 invalidation_service_.UpdateRegisteredInvalidationIds(&handler4,
224 syncer::ObjectIdSet());
225 EXPECT_FALSE(ObjectRegistrationUpdated());
226
227 // Register for mixed object set. Expect only the objects in set A to be
228 // registered.
229 invalidation_service_.UpdateRegisteredInvalidationIds(&handler3,
230 OBJECT_SET_MIXED);
231 EXPECT_TRUE(ObjectRegistrationUpdated());
232 EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_A));
233 EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_SYNC));
234
235 // Unregister the handler mapped to set B. Expect no registration update.
236 invalidation_service_.UnregisterInvalidationHandler(&handler2);
237 EXPECT_FALSE(ObjectRegistrationUpdated());
238 EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_B));
239
240 // Replace object set A with object set C.
241 invalidation_service_.UpdateRegisteredInvalidationIds(&handler3,
242 OBJECT_SET_C);
243 EXPECT_TRUE(ObjectRegistrationUpdated());
244 EXPECT_TRUE(ObjectsNotRegistered(OBJECT_SET_A));
245 EXPECT_TRUE(ObjectsRegistered(OBJECT_SET_C));
246
247 invalidation_service_.UnregisterInvalidationHandler(&handler1);
248 invalidation_service_.UnregisterInvalidationHandler(&handler3);
249 invalidation_service_.UnregisterInvalidationHandler(&handler4);
250 }
251
59 } // namespace invalidation 252 } // namespace invalidation
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698