OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/callback.h" | 5 #include "base/callback.h" |
6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
7 #include "content/browser/geofencing/geofencing_manager.h" | 7 #include "content/browser/geofencing/geofencing_manager.h" |
8 #include "content/browser/geofencing/geofencing_service.h" | 8 #include "content/browser/geofencing/geofencing_service.h" |
| 9 #include "content/browser/service_worker/embedded_worker_test_helper.h" |
9 #include "content/browser/service_worker/service_worker_context_wrapper.h" | 10 #include "content/browser/service_worker/service_worker_context_wrapper.h" |
10 #include "content/public/test/test_browser_thread_bundle.h" | 11 #include "content/public/test/test_browser_thread_bundle.h" |
11 #include "content/public/test/test_utils.h" | 12 #include "content/public/test/test_utils.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 #include "third_party/WebKit/public/platform/WebCircularGeofencingRegion.h" | 15 #include "third_party/WebKit/public/platform/WebCircularGeofencingRegion.h" |
15 | 16 |
16 using blink::WebCircularGeofencingRegion; | 17 using blink::WebCircularGeofencingRegion; |
17 typedef std::map<std::string, WebCircularGeofencingRegion> RegionMap; | 18 typedef std::map<std::string, WebCircularGeofencingRegion> RegionMap; |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
| 22 static const int kRenderProcessId = 99; |
21 static const char* kTestRegionId = "region-id"; | 23 static const char* kTestRegionId = "region-id"; |
22 static const int64 kTestServiceWorkerRegistrationId = 123; | |
23 static const int64 kTestServiceWorkerRegistrationId2 = 456; | |
24 static const int64 kTestGeofencingRegistrationId = 42; | 24 static const int64 kTestGeofencingRegistrationId = 42; |
25 static const int64 kTestGeofencingRegistrationId2 = 43; | 25 static const int64 kTestGeofencingRegistrationId2 = 43; |
26 | 26 |
27 bool RegionsMatch(const WebCircularGeofencingRegion& expected, | 27 bool RegionsMatch(const WebCircularGeofencingRegion& expected, |
28 const WebCircularGeofencingRegion& arg) { | 28 const WebCircularGeofencingRegion& arg) { |
29 return testing::Matches(expected.latitude)(arg.latitude) && | 29 return testing::Matches(expected.latitude)(arg.latitude) && |
30 testing::Matches(expected.longitude)(arg.longitude) && | 30 testing::Matches(expected.longitude)(arg.longitude) && |
31 testing::Matches(expected.radius)(arg.radius); | 31 testing::Matches(expected.radius)(arg.radius); |
32 } | 32 } |
33 } | 33 } |
34 | 34 |
35 namespace content { | 35 namespace content { |
36 | 36 |
37 class TestGeofencingService : public GeofencingService { | 37 class TestGeofencingService : public GeofencingService { |
38 public: | 38 public: |
39 MOCK_METHOD0(IsServiceAvailable, bool()); | 39 TestGeofencingService() : is_available_(false) {} |
| 40 |
| 41 bool IsServiceAvailable() override { return is_available_; } |
| 42 |
| 43 void SetIsServiceAvailable(bool is_available) { |
| 44 is_available_ = is_available; |
| 45 } |
| 46 |
40 MOCK_METHOD2(RegisterRegion, | 47 MOCK_METHOD2(RegisterRegion, |
41 int64(const WebCircularGeofencingRegion& region, | 48 int64(const WebCircularGeofencingRegion& region, |
42 GeofencingRegistrationDelegate* delegate)); | 49 GeofencingRegistrationDelegate* delegate)); |
43 MOCK_METHOD1(UnregisterRegion, void(int64 geofencing_registration_id)); | 50 MOCK_METHOD1(UnregisterRegion, void(int64 geofencing_registration_id)); |
| 51 |
| 52 private: |
| 53 bool is_available_; |
44 }; | 54 }; |
45 | 55 |
46 ACTION_P(SaveDelegate, delegate) { | 56 ACTION_P(SaveDelegate, delegate) { |
47 *delegate = arg1; | 57 *delegate = arg1; |
48 } | 58 } |
49 | 59 |
50 ACTION_P(QuitRunner, runner) { | 60 ACTION_P(QuitRunner, runner) { |
51 runner->Quit(); | 61 runner->Quit(); |
52 } | 62 } |
53 | 63 |
(...skipping 17 matching lines...) Expand all Loading... |
71 CHECK(was_called_); | 81 CHECK(was_called_); |
72 return result_; | 82 return result_; |
73 } | 83 } |
74 | 84 |
75 private: | 85 private: |
76 bool was_called_; | 86 bool was_called_; |
77 GeofencingStatus result_; | 87 GeofencingStatus result_; |
78 scoped_refptr<MessageLoopRunner> runner_; | 88 scoped_refptr<MessageLoopRunner> runner_; |
79 }; | 89 }; |
80 | 90 |
| 91 void SaveResponseCallback(bool* called, |
| 92 int64* store_registration_id, |
| 93 ServiceWorkerStatusCode status, |
| 94 int64 registration_id) { |
| 95 EXPECT_EQ(SERVICE_WORKER_OK, status) << ServiceWorkerStatusToString(status); |
| 96 *called = true; |
| 97 *store_registration_id = registration_id; |
| 98 } |
| 99 |
| 100 ServiceWorkerContextCore::RegistrationCallback MakeRegisteredCallback( |
| 101 bool* called, |
| 102 int64* store_registration_id) { |
| 103 return base::Bind(&SaveResponseCallback, called, store_registration_id); |
| 104 } |
| 105 |
| 106 void CallCompletedCallback(bool* called, ServiceWorkerStatusCode) { |
| 107 *called = true; |
| 108 } |
| 109 |
| 110 ServiceWorkerContextCore::UnregistrationCallback MakeUnregisteredCallback( |
| 111 bool* called) { |
| 112 return base::Bind(&CallCompletedCallback, called); |
| 113 } |
| 114 |
81 class GeofencingManagerTest : public testing::Test { | 115 class GeofencingManagerTest : public testing::Test { |
82 public: | 116 public: |
83 GeofencingManagerTest() : service_(nullptr) { | 117 GeofencingManagerTest() : service_(nullptr) { |
84 test_region_.latitude = 37.421999; | 118 test_region_.latitude = 37.421999; |
85 test_region_.longitude = -122.084015; | 119 test_region_.longitude = -122.084015; |
86 test_region_.radius = 100; | 120 test_region_.radius = 100; |
87 expected_regions_[kTestRegionId] = test_region_; | 121 expected_regions_[kTestRegionId] = test_region_; |
88 } | 122 } |
89 | 123 |
90 void SetUp() override { | 124 void SetUp() override { |
| 125 helper_.reset(new EmbeddedWorkerTestHelper(kRenderProcessId)); |
91 service_ = new TestGeofencingService(); | 126 service_ = new TestGeofencingService(); |
92 ON_CALL(*service_, IsServiceAvailable()) | 127 manager_ = new GeofencingManager(helper_->context_wrapper()); |
93 .WillByDefault(testing::Return(false)); | |
94 manager_ = new GeofencingManager(nullptr /* ServiceWorkerContextWrapper */); | |
95 manager_->SetServiceForTesting(service_); | 128 manager_->SetServiceForTesting(service_); |
| 129 manager_->Init(); |
| 130 |
| 131 worker1_ = RegisterServiceWorker("1"); |
| 132 worker2_ = RegisterServiceWorker("2"); |
96 } | 133 } |
97 | 134 |
98 void TearDown() override { | 135 void TearDown() override { |
| 136 worker1_ = nullptr; |
| 137 worker2_ = nullptr; |
99 manager_ = nullptr; | 138 manager_ = nullptr; |
100 delete service_; | 139 delete service_; |
101 service_ = nullptr; | 140 service_ = nullptr; |
| 141 helper_.reset(); |
102 } | 142 } |
103 | 143 |
104 void SetHasProviderForTests() { | 144 void SetHasProviderForTests() { service_->SetIsServiceAvailable(true); } |
105 ON_CALL(*service_, IsServiceAvailable()) | 145 |
106 .WillByDefault(testing::Return(true)); | 146 scoped_refptr<ServiceWorkerRegistration> RegisterServiceWorker( |
| 147 const std::string& name) { |
| 148 GURL pattern("http://www.example.com/" + name); |
| 149 GURL script_url("http://www.example.com/service_worker.js"); |
| 150 int64 registration_id = kInvalidServiceWorkerRegistrationId; |
| 151 bool called = false; |
| 152 helper_->context()->RegisterServiceWorker( |
| 153 pattern, script_url, nullptr, |
| 154 MakeRegisteredCallback(&called, ®istration_id)); |
| 155 |
| 156 EXPECT_FALSE(called); |
| 157 base::RunLoop().RunUntilIdle(); |
| 158 EXPECT_TRUE(called); |
| 159 |
| 160 return make_scoped_refptr(new ServiceWorkerRegistration( |
| 161 pattern, registration_id, helper_->context()->AsWeakPtr())); |
| 162 } |
| 163 |
| 164 void UnregisterServiceWorker( |
| 165 const scoped_refptr<ServiceWorkerRegistration>& registration) { |
| 166 bool called = false; |
| 167 helper_->context()->UnregisterServiceWorker( |
| 168 registration->pattern(), MakeUnregisteredCallback(&called)); |
| 169 |
| 170 EXPECT_FALSE(called); |
| 171 base::RunLoop().RunUntilIdle(); |
| 172 EXPECT_TRUE(called); |
107 } | 173 } |
108 | 174 |
109 GeofencingStatus RegisterRegionSync( | 175 GeofencingStatus RegisterRegionSync( |
110 int64 service_worker_registration_id, | 176 int64 service_worker_registration_id, |
111 const std::string& id, | 177 const std::string& id, |
112 const WebCircularGeofencingRegion& region) { | 178 const WebCircularGeofencingRegion& region) { |
113 StatusCatcher result; | 179 StatusCatcher result; |
114 manager_->RegisterRegion( | 180 manager_->RegisterRegion( |
115 service_worker_registration_id, | 181 service_worker_registration_id, |
116 id, | 182 id, |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 for (RegionMap::const_iterator it = expected_regions.begin(); | 233 for (RegionMap::const_iterator it = expected_regions.begin(); |
168 it != expected_regions.end(); | 234 it != expected_regions.end(); |
169 ++it) { | 235 ++it) { |
170 EXPECT_THAT(regions[it->first], | 236 EXPECT_THAT(regions[it->first], |
171 WebCircularGeofencingRegionEq(it->second)); | 237 WebCircularGeofencingRegionEq(it->second)); |
172 } | 238 } |
173 } | 239 } |
174 | 240 |
175 protected: | 241 protected: |
176 TestBrowserThreadBundle threads_; | 242 TestBrowserThreadBundle threads_; |
| 243 scoped_ptr<EmbeddedWorkerTestHelper> helper_; |
177 TestGeofencingService* service_; | 244 TestGeofencingService* service_; |
178 scoped_refptr<GeofencingManager> manager_; | 245 scoped_refptr<GeofencingManager> manager_; |
179 | 246 |
180 WebCircularGeofencingRegion test_region_; | 247 WebCircularGeofencingRegion test_region_; |
181 RegionMap expected_regions_; | 248 RegionMap expected_regions_; |
| 249 |
| 250 scoped_refptr<ServiceWorkerRegistration> worker1_; |
| 251 scoped_refptr<ServiceWorkerRegistration> worker2_; |
182 }; | 252 }; |
183 | 253 |
184 TEST_F(GeofencingManagerTest, RegisterRegion_NoService) { | 254 TEST_F(GeofencingManagerTest, RegisterRegion_NoService) { |
185 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, | 255 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, |
186 RegisterRegionSync( | 256 RegisterRegionSync(worker1_->id(), kTestRegionId, test_region_)); |
187 kTestServiceWorkerRegistrationId, kTestRegionId, test_region_)); | |
188 } | 257 } |
189 | 258 |
190 TEST_F(GeofencingManagerTest, UnregisterRegion_NoService) { | 259 TEST_F(GeofencingManagerTest, UnregisterRegion_NoService) { |
191 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, | 260 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, |
192 UnregisterRegionSync( | 261 UnregisterRegionSync(worker1_->id(), kTestRegionId, false)); |
193 kTestServiceWorkerRegistrationId, kTestRegionId, false)); | |
194 } | 262 } |
195 | 263 |
196 TEST_F(GeofencingManagerTest, GetRegisteredRegions_NoService) { | 264 TEST_F(GeofencingManagerTest, GetRegisteredRegions_NoService) { |
197 RegionMap regions; | 265 RegionMap regions; |
198 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, | 266 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, |
199 manager_->GetRegisteredRegions(kTestServiceWorkerRegistrationId, | 267 manager_->GetRegisteredRegions(worker1_->id(), ®ions)); |
200 ®ions)); | |
201 EXPECT_TRUE(regions.empty()); | 268 EXPECT_TRUE(regions.empty()); |
202 } | 269 } |
203 | 270 |
204 TEST_F(GeofencingManagerTest, RegisterRegion_FailsInService) { | 271 TEST_F(GeofencingManagerTest, RegisterRegion_FailsInService) { |
205 SetHasProviderForTests(); | 272 SetHasProviderForTests(); |
206 EXPECT_EQ( | 273 EXPECT_EQ(GEOFENCING_STATUS_ERROR, |
207 GEOFENCING_STATUS_ERROR, | 274 RegisterRegionSyncWithServiceResult(worker1_->id(), kTestRegionId, |
208 RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId, | 275 test_region_, |
209 kTestRegionId, | 276 GEOFENCING_STATUS_ERROR, -1)); |
210 test_region_, | |
211 GEOFENCING_STATUS_ERROR, | |
212 -1)); | |
213 } | 277 } |
214 | 278 |
215 TEST_F(GeofencingManagerTest, RegisterRegion_SucceedsInService) { | 279 TEST_F(GeofencingManagerTest, RegisterRegion_SucceedsInService) { |
216 SetHasProviderForTests(); | 280 SetHasProviderForTests(); |
217 EXPECT_EQ( | 281 EXPECT_EQ(GEOFENCING_STATUS_OK, |
218 GEOFENCING_STATUS_OK, | 282 RegisterRegionSyncWithServiceResult( |
219 RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId, | 283 worker1_->id(), kTestRegionId, test_region_, |
220 kTestRegionId, | 284 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId)); |
221 test_region_, | 285 VerifyRegions(worker1_->id(), expected_regions_); |
222 GEOFENCING_STATUS_OK, | |
223 kTestGeofencingRegistrationId)); | |
224 VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_); | |
225 } | 286 } |
226 | 287 |
227 TEST_F(GeofencingManagerTest, RegisterRegion_AlreadyRegistered) { | 288 TEST_F(GeofencingManagerTest, RegisterRegion_AlreadyRegistered) { |
228 SetHasProviderForTests(); | 289 SetHasProviderForTests(); |
229 EXPECT_EQ( | 290 EXPECT_EQ(GEOFENCING_STATUS_OK, |
230 GEOFENCING_STATUS_OK, | 291 RegisterRegionSyncWithServiceResult( |
231 RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId, | 292 worker1_->id(), kTestRegionId, test_region_, |
232 kTestRegionId, | 293 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId)); |
233 test_region_, | 294 VerifyRegions(worker1_->id(), expected_regions_); |
234 GEOFENCING_STATUS_OK, | |
235 kTestGeofencingRegistrationId)); | |
236 VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_); | |
237 | 295 |
238 WebCircularGeofencingRegion region2; | 296 WebCircularGeofencingRegion region2; |
239 region2.latitude = 43.2; | 297 region2.latitude = 43.2; |
240 region2.longitude = 1.45; | 298 region2.longitude = 1.45; |
241 region2.radius = 8.5; | 299 region2.radius = 8.5; |
242 EXPECT_EQ(GEOFENCING_STATUS_ERROR, | 300 EXPECT_EQ(GEOFENCING_STATUS_ERROR, |
243 RegisterRegionSync( | 301 RegisterRegionSync(worker1_->id(), kTestRegionId, region2)); |
244 kTestServiceWorkerRegistrationId, kTestRegionId, region2)); | 302 VerifyRegions(worker1_->id(), expected_regions_); |
245 VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_); | |
246 } | 303 } |
247 | 304 |
248 TEST_F(GeofencingManagerTest, UnregisterRegion_NotRegistered) { | 305 TEST_F(GeofencingManagerTest, UnregisterRegion_NotRegistered) { |
249 SetHasProviderForTests(); | 306 SetHasProviderForTests(); |
250 EXPECT_EQ(GEOFENCING_STATUS_UNREGISTRATION_FAILED_NOT_REGISTERED, | 307 EXPECT_EQ(GEOFENCING_STATUS_UNREGISTRATION_FAILED_NOT_REGISTERED, |
251 UnregisterRegionSync( | 308 UnregisterRegionSync(worker1_->id(), kTestRegionId, false)); |
252 kTestServiceWorkerRegistrationId, kTestRegionId, false)); | |
253 } | 309 } |
254 | 310 |
255 TEST_F(GeofencingManagerTest, UnregisterRegion_Success) { | 311 TEST_F(GeofencingManagerTest, UnregisterRegion_Success) { |
256 SetHasProviderForTests(); | 312 SetHasProviderForTests(); |
257 | 313 |
258 EXPECT_EQ( | 314 EXPECT_EQ(GEOFENCING_STATUS_OK, |
259 GEOFENCING_STATUS_OK, | 315 RegisterRegionSyncWithServiceResult( |
260 RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId, | 316 worker1_->id(), kTestRegionId, test_region_, |
261 kTestRegionId, | 317 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId)); |
262 test_region_, | |
263 GEOFENCING_STATUS_OK, | |
264 kTestGeofencingRegistrationId)); | |
265 | 318 |
266 EXPECT_EQ(GEOFENCING_STATUS_OK, | 319 EXPECT_EQ(GEOFENCING_STATUS_OK, |
267 UnregisterRegionSync(kTestServiceWorkerRegistrationId, | 320 UnregisterRegionSync(worker1_->id(), kTestRegionId, true, |
268 kTestRegionId, | |
269 true, | |
270 kTestGeofencingRegistrationId)); | 321 kTestGeofencingRegistrationId)); |
271 VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap()); | 322 VerifyRegions(worker1_->id(), RegionMap()); |
272 } | 323 } |
273 | 324 |
274 TEST_F(GeofencingManagerTest, GetRegisteredRegions_RegistrationInProgress) { | 325 TEST_F(GeofencingManagerTest, GetRegisteredRegions_RegistrationInProgress) { |
275 SetHasProviderForTests(); | 326 SetHasProviderForTests(); |
276 StatusCatcher result; | 327 StatusCatcher result; |
277 GeofencingRegistrationDelegate* delegate = nullptr; | 328 GeofencingRegistrationDelegate* delegate = nullptr; |
278 | 329 |
279 EXPECT_CALL( | 330 EXPECT_CALL( |
280 *service_, | 331 *service_, |
281 RegisterRegion(WebCircularGeofencingRegionEq(test_region_), testing::_)) | 332 RegisterRegion(WebCircularGeofencingRegionEq(test_region_), testing::_)) |
282 .WillOnce(testing::DoAll(SaveDelegate(&delegate), | 333 .WillOnce(testing::DoAll(SaveDelegate(&delegate), |
283 testing::Return(kTestGeofencingRegistrationId))); | 334 testing::Return(kTestGeofencingRegistrationId))); |
284 manager_->RegisterRegion( | 335 manager_->RegisterRegion( |
285 kTestServiceWorkerRegistrationId, | 336 worker1_->id(), kTestRegionId, test_region_, |
286 kTestRegionId, | |
287 test_region_, | |
288 base::Bind(&StatusCatcher::Done, base::Unretained(&result))); | 337 base::Bind(&StatusCatcher::Done, base::Unretained(&result))); |
289 | 338 |
290 // At this point the manager should have tried registering the region with | 339 // At this point the manager should have tried registering the region with |
291 // the service, resulting in |delegate| being set. Until the callback is | 340 // the service, resulting in |delegate| being set. Until the callback is |
292 // called the registration is not complete though. | 341 // called the registration is not complete though. |
293 EXPECT_NE(delegate, nullptr); | 342 EXPECT_NE(delegate, nullptr); |
294 VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap()); | 343 VerifyRegions(worker1_->id(), RegionMap()); |
295 | 344 |
296 // Now call the callback, and verify the registration completed succesfully. | 345 // Now call the callback, and verify the registration completed succesfully. |
297 delegate->RegistrationFinished(kTestGeofencingRegistrationId, | 346 delegate->RegistrationFinished(kTestGeofencingRegistrationId, |
298 GEOFENCING_STATUS_OK); | 347 GEOFENCING_STATUS_OK); |
299 EXPECT_EQ(GEOFENCING_STATUS_OK, result.Wait()); | 348 EXPECT_EQ(GEOFENCING_STATUS_OK, result.Wait()); |
300 VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_); | 349 VerifyRegions(worker1_->id(), expected_regions_); |
301 } | 350 } |
302 | 351 |
303 TEST_F(GeofencingManagerTest, UnregisterRegion_RegistrationInProgress) { | 352 TEST_F(GeofencingManagerTest, UnregisterRegion_RegistrationInProgress) { |
304 SetHasProviderForTests(); | 353 SetHasProviderForTests(); |
305 StatusCatcher result; | 354 StatusCatcher result; |
306 GeofencingRegistrationDelegate* delegate = nullptr; | 355 GeofencingRegistrationDelegate* delegate = nullptr; |
307 | 356 |
308 EXPECT_CALL( | 357 EXPECT_CALL( |
309 *service_, | 358 *service_, |
310 RegisterRegion(WebCircularGeofencingRegionEq(test_region_), testing::_)) | 359 RegisterRegion(WebCircularGeofencingRegionEq(test_region_), testing::_)) |
311 .WillOnce(testing::DoAll(SaveDelegate(&delegate), | 360 .WillOnce(testing::DoAll(SaveDelegate(&delegate), |
312 testing::Return(kTestGeofencingRegistrationId))); | 361 testing::Return(kTestGeofencingRegistrationId))); |
313 manager_->RegisterRegion( | 362 manager_->RegisterRegion( |
314 kTestServiceWorkerRegistrationId, | 363 worker1_->id(), kTestRegionId, test_region_, |
315 kTestRegionId, | |
316 test_region_, | |
317 base::Bind(&StatusCatcher::Done, base::Unretained(&result))); | 364 base::Bind(&StatusCatcher::Done, base::Unretained(&result))); |
318 | 365 |
319 // At this point the manager should have tried registering the region with | 366 // At this point the manager should have tried registering the region with |
320 // the service, resulting in |delegate| being set. Until the callback is | 367 // the service, resulting in |delegate| being set. Until the callback is |
321 // called the registration is not complete though. | 368 // called the registration is not complete though. |
322 EXPECT_NE(delegate, nullptr); | 369 EXPECT_NE(delegate, nullptr); |
323 | 370 |
324 EXPECT_EQ(GEOFENCING_STATUS_UNREGISTRATION_FAILED_NOT_REGISTERED, | 371 EXPECT_EQ(GEOFENCING_STATUS_UNREGISTRATION_FAILED_NOT_REGISTERED, |
325 UnregisterRegionSync( | 372 UnregisterRegionSync(worker1_->id(), kTestRegionId, false)); |
326 kTestServiceWorkerRegistrationId, kTestRegionId, false)); | |
327 } | 373 } |
328 | 374 |
329 TEST_F(GeofencingManagerTest, GetRegisteredRegions_NoRegions) { | 375 TEST_F(GeofencingManagerTest, GetRegisteredRegions_NoRegions) { |
330 SetHasProviderForTests(); | 376 SetHasProviderForTests(); |
331 VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap()); | 377 VerifyRegions(worker1_->id(), RegionMap()); |
332 } | 378 } |
333 | 379 |
334 TEST_F(GeofencingManagerTest, RegisterRegion_SeparateServiceWorkers) { | 380 TEST_F(GeofencingManagerTest, RegisterRegion_SeparateServiceWorkers) { |
335 SetHasProviderForTests(); | 381 SetHasProviderForTests(); |
336 | 382 |
337 EXPECT_EQ( | 383 EXPECT_EQ(GEOFENCING_STATUS_OK, |
338 GEOFENCING_STATUS_OK, | 384 RegisterRegionSyncWithServiceResult( |
339 RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId, | 385 worker1_->id(), kTestRegionId, test_region_, |
340 kTestRegionId, | 386 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId)); |
341 test_region_, | |
342 GEOFENCING_STATUS_OK, | |
343 kTestGeofencingRegistrationId)); | |
344 | 387 |
345 VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_); | 388 VerifyRegions(worker1_->id(), expected_regions_); |
346 VerifyRegions(kTestServiceWorkerRegistrationId2, RegionMap()); | 389 VerifyRegions(worker2_->id(), RegionMap()); |
347 | 390 |
348 EXPECT_EQ( | 391 EXPECT_EQ(GEOFENCING_STATUS_OK, |
349 GEOFENCING_STATUS_OK, | 392 RegisterRegionSyncWithServiceResult( |
350 RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId2, | 393 worker2_->id(), kTestRegionId, test_region_, |
351 kTestRegionId, | 394 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId2)); |
352 test_region_, | |
353 GEOFENCING_STATUS_OK, | |
354 kTestGeofencingRegistrationId2)); | |
355 | 395 |
356 VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_); | 396 VerifyRegions(worker1_->id(), expected_regions_); |
357 VerifyRegions(kTestServiceWorkerRegistrationId2, expected_regions_); | 397 VerifyRegions(worker2_->id(), expected_regions_); |
358 } | 398 } |
359 | 399 |
360 TEST_F(GeofencingManagerTest, UnregisterRegion_SeparateServiceWorkers) { | 400 TEST_F(GeofencingManagerTest, UnregisterRegion_SeparateServiceWorkers) { |
361 SetHasProviderForTests(); | 401 SetHasProviderForTests(); |
362 | 402 |
363 EXPECT_EQ( | 403 EXPECT_EQ(GEOFENCING_STATUS_OK, |
364 GEOFENCING_STATUS_OK, | 404 RegisterRegionSyncWithServiceResult( |
365 RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId, | 405 worker1_->id(), kTestRegionId, test_region_, |
366 kTestRegionId, | 406 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId)); |
367 test_region_, | 407 EXPECT_EQ(GEOFENCING_STATUS_OK, |
368 GEOFENCING_STATUS_OK, | 408 RegisterRegionSyncWithServiceResult( |
369 kTestGeofencingRegistrationId)); | 409 worker2_->id(), kTestRegionId, test_region_, |
370 EXPECT_EQ( | 410 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId2)); |
371 GEOFENCING_STATUS_OK, | |
372 RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId2, | |
373 kTestRegionId, | |
374 test_region_, | |
375 GEOFENCING_STATUS_OK, | |
376 kTestGeofencingRegistrationId2)); | |
377 | 411 |
378 EXPECT_EQ(GEOFENCING_STATUS_OK, | 412 EXPECT_EQ(GEOFENCING_STATUS_OK, |
379 UnregisterRegionSync(kTestServiceWorkerRegistrationId, | 413 UnregisterRegionSync(worker1_->id(), kTestRegionId, true, |
380 kTestRegionId, | |
381 true, | |
382 kTestGeofencingRegistrationId)); | 414 kTestGeofencingRegistrationId)); |
383 | 415 |
384 VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap()); | 416 VerifyRegions(worker1_->id(), RegionMap()); |
385 VerifyRegions(kTestServiceWorkerRegistrationId2, expected_regions_); | 417 VerifyRegions(worker2_->id(), expected_regions_); |
386 | 418 |
387 EXPECT_EQ(GEOFENCING_STATUS_OK, | 419 EXPECT_EQ(GEOFENCING_STATUS_OK, |
388 UnregisterRegionSync(kTestServiceWorkerRegistrationId2, | 420 UnregisterRegionSync(worker2_->id(), kTestRegionId, true, |
389 kTestRegionId, | |
390 true, | |
391 kTestGeofencingRegistrationId2)); | 421 kTestGeofencingRegistrationId2)); |
392 | 422 |
393 VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap()); | 423 VerifyRegions(worker1_->id(), RegionMap()); |
394 VerifyRegions(kTestServiceWorkerRegistrationId2, RegionMap()); | 424 VerifyRegions(worker2_->id(), RegionMap()); |
395 } | 425 } |
396 | 426 |
397 TEST_F(GeofencingManagerTest, ShutdownCleansRegistrations) { | 427 TEST_F(GeofencingManagerTest, ShutdownCleansRegistrations) { |
398 SetHasProviderForTests(); | 428 SetHasProviderForTests(); |
399 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner()); | 429 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner()); |
400 EXPECT_EQ( | 430 EXPECT_EQ(GEOFENCING_STATUS_OK, |
401 GEOFENCING_STATUS_OK, | 431 RegisterRegionSyncWithServiceResult( |
402 RegisterRegionSyncWithServiceResult(kTestServiceWorkerRegistrationId, | 432 worker1_->id(), kTestRegionId, test_region_, |
403 kTestRegionId, | 433 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId)); |
404 test_region_, | |
405 GEOFENCING_STATUS_OK, | |
406 kTestGeofencingRegistrationId)); | |
407 | 434 |
408 EXPECT_CALL(*service_, UnregisterRegion(kTestGeofencingRegistrationId)) | 435 EXPECT_CALL(*service_, UnregisterRegion(kTestGeofencingRegistrationId)) |
409 .WillOnce(QuitRunner(runner)); | 436 .WillOnce(QuitRunner(runner)); |
410 manager_->Shutdown(); | 437 manager_->Shutdown(); |
411 runner->Run(); | 438 runner->Run(); |
412 } | 439 } |
413 | 440 |
| 441 TEST_F(GeofencingManagerTest, OnRegistrationDeleted) { |
| 442 SetHasProviderForTests(); |
| 443 |
| 444 EXPECT_EQ(GEOFENCING_STATUS_OK, |
| 445 RegisterRegionSyncWithServiceResult( |
| 446 worker1_->id(), kTestRegionId, test_region_, |
| 447 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId)); |
| 448 EXPECT_EQ(GEOFENCING_STATUS_OK, |
| 449 RegisterRegionSyncWithServiceResult( |
| 450 worker2_->id(), kTestRegionId, test_region_, |
| 451 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId2)); |
| 452 |
| 453 EXPECT_CALL(*service_, UnregisterRegion(kTestGeofencingRegistrationId)); |
| 454 UnregisterServiceWorker(worker1_); |
| 455 VerifyRegions(worker1_->id(), RegionMap()); |
| 456 VerifyRegions(worker2_->id(), expected_regions_); |
| 457 |
| 458 EXPECT_CALL(*service_, UnregisterRegion(kTestGeofencingRegistrationId2)); |
| 459 UnregisterServiceWorker(worker2_); |
| 460 VerifyRegions(worker1_->id(), RegionMap()); |
| 461 VerifyRegions(worker2_->id(), RegionMap()); |
| 462 } |
| 463 |
414 TEST_F(GeofencingManagerTest, RegisterRegion_MockedNoService) { | 464 TEST_F(GeofencingManagerTest, RegisterRegion_MockedNoService) { |
415 manager_->SetMockProvider(GeofencingMockState::SERVICE_UNAVAILABLE); | 465 manager_->SetMockProvider(GeofencingMockState::SERVICE_UNAVAILABLE); |
416 // Make sure real service doesn't get called. | |
417 EXPECT_CALL(*service_, IsServiceAvailable()).Times(0); | |
418 | 466 |
419 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, | 467 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, |
420 RegisterRegionSync(kTestServiceWorkerRegistrationId, kTestRegionId, | 468 RegisterRegionSync(worker1_->id(), kTestRegionId, test_region_)); |
421 test_region_)); | |
422 } | 469 } |
423 | 470 |
424 TEST_F(GeofencingManagerTest, UnregisterRegion_MockedNoService) { | 471 TEST_F(GeofencingManagerTest, UnregisterRegion_MockedNoService) { |
425 manager_->SetMockProvider(GeofencingMockState::SERVICE_UNAVAILABLE); | 472 manager_->SetMockProvider(GeofencingMockState::SERVICE_UNAVAILABLE); |
426 // Make sure real service doesn't get called. | |
427 EXPECT_CALL(*service_, IsServiceAvailable()).Times(0); | |
428 | 473 |
429 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, | 474 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, |
430 UnregisterRegionSync(kTestServiceWorkerRegistrationId, | 475 UnregisterRegionSync(worker1_->id(), kTestRegionId, false)); |
431 kTestRegionId, false)); | |
432 } | 476 } |
433 | 477 |
434 TEST_F(GeofencingManagerTest, GetRegisteredRegions_MockedNoService) { | 478 TEST_F(GeofencingManagerTest, GetRegisteredRegions_MockedNoService) { |
435 manager_->SetMockProvider(GeofencingMockState::SERVICE_UNAVAILABLE); | 479 manager_->SetMockProvider(GeofencingMockState::SERVICE_UNAVAILABLE); |
436 // Make sure real service doesn't get called. | |
437 EXPECT_CALL(*service_, IsServiceAvailable()).Times(0); | |
438 | 480 |
439 RegionMap regions; | 481 RegionMap regions; |
440 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, | 482 EXPECT_EQ(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE, |
441 manager_->GetRegisteredRegions(kTestServiceWorkerRegistrationId, | 483 manager_->GetRegisteredRegions(worker1_->id(), ®ions)); |
442 ®ions)); | |
443 EXPECT_TRUE(regions.empty()); | 484 EXPECT_TRUE(regions.empty()); |
444 } | 485 } |
445 | 486 |
446 TEST_F(GeofencingManagerTest, RegisterRegion_MockedService) { | 487 TEST_F(GeofencingManagerTest, RegisterRegion_MockedService) { |
447 manager_->SetMockProvider(GeofencingMockState::SERVICE_AVAILABLE); | 488 manager_->SetMockProvider(GeofencingMockState::SERVICE_AVAILABLE); |
448 | 489 |
| 490 // Make sure real service doesn't get called. |
| 491 EXPECT_CALL(*service_, RegisterRegion(testing::_, testing::_)).Times(0); |
| 492 |
449 EXPECT_EQ(GEOFENCING_STATUS_OK, | 493 EXPECT_EQ(GEOFENCING_STATUS_OK, |
450 RegisterRegionSync(kTestServiceWorkerRegistrationId, kTestRegionId, | 494 RegisterRegionSync(worker1_->id(), kTestRegionId, test_region_)); |
451 test_region_)); | 495 VerifyRegions(worker1_->id(), expected_regions_); |
452 VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_); | |
453 } | 496 } |
454 | 497 |
455 TEST_F(GeofencingManagerTest, SetMockProviderClearsRegistrations) { | 498 TEST_F(GeofencingManagerTest, SetMockProviderClearsRegistrations) { |
456 SetHasProviderForTests(); | 499 SetHasProviderForTests(); |
457 EXPECT_EQ(GEOFENCING_STATUS_OK, | 500 EXPECT_EQ(GEOFENCING_STATUS_OK, |
458 RegisterRegionSyncWithServiceResult( | 501 RegisterRegionSyncWithServiceResult( |
459 kTestServiceWorkerRegistrationId, kTestRegionId, test_region_, | 502 worker1_->id(), kTestRegionId, test_region_, |
460 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId)); | 503 GEOFENCING_STATUS_OK, kTestGeofencingRegistrationId)); |
461 VerifyRegions(kTestServiceWorkerRegistrationId, expected_regions_); | 504 VerifyRegions(worker1_->id(), expected_regions_); |
462 | 505 |
463 EXPECT_CALL(*service_, UnregisterRegion(kTestGeofencingRegistrationId)); | 506 EXPECT_CALL(*service_, UnregisterRegion(kTestGeofencingRegistrationId)); |
464 | 507 |
465 manager_->SetMockProvider(GeofencingMockState::SERVICE_AVAILABLE); | 508 manager_->SetMockProvider(GeofencingMockState::SERVICE_AVAILABLE); |
466 VerifyRegions(kTestServiceWorkerRegistrationId, RegionMap()); | 509 VerifyRegions(worker1_->id(), RegionMap()); |
467 } | 510 } |
468 | 511 |
469 } // namespace content | 512 } // namespace content |
OLD | NEW |