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

Side by Side Diff: device/geolocation/network_location_provider_unittest.cc

Issue 2901413006: Prevent NetworkLocationProvider from sending wifi data if started low accuracy
Patch Set: Rebase Created 3 years, 7 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) 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/network_location_provider.h" 5 #include "device/geolocation/network_location_provider.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 // Test fixture members were SetUp correctly. 328 // Test fixture members were SetUp correctly.
329 EXPECT_EQ(&main_message_loop_, base::MessageLoop::current()); 329 EXPECT_EQ(&main_message_loop_, base::MessageLoop::current());
330 std::unique_ptr<LocationProvider> provider(CreateProvider(true)); 330 std::unique_ptr<LocationProvider> provider(CreateProvider(true));
331 EXPECT_TRUE(provider); 331 EXPECT_TRUE(provider);
332 provider.reset(); 332 provider.reset();
333 SUCCEED(); 333 SUCCEED();
334 } 334 }
335 335
336 TEST_F(GeolocationNetworkProviderTest, StartProvider) { 336 TEST_F(GeolocationNetworkProviderTest, StartProvider) {
337 std::unique_ptr<LocationProvider> provider(CreateProvider(true)); 337 std::unique_ptr<LocationProvider> provider(CreateProvider(true));
338 EXPECT_TRUE(provider->StartProvider(false)); 338 EXPECT_TRUE(provider->StartProvider(true));
339 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 339 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
340 ASSERT_TRUE(fetcher); 340 ASSERT_TRUE(fetcher);
341 CheckRequestIsValid(*fetcher, 0, 0, 0, std::string()); 341 CheckRequestIsValid(*fetcher, 0, 0, 0, std::string());
342 } 342 }
343 343
344 TEST_F(GeolocationNetworkProviderTest, StartProviderDefaultUrl) { 344 TEST_F(GeolocationNetworkProviderTest, StartProviderDefaultUrl) {
345 test_server_url_ = LocationArbitrator::DefaultNetworkProviderURL(); 345 test_server_url_ = LocationArbitrator::DefaultNetworkProviderURL();
346 std::unique_ptr<LocationProvider> provider(CreateProvider(true)); 346 std::unique_ptr<LocationProvider> provider(CreateProvider(true));
347 EXPECT_TRUE(provider->StartProvider(false)); 347 EXPECT_TRUE(provider->StartProvider(true));
348 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 348 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
349 ASSERT_TRUE(fetcher); 349 ASSERT_TRUE(fetcher);
350 CheckRequestIsValid(*fetcher, 0, 0, 0, std::string()); 350 CheckRequestIsValid(*fetcher, 0, 0, 0, std::string());
351 } 351 }
352 352
353 TEST_F(GeolocationNetworkProviderTest, StartProviderLongRequest) { 353 TEST_F(GeolocationNetworkProviderTest, StartProviderLongRequest) {
354 std::unique_ptr<LocationProvider> provider(CreateProvider(true)); 354 std::unique_ptr<LocationProvider> provider(CreateProvider(true));
355 EXPECT_TRUE(provider->StartProvider(false)); 355 EXPECT_TRUE(provider->StartProvider(true));
356 const int kFirstScanAps = 20; 356 const int kFirstScanAps = 20;
357 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps)); 357 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps));
358 base::RunLoop().RunUntilIdle(); 358 base::RunLoop().RunUntilIdle();
359 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 359 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
360 ASSERT_TRUE(fetcher); 360 ASSERT_TRUE(fetcher);
361 // The request url should have been shortened to less than 2048 characters 361 // The request url should have been shortened to less than 2048 characters
362 // in length by not including access points with the lowest signal strength 362 // in length by not including access points with the lowest signal strength
363 // in the request. 363 // in the request.
364 EXPECT_LT(fetcher->GetOriginalURL().spec().size(), size_t(2048)); 364 EXPECT_LT(fetcher->GetOriginalURL().spec().size(), size_t(2048));
365 CheckRequestIsValid(*fetcher, 0, 16, 4, std::string()); 365 CheckRequestIsValid(*fetcher, 0, 16, 4, std::string());
366 } 366 }
367 367
368 TEST_F(GeolocationNetworkProviderTest, MultipleWifiScansComplete) { 368 TEST_F(GeolocationNetworkProviderTest, MultipleWifiScansComplete) {
369 std::unique_ptr<LocationProvider> provider(CreateProvider(true)); 369 std::unique_ptr<LocationProvider> provider(CreateProvider(true));
370 EXPECT_TRUE(provider->StartProvider(false)); 370 EXPECT_TRUE(provider->StartProvider(true));
371 371
372 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 372 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
373 ASSERT_TRUE(fetcher); 373 ASSERT_TRUE(fetcher);
374 EXPECT_TRUE(IsTestServerUrl(fetcher->GetOriginalURL())); 374 EXPECT_TRUE(IsTestServerUrl(fetcher->GetOriginalURL()));
375 375
376 // Complete the network request with bad position fix. 376 // Complete the network request with bad position fix.
377 const char* kNoFixNetworkResponse = 377 const char* kNoFixNetworkResponse =
378 "{" 378 "{"
379 " \"status\": \"ZERO_RESULTS\"" 379 " \"status\": \"ZERO_RESULTS\""
380 "}"; 380 "}";
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 position = provider->GetPosition(); 464 position = provider->GetPosition();
465 EXPECT_EQ(51.0, position.latitude); 465 EXPECT_EQ(51.0, position.latitude);
466 EXPECT_EQ(-0.1, position.longitude); 466 EXPECT_EQ(-0.1, position.longitude);
467 EXPECT_TRUE(position.Validate()); 467 EXPECT_TRUE(position.Validate());
468 } 468 }
469 469
470 TEST_F(GeolocationNetworkProviderTest, NoRequestOnStartupUntilWifiData) { 470 TEST_F(GeolocationNetworkProviderTest, NoRequestOnStartupUntilWifiData) {
471 MessageLoopQuitListener listener; 471 MessageLoopQuitListener listener;
472 wifi_data_provider_->set_got_data(false); 472 wifi_data_provider_->set_got_data(false);
473 std::unique_ptr<LocationProvider> provider(CreateProvider(true)); 473 std::unique_ptr<LocationProvider> provider(CreateProvider(true));
474 EXPECT_TRUE(provider->StartProvider(false)); 474 EXPECT_TRUE(provider->StartProvider(true));
475 475
476 provider->SetUpdateCallback(base::Bind( 476 provider->SetUpdateCallback(base::Bind(
477 &MessageLoopQuitListener::OnLocationUpdate, base::Unretained(&listener))); 477 &MessageLoopQuitListener::OnLocationUpdate, base::Unretained(&listener)));
478 478
479 base::RunLoop().RunUntilIdle(); 479 base::RunLoop().RunUntilIdle();
480 EXPECT_FALSE(get_url_fetcher_and_advance_id()) 480 EXPECT_FALSE(get_url_fetcher_and_advance_id())
481 << "Network request should not be created right away on startup when " 481 << "Network request should not be created right away on startup when "
482 "wifi data has not yet arrived"; 482 "wifi data has not yet arrived";
483 483
484 wifi_data_provider_->SetData(CreateReferenceWifiScanData(1)); 484 wifi_data_provider_->SetData(CreateReferenceWifiScanData(1));
485 base::RunLoop().RunUntilIdle(); 485 base::RunLoop().RunUntilIdle();
486 EXPECT_TRUE(get_url_fetcher_and_advance_id()); 486 EXPECT_TRUE(get_url_fetcher_and_advance_id());
487 } 487 }
488 488
489 TEST_F(GeolocationNetworkProviderTest, NewDataReplacesExistingNetworkRequest) { 489 TEST_F(GeolocationNetworkProviderTest, NewDataReplacesExistingNetworkRequest) {
490 // Send initial request with empty data 490 // Send initial request with empty data
491 std::unique_ptr<LocationProvider> provider(CreateProvider(true)); 491 std::unique_ptr<LocationProvider> provider(CreateProvider(true));
492 EXPECT_TRUE(provider->StartProvider(false)); 492 EXPECT_TRUE(provider->StartProvider(true));
493 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 493 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
494 EXPECT_TRUE(fetcher); 494 EXPECT_TRUE(fetcher);
495 495
496 // Now wifi data arrives; new request should be sent. 496 // Now wifi data arrives; new request should be sent.
497 wifi_data_provider_->SetData(CreateReferenceWifiScanData(4)); 497 wifi_data_provider_->SetData(CreateReferenceWifiScanData(4));
498 base::RunLoop().RunUntilIdle(); 498 base::RunLoop().RunUntilIdle();
499 fetcher = get_url_fetcher_and_advance_id(); 499 fetcher = get_url_fetcher_and_advance_id();
500 EXPECT_TRUE(fetcher); 500 EXPECT_TRUE(fetcher);
501 } 501 }
502 502
503 TEST_F(GeolocationNetworkProviderTest, NetworkRequestDeferredForPermission) { 503 TEST_F(GeolocationNetworkProviderTest, NetworkRequestDeferredForPermission) {
504 std::unique_ptr<LocationProvider> provider(CreateProvider(false)); 504 std::unique_ptr<LocationProvider> provider(CreateProvider(false));
505 EXPECT_TRUE(provider->StartProvider(false)); 505 EXPECT_TRUE(provider->StartProvider(true));
506 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 506 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
507 EXPECT_FALSE(fetcher); 507 EXPECT_FALSE(fetcher);
508 provider->OnPermissionGranted(); 508 provider->OnPermissionGranted();
509 509
510 fetcher = get_url_fetcher_and_advance_id(); 510 fetcher = get_url_fetcher_and_advance_id();
511 ASSERT_TRUE(fetcher); 511 ASSERT_TRUE(fetcher);
512 512
513 EXPECT_TRUE(IsTestServerUrl(fetcher->GetOriginalURL())); 513 EXPECT_TRUE(IsTestServerUrl(fetcher->GetOriginalURL()));
514 } 514 }
515 515
516 TEST_F(GeolocationNetworkProviderTest, 516 TEST_F(GeolocationNetworkProviderTest,
517 NetworkRequestWithWifiDataDeferredForPermission) { 517 NetworkRequestWithWifiDataDeferredForPermission) {
518 access_token_store_->access_token_map_[test_server_url_] = 518 access_token_store_->access_token_map_[test_server_url_] =
519 base::UTF8ToUTF16(REFERENCE_ACCESS_TOKEN); 519 base::UTF8ToUTF16(REFERENCE_ACCESS_TOKEN);
520 std::unique_ptr<LocationProvider> provider(CreateProvider(false)); 520 std::unique_ptr<LocationProvider> provider(CreateProvider(false));
521 EXPECT_TRUE(provider->StartProvider(false)); 521 EXPECT_TRUE(provider->StartProvider(true));
522 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 522 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
523 EXPECT_FALSE(fetcher); 523 EXPECT_FALSE(fetcher);
524 524
525 static const int kScanCount = 4; 525 static const int kScanCount = 4;
526 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kScanCount)); 526 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kScanCount));
527 base::RunLoop().RunUntilIdle(); 527 base::RunLoop().RunUntilIdle();
528 528
529 fetcher = get_url_fetcher_and_advance_id(); 529 fetcher = get_url_fetcher_and_advance_id();
530 EXPECT_FALSE(fetcher); 530 EXPECT_FALSE(fetcher);
531 531
(...skipping 22 matching lines...) Expand all
554 // Nothing should have spilled yet; check oldest item is still there. 554 // Nothing should have spilled yet; check oldest item is still there.
555 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(1))); 555 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(1)));
556 } else { 556 } else {
557 const int evicted = i - kCacheSize; 557 const int evicted = i - kCacheSize;
558 EXPECT_FALSE(cache.FindPosition(CreateReferenceWifiScanData(evicted))); 558 EXPECT_FALSE(cache.FindPosition(CreateReferenceWifiScanData(evicted)));
559 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(evicted + 1))); 559 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(evicted + 1)));
560 } 560 }
561 } 561 }
562 } 562 }
563 563
564 TEST_F(GeolocationNetworkProviderTest, RequestLowAccuracyPosition) {
565 std::unique_ptr<LocationProvider> provider(CreateProvider(true));
566 EXPECT_TRUE(provider->StartProvider(false));
567 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
568 ASSERT_TRUE(fetcher);
569 EXPECT_TRUE(IsTestServerUrl(fetcher->GetOriginalURL()));
570 CheckRequestIsValid(*fetcher, 0, 0, 0, std::string());
571
572 // Send a reply with good position fix.
573 const char* kReferenceNetworkResponse =
574 "{"
575 " \"accessToken\": \"" REFERENCE_ACCESS_TOKEN
576 "\","
577 " \"accuracy\": 1200.4,"
578 " \"location\": {"
579 " \"lat\": 51.0,"
580 " \"lng\": -0.1"
581 " }"
582 "}";
583 fetcher->set_url(test_server_url_);
584 fetcher->set_status(net::URLRequestStatus());
585 fetcher->set_response_code(200); // OK
586 fetcher->SetResponseString(kReferenceNetworkResponse);
587 fetcher->delegate()->OnURLFetchComplete(fetcher);
588
589 Geoposition position = provider->GetPosition();
590 EXPECT_EQ(51.0, position.latitude);
591 EXPECT_EQ(-0.1, position.longitude);
592 EXPECT_EQ(1200.4, position.accuracy);
593 EXPECT_FALSE(position.timestamp.is_null());
594 EXPECT_TRUE(position.Validate());
595
596 // Wifi scans should not affect the provider and no new requests should be
597 // made.
598 wifi_data_provider_->SetData(CreateReferenceWifiScanData(5 /* ap_count */));
599 base::RunLoop().RunUntilIdle();
600 EXPECT_FALSE(get_url_fetcher_and_advance_id()); // No new request created.
601 }
602
564 } // namespace device 603 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698