| 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 "device/geolocation/location_arbitrator_impl.h" | 5 #include "device/geolocation/location_arbitrator_impl.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 EXPECT_FALSE(gps()); | 202 EXPECT_FALSE(gps()); |
| 203 } | 203 } |
| 204 | 204 |
| 205 TEST_F(GeolocationLocationArbitratorTest, NormalUsage) { | 205 TEST_F(GeolocationLocationArbitratorTest, NormalUsage) { |
| 206 InitializeArbitrator(nullptr); | 206 InitializeArbitrator(nullptr); |
| 207 ASSERT_TRUE(access_token_store_.get()); | 207 ASSERT_TRUE(access_token_store_.get()); |
| 208 ASSERT_TRUE(arbitrator_); | 208 ASSERT_TRUE(arbitrator_); |
| 209 | 209 |
| 210 EXPECT_FALSE(cell()); | 210 EXPECT_FALSE(cell()); |
| 211 EXPECT_FALSE(gps()); | 211 EXPECT_FALSE(gps()); |
| 212 arbitrator_->StartProviders(false); | 212 arbitrator_->StartProvider(false); |
| 213 | 213 |
| 214 EXPECT_TRUE(access_token_store_->access_token_map_.empty()); | 214 EXPECT_TRUE(access_token_store_->access_token_map_.empty()); |
| 215 | 215 |
| 216 access_token_store_->NotifyDelegateTokensLoaded(); | 216 access_token_store_->NotifyDelegateTokensLoaded(); |
| 217 ASSERT_TRUE(cell()); | 217 ASSERT_TRUE(cell()); |
| 218 EXPECT_TRUE(gps()); | 218 EXPECT_TRUE(gps()); |
| 219 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, cell()->state_); | 219 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, cell()->state_); |
| 220 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, gps()->state_); | 220 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, gps()->state_); |
| 221 EXPECT_FALSE(observer_->last_position_.Validate()); | 221 EXPECT_FALSE(observer_->last_position_.Validate()); |
| 222 EXPECT_EQ(Geoposition::ERROR_CODE_NONE, observer_->last_position_.error_code); | 222 EXPECT_EQ(Geoposition::ERROR_CODE_NONE, observer_->last_position_.error_code); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 238 TEST_F(GeolocationLocationArbitratorTest, CustomSystemProviderOnly) { | 238 TEST_F(GeolocationLocationArbitratorTest, CustomSystemProviderOnly) { |
| 239 FakeGeolocationDelegate* fake_delegate = new FakeGeolocationDelegate; | 239 FakeGeolocationDelegate* fake_delegate = new FakeGeolocationDelegate; |
| 240 fake_delegate->set_use_network(false); | 240 fake_delegate->set_use_network(false); |
| 241 | 241 |
| 242 std::unique_ptr<GeolocationDelegate> delegate(fake_delegate); | 242 std::unique_ptr<GeolocationDelegate> delegate(fake_delegate); |
| 243 InitializeArbitrator(std::move(delegate)); | 243 InitializeArbitrator(std::move(delegate)); |
| 244 ASSERT_TRUE(arbitrator_); | 244 ASSERT_TRUE(arbitrator_); |
| 245 | 245 |
| 246 EXPECT_FALSE(cell()); | 246 EXPECT_FALSE(cell()); |
| 247 EXPECT_FALSE(gps()); | 247 EXPECT_FALSE(gps()); |
| 248 arbitrator_->StartProviders(false); | 248 arbitrator_->StartProvider(false); |
| 249 | 249 |
| 250 ASSERT_FALSE(cell()); | 250 ASSERT_FALSE(cell()); |
| 251 EXPECT_FALSE(gps()); | 251 EXPECT_FALSE(gps()); |
| 252 ASSERT_TRUE(fake_delegate->mock_location_provider()); | 252 ASSERT_TRUE(fake_delegate->mock_location_provider()); |
| 253 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, | 253 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, |
| 254 fake_delegate->mock_location_provider()->state_); | 254 fake_delegate->mock_location_provider()->state_); |
| 255 EXPECT_FALSE(observer_->last_position_.Validate()); | 255 EXPECT_FALSE(observer_->last_position_.Validate()); |
| 256 EXPECT_EQ(Geoposition::ERROR_CODE_NONE, observer_->last_position_.error_code); | 256 EXPECT_EQ(Geoposition::ERROR_CODE_NONE, observer_->last_position_.error_code); |
| 257 | 257 |
| 258 SetReferencePosition(fake_delegate->mock_location_provider()); | 258 SetReferencePosition(fake_delegate->mock_location_provider()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 274 CustomSystemAndDefaultNetworkProviders) { | 274 CustomSystemAndDefaultNetworkProviders) { |
| 275 FakeGeolocationDelegate* fake_delegate = new FakeGeolocationDelegate; | 275 FakeGeolocationDelegate* fake_delegate = new FakeGeolocationDelegate; |
| 276 fake_delegate->set_use_network(true); | 276 fake_delegate->set_use_network(true); |
| 277 | 277 |
| 278 std::unique_ptr<GeolocationDelegate> delegate(fake_delegate); | 278 std::unique_ptr<GeolocationDelegate> delegate(fake_delegate); |
| 279 InitializeArbitrator(std::move(delegate)); | 279 InitializeArbitrator(std::move(delegate)); |
| 280 ASSERT_TRUE(arbitrator_); | 280 ASSERT_TRUE(arbitrator_); |
| 281 | 281 |
| 282 EXPECT_FALSE(cell()); | 282 EXPECT_FALSE(cell()); |
| 283 EXPECT_FALSE(gps()); | 283 EXPECT_FALSE(gps()); |
| 284 arbitrator_->StartProviders(false); | 284 arbitrator_->StartProvider(false); |
| 285 | 285 |
| 286 EXPECT_TRUE(access_token_store_->access_token_map_.empty()); | 286 EXPECT_TRUE(access_token_store_->access_token_map_.empty()); |
| 287 | 287 |
| 288 access_token_store_->NotifyDelegateTokensLoaded(); | 288 access_token_store_->NotifyDelegateTokensLoaded(); |
| 289 | 289 |
| 290 ASSERT_TRUE(cell()); | 290 ASSERT_TRUE(cell()); |
| 291 EXPECT_FALSE(gps()); | 291 EXPECT_FALSE(gps()); |
| 292 ASSERT_TRUE(fake_delegate->mock_location_provider()); | 292 ASSERT_TRUE(fake_delegate->mock_location_provider()); |
| 293 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, | 293 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, |
| 294 fake_delegate->mock_location_provider()->state_); | 294 fake_delegate->mock_location_provider()->state_); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 305 | 305 |
| 306 EXPECT_FALSE(cell()->is_permission_granted_); | 306 EXPECT_FALSE(cell()->is_permission_granted_); |
| 307 EXPECT_FALSE(arbitrator_->HasPermissionBeenGranted()); | 307 EXPECT_FALSE(arbitrator_->HasPermissionBeenGranted()); |
| 308 arbitrator_->OnPermissionGranted(); | 308 arbitrator_->OnPermissionGranted(); |
| 309 EXPECT_TRUE(arbitrator_->HasPermissionBeenGranted()); | 309 EXPECT_TRUE(arbitrator_->HasPermissionBeenGranted()); |
| 310 EXPECT_TRUE(cell()->is_permission_granted_); | 310 EXPECT_TRUE(cell()->is_permission_granted_); |
| 311 } | 311 } |
| 312 | 312 |
| 313 TEST_F(GeolocationLocationArbitratorTest, SetObserverOptions) { | 313 TEST_F(GeolocationLocationArbitratorTest, SetObserverOptions) { |
| 314 InitializeArbitrator(nullptr); | 314 InitializeArbitrator(nullptr); |
| 315 arbitrator_->StartProviders(false); | 315 arbitrator_->StartProvider(false); |
| 316 access_token_store_->NotifyDelegateTokensLoaded(); | 316 access_token_store_->NotifyDelegateTokensLoaded(); |
| 317 ASSERT_TRUE(cell()); | 317 ASSERT_TRUE(cell()); |
| 318 ASSERT_TRUE(gps()); | 318 ASSERT_TRUE(gps()); |
| 319 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, cell()->state_); | 319 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, cell()->state_); |
| 320 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, gps()->state_); | 320 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, gps()->state_); |
| 321 SetReferencePosition(cell()); | 321 SetReferencePosition(cell()); |
| 322 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, cell()->state_); | 322 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, cell()->state_); |
| 323 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, gps()->state_); | 323 EXPECT_EQ(MockLocationProvider::LOW_ACCURACY, gps()->state_); |
| 324 arbitrator_->StartProviders(true); | 324 arbitrator_->StartProvider(true); |
| 325 EXPECT_EQ(MockLocationProvider::HIGH_ACCURACY, cell()->state_); | 325 EXPECT_EQ(MockLocationProvider::HIGH_ACCURACY, cell()->state_); |
| 326 EXPECT_EQ(MockLocationProvider::HIGH_ACCURACY, gps()->state_); | 326 EXPECT_EQ(MockLocationProvider::HIGH_ACCURACY, gps()->state_); |
| 327 } | 327 } |
| 328 | 328 |
| 329 TEST_F(GeolocationLocationArbitratorTest, Arbitration) { | 329 TEST_F(GeolocationLocationArbitratorTest, Arbitration) { |
| 330 InitializeArbitrator(nullptr); | 330 InitializeArbitrator(nullptr); |
| 331 arbitrator_->StartProviders(false); | 331 arbitrator_->StartProvider(false); |
| 332 access_token_store_->NotifyDelegateTokensLoaded(); | 332 access_token_store_->NotifyDelegateTokensLoaded(); |
| 333 ASSERT_TRUE(cell()); | 333 ASSERT_TRUE(cell()); |
| 334 ASSERT_TRUE(gps()); | 334 ASSERT_TRUE(gps()); |
| 335 | 335 |
| 336 SetPositionFix(cell(), 1, 2, 150); | 336 SetPositionFix(cell(), 1, 2, 150); |
| 337 | 337 |
| 338 // First position available | 338 // First position available |
| 339 EXPECT_TRUE(observer_->last_position_.Validate()); | 339 EXPECT_TRUE(observer_->last_position_.Validate()); |
| 340 CheckLastPositionInfo(1, 2, 150); | 340 CheckLastPositionInfo(1, 2, 150); |
| 341 | 341 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 | 398 |
| 399 // 2 minutes later | 399 // 2 minutes later |
| 400 AdvanceTimeNow(base::TimeDelta::FromMinutes(2)); | 400 AdvanceTimeNow(base::TimeDelta::FromMinutes(2)); |
| 401 // Arrive in station. Cell moves but GPS is stale. Switch to fresher cell. | 401 // Arrive in station. Cell moves but GPS is stale. Switch to fresher cell. |
| 402 SetPositionFix(cell(), 3.5658700, 139.069979, 1000); | 402 SetPositionFix(cell(), 3.5658700, 139.069979, 1000); |
| 403 CheckLastPositionInfo(3.5658700, 139.069979, 1000); | 403 CheckLastPositionInfo(3.5658700, 139.069979, 1000); |
| 404 } | 404 } |
| 405 | 405 |
| 406 TEST_F(GeolocationLocationArbitratorTest, TwoOneShotsIsNewPositionBetter) { | 406 TEST_F(GeolocationLocationArbitratorTest, TwoOneShotsIsNewPositionBetter) { |
| 407 InitializeArbitrator(nullptr); | 407 InitializeArbitrator(nullptr); |
| 408 arbitrator_->StartProviders(false); | 408 arbitrator_->StartProvider(false); |
| 409 access_token_store_->NotifyDelegateTokensLoaded(); | 409 access_token_store_->NotifyDelegateTokensLoaded(); |
| 410 ASSERT_TRUE(cell()); | 410 ASSERT_TRUE(cell()); |
| 411 ASSERT_TRUE(gps()); | 411 ASSERT_TRUE(gps()); |
| 412 | 412 |
| 413 // Set the initial position. | 413 // Set the initial position. |
| 414 SetPositionFix(cell(), 3, 139, 100); | 414 SetPositionFix(cell(), 3, 139, 100); |
| 415 CheckLastPositionInfo(3, 139, 100); | 415 CheckLastPositionInfo(3, 139, 100); |
| 416 | 416 |
| 417 // Restart providers to simulate a one-shot request. | 417 // Restart providers to simulate a one-shot request. |
| 418 arbitrator_->StopProviders(); | 418 arbitrator_->StopProvider(); |
| 419 | 419 |
| 420 // To test 240956, perform a throwaway alloc. | 420 // To test 240956, perform a throwaway alloc. |
| 421 // This convinces the allocator to put the providers in a new memory location. | 421 // This convinces the allocator to put the providers in a new memory location. |
| 422 std::unique_ptr<MockLocationProvider> dummy_provider( | 422 std::unique_ptr<MockLocationProvider> dummy_provider( |
| 423 new MockLocationProvider); | 423 new MockLocationProvider); |
| 424 | 424 |
| 425 arbitrator_->StartProviders(false); | 425 arbitrator_->StartProvider(false); |
| 426 access_token_store_->NotifyDelegateTokensLoaded(); | 426 access_token_store_->NotifyDelegateTokensLoaded(); |
| 427 | 427 |
| 428 // Advance the time a short while to simulate successive calls. | 428 // Advance the time a short while to simulate successive calls. |
| 429 AdvanceTimeNow(base::TimeDelta::FromMilliseconds(5)); | 429 AdvanceTimeNow(base::TimeDelta::FromMilliseconds(5)); |
| 430 | 430 |
| 431 // Update with a less accurate position to verify 240956. | 431 // Update with a less accurate position to verify 240956. |
| 432 SetPositionFix(cell(), 3, 139, 150); | 432 SetPositionFix(cell(), 3, 139, 150); |
| 433 CheckLastPositionInfo(3, 139, 150); | 433 CheckLastPositionInfo(3, 139, 150); |
| 434 } | 434 } |
| 435 | 435 |
| 436 } // namespace device | 436 } // namespace device |
| OLD | NEW |