| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/json/json_reader.h" | 5 #include "base/json/json_reader.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/string_number_conversions.h" | 7 #include "base/string_number_conversions.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 SUCCEED(); | 279 SUCCEED(); |
| 280 } | 280 } |
| 281 | 281 |
| 282 TEST_F(GeolocationNetworkProviderTest, StartProvider) { | 282 TEST_F(GeolocationNetworkProviderTest, StartProvider) { |
| 283 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); | 283 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); |
| 284 EXPECT_TRUE(provider->StartProvider(false)); | 284 EXPECT_TRUE(provider->StartProvider(false)); |
| 285 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 285 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
| 286 ASSERT_TRUE(fetcher != NULL); | 286 ASSERT_TRUE(fetcher != NULL); |
| 287 | 287 |
| 288 EXPECT_EQ(test_server_url_.spec() + kTestJson, | 288 EXPECT_EQ(test_server_url_.spec() + kTestJson, |
| 289 fetcher->original_url().spec()); | 289 fetcher->GetOriginalUrl().spec()); |
| 290 | 290 |
| 291 CheckRequestIsValid(fetcher->original_url().spec(), 0, 0, 0, ""); | 291 CheckRequestIsValid(fetcher->GetOriginalUrl().spec(), 0, 0, 0, ""); |
| 292 } | 292 } |
| 293 | 293 |
| 294 TEST_F(GeolocationNetworkProviderTest, StartProviderLongRequest) { | 294 TEST_F(GeolocationNetworkProviderTest, StartProviderLongRequest) { |
| 295 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); | 295 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); |
| 296 EXPECT_TRUE(provider->StartProvider(false)); | 296 EXPECT_TRUE(provider->StartProvider(false)); |
| 297 const int kFirstScanAps = 20; | 297 const int kFirstScanAps = 20; |
| 298 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps)); | 298 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps)); |
| 299 main_message_loop_.RunAllPending(); | 299 main_message_loop_.RunAllPending(); |
| 300 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 300 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
| 301 ASSERT_TRUE(fetcher != NULL); | 301 ASSERT_TRUE(fetcher != NULL); |
| 302 // The request url should have been shortened to less than 2048 characters | 302 // The request url should have been shortened to less than 2048 characters |
| 303 // in length by not including access points with the lowest signal strength | 303 // in length by not including access points with the lowest signal strength |
| 304 // in the request. | 304 // in the request. |
| 305 EXPECT_LT(fetcher->original_url().spec().size(), size_t(2048)); | 305 EXPECT_LT(fetcher->GetOriginalUrl().spec().size(), size_t(2048)); |
| 306 CheckRequestIsValid(fetcher->original_url().spec(), 0, 16, 4, ""); | 306 CheckRequestIsValid(fetcher->GetOriginalUrl().spec(), 0, 16, 4, ""); |
| 307 } | 307 } |
| 308 | 308 |
| 309 TEST_F(GeolocationNetworkProviderTest, MultipleStartProvider) { | 309 TEST_F(GeolocationNetworkProviderTest, MultipleStartProvider) { |
| 310 scoped_ptr<LocationProviderBase> provider_1(CreateProvider(true)); | 310 scoped_ptr<LocationProviderBase> provider_1(CreateProvider(true)); |
| 311 scoped_ptr<LocationProviderBase> provider_2(CreateProvider(true)); | 311 scoped_ptr<LocationProviderBase> provider_2(CreateProvider(true)); |
| 312 ASSERT_TRUE(radio_data_provider_); | 312 ASSERT_TRUE(radio_data_provider_); |
| 313 ASSERT_TRUE(wifi_data_provider_); | 313 ASSERT_TRUE(wifi_data_provider_); |
| 314 EXPECT_EQ(0, radio_data_provider_->start_calls_); | 314 EXPECT_EQ(0, radio_data_provider_->start_calls_); |
| 315 EXPECT_EQ(0, wifi_data_provider_->start_calls_); | 315 EXPECT_EQ(0, wifi_data_provider_->start_calls_); |
| 316 EXPECT_EQ(0, radio_data_provider_->stop_calls_); | 316 EXPECT_EQ(0, radio_data_provider_->stop_calls_); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 EXPECT_FALSE(provider->has_listeners()); | 351 EXPECT_FALSE(provider->has_listeners()); |
| 352 } | 352 } |
| 353 | 353 |
| 354 TEST_F(GeolocationNetworkProviderTest, MultipleWifiScansComplete) { | 354 TEST_F(GeolocationNetworkProviderTest, MultipleWifiScansComplete) { |
| 355 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); | 355 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); |
| 356 EXPECT_TRUE(provider->StartProvider(false)); | 356 EXPECT_TRUE(provider->StartProvider(false)); |
| 357 | 357 |
| 358 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 358 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
| 359 ASSERT_TRUE(fetcher != NULL); | 359 ASSERT_TRUE(fetcher != NULL); |
| 360 EXPECT_EQ(test_server_url_.spec() + kTestJson, | 360 EXPECT_EQ(test_server_url_.spec() + kTestJson, |
| 361 fetcher->original_url().spec()); | 361 fetcher->GetOriginalUrl().spec()); |
| 362 | 362 |
| 363 // Complete the network request with bad position fix. | 363 // Complete the network request with bad position fix. |
| 364 const char* kNoFixNetworkResponse = | 364 const char* kNoFixNetworkResponse = |
| 365 "{" | 365 "{" |
| 366 " \"status\": \"ZERO_RESULTS\"" | 366 " \"status\": \"ZERO_RESULTS\"" |
| 367 "}"; | 367 "}"; |
| 368 fetcher->set_url(test_server_url_); | 368 fetcher->set_url(test_server_url_); |
| 369 fetcher->set_status(net::URLRequestStatus()); | 369 fetcher->set_status(net::URLRequestStatus()); |
| 370 fetcher->set_response_code(200); // OK | 370 fetcher->set_response_code(200); // OK |
| 371 fetcher->SetResponseString(kNoFixNetworkResponse); | 371 fetcher->SetResponseString(kNoFixNetworkResponse); |
| 372 fetcher->delegate()->OnURLFetchComplete(fetcher); | 372 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 373 | 373 |
| 374 Geoposition position; | 374 Geoposition position; |
| 375 provider->GetPosition(&position); | 375 provider->GetPosition(&position); |
| 376 EXPECT_FALSE(position.IsValidFix()); | 376 EXPECT_FALSE(position.IsValidFix()); |
| 377 | 377 |
| 378 // Now wifi data arrives -- SetData will notify listeners. | 378 // Now wifi data arrives -- SetData will notify listeners. |
| 379 const int kFirstScanAps = 6; | 379 const int kFirstScanAps = 6; |
| 380 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps)); | 380 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps)); |
| 381 main_message_loop_.RunAllPending(); | 381 main_message_loop_.RunAllPending(); |
| 382 fetcher = get_url_fetcher_and_advance_id(); | 382 fetcher = get_url_fetcher_and_advance_id(); |
| 383 ASSERT_TRUE(fetcher != NULL); | 383 ASSERT_TRUE(fetcher != NULL); |
| 384 // The request should have the wifi data. | 384 // The request should have the wifi data. |
| 385 CheckRequestIsValid(fetcher->original_url().spec(), 0, kFirstScanAps, 0, ""); | 385 CheckRequestIsValid( |
| 386 fetcher->GetOriginalUrl().spec(), 0, kFirstScanAps, 0, ""); |
| 386 | 387 |
| 387 // Send a reply with good position fix. | 388 // Send a reply with good position fix. |
| 388 const char* kReferenceNetworkResponse = | 389 const char* kReferenceNetworkResponse = |
| 389 "{" | 390 "{" |
| 390 " \"status\": \"OK\"," | 391 " \"status\": \"OK\"," |
| 391 " \"access_token\": \"" REFERENCE_ACCESS_TOKEN "\"," | 392 " \"access_token\": \"" REFERENCE_ACCESS_TOKEN "\"," |
| 392 " \"accuracy\": 1200.4," | 393 " \"accuracy\": 1200.4," |
| 393 " \"location\": {" | 394 " \"location\": {" |
| 394 " \"lat\": 51.0," | 395 " \"lat\": 51.0," |
| 395 " \"lng\": -0.1" | 396 " \"lng\": -0.1" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 424 EXPECT_EQ(51.0, position.latitude); | 425 EXPECT_EQ(51.0, position.latitude); |
| 425 EXPECT_EQ(-0.1, position.longitude); | 426 EXPECT_EQ(-0.1, position.longitude); |
| 426 EXPECT_TRUE(position.IsValidFix()); | 427 EXPECT_TRUE(position.IsValidFix()); |
| 427 | 428 |
| 428 // Now a third scan with more than twice the original amount -> new request. | 429 // Now a third scan with more than twice the original amount -> new request. |
| 429 const int kThirdScanAps = kFirstScanAps * 2 + 1; | 430 const int kThirdScanAps = kFirstScanAps * 2 + 1; |
| 430 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kThirdScanAps)); | 431 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kThirdScanAps)); |
| 431 main_message_loop_.RunAllPending(); | 432 main_message_loop_.RunAllPending(); |
| 432 fetcher = get_url_fetcher_and_advance_id(); | 433 fetcher = get_url_fetcher_and_advance_id(); |
| 433 EXPECT_TRUE(fetcher); | 434 EXPECT_TRUE(fetcher); |
| 434 CheckRequestIsValid(fetcher->original_url().spec(), 0, | 435 CheckRequestIsValid(fetcher->GetOriginalUrl().spec(), 0, |
| 435 kThirdScanAps, 0, | 436 kThirdScanAps, 0, |
| 436 REFERENCE_ACCESS_TOKEN); | 437 REFERENCE_ACCESS_TOKEN); |
| 437 // ...reply with a network error. | 438 // ...reply with a network error. |
| 438 | 439 |
| 439 fetcher->set_url(test_server_url_); | 440 fetcher->set_url(test_server_url_); |
| 440 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, -1)); | 441 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, -1)); |
| 441 fetcher->set_response_code(200); // should be ignored | 442 fetcher->set_response_code(200); // should be ignored |
| 442 fetcher->SetResponseString(""); | 443 fetcher->SetResponseString(""); |
| 443 fetcher->delegate()->OnURLFetchComplete(fetcher); | 444 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 444 | 445 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); | 494 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); |
| 494 EXPECT_TRUE(provider->StartProvider(false)); | 495 EXPECT_TRUE(provider->StartProvider(false)); |
| 495 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 496 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
| 496 EXPECT_FALSE(fetcher); | 497 EXPECT_FALSE(fetcher); |
| 497 provider->OnPermissionGranted(GURL(kTestHostUrl)); | 498 provider->OnPermissionGranted(GURL(kTestHostUrl)); |
| 498 | 499 |
| 499 fetcher = get_url_fetcher_and_advance_id(); | 500 fetcher = get_url_fetcher_and_advance_id(); |
| 500 ASSERT_TRUE(fetcher != NULL); | 501 ASSERT_TRUE(fetcher != NULL); |
| 501 | 502 |
| 502 EXPECT_EQ(test_server_url_.spec() + kTestJson, | 503 EXPECT_EQ(test_server_url_.spec() + kTestJson, |
| 503 fetcher->original_url().spec()); | 504 fetcher->GetOriginalUrl().spec()); |
| 504 } | 505 } |
| 505 | 506 |
| 506 TEST_F(GeolocationNetworkProviderTest, | 507 TEST_F(GeolocationNetworkProviderTest, |
| 507 NetworkRequestWithWifiDataDeferredForPermission) { | 508 NetworkRequestWithWifiDataDeferredForPermission) { |
| 508 access_token_store_->access_token_set_[test_server_url_] = | 509 access_token_store_->access_token_set_[test_server_url_] = |
| 509 UTF8ToUTF16(REFERENCE_ACCESS_TOKEN); | 510 UTF8ToUTF16(REFERENCE_ACCESS_TOKEN); |
| 510 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); | 511 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); |
| 511 EXPECT_TRUE(provider->StartProvider(false)); | 512 EXPECT_TRUE(provider->StartProvider(false)); |
| 512 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 513 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
| 513 EXPECT_FALSE(fetcher); | 514 EXPECT_FALSE(fetcher); |
| 514 | 515 |
| 515 static const int kScanCount = 4; | 516 static const int kScanCount = 4; |
| 516 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kScanCount)); | 517 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kScanCount)); |
| 517 main_message_loop_.RunAllPending(); | 518 main_message_loop_.RunAllPending(); |
| 518 | 519 |
| 519 fetcher = get_url_fetcher_and_advance_id(); | 520 fetcher = get_url_fetcher_and_advance_id(); |
| 520 EXPECT_FALSE(fetcher); | 521 EXPECT_FALSE(fetcher); |
| 521 | 522 |
| 522 provider->OnPermissionGranted(GURL(kTestHostUrl)); | 523 provider->OnPermissionGranted(GURL(kTestHostUrl)); |
| 523 | 524 |
| 524 fetcher = get_url_fetcher_and_advance_id(); | 525 fetcher = get_url_fetcher_and_advance_id(); |
| 525 ASSERT_TRUE(fetcher != NULL); | 526 ASSERT_TRUE(fetcher != NULL); |
| 526 | 527 |
| 527 CheckRequestIsValid(fetcher->original_url().spec(), 0, | 528 CheckRequestIsValid(fetcher->GetOriginalUrl().spec(), 0, |
| 528 kScanCount, 0, REFERENCE_ACCESS_TOKEN); | 529 kScanCount, 0, REFERENCE_ACCESS_TOKEN); |
| 529 } | 530 } |
| 530 | 531 |
| 531 TEST_F(GeolocationNetworkProviderTest, NetworkPositionCache) { | 532 TEST_F(GeolocationNetworkProviderTest, NetworkPositionCache) { |
| 532 NetworkLocationProvider::PositionCache cache; | 533 NetworkLocationProvider::PositionCache cache; |
| 533 | 534 |
| 534 const int kCacheSize = NetworkLocationProvider::PositionCache::kMaximumSize; | 535 const int kCacheSize = NetworkLocationProvider::PositionCache::kMaximumSize; |
| 535 for (int i = 1; i < kCacheSize * 2 + 1; ++i) { | 536 for (int i = 1; i < kCacheSize * 2 + 1; ++i) { |
| 536 Geoposition pos = CreateReferencePosition(i); | 537 Geoposition pos = CreateReferencePosition(i); |
| 537 bool ret = cache.CachePosition(CreateReferenceWifiScanData(i), pos); | 538 bool ret = cache.CachePosition(CreateReferenceWifiScanData(i), pos); |
| 538 EXPECT_TRUE(ret) << i; | 539 EXPECT_TRUE(ret) << i; |
| 539 const Geoposition* item = | 540 const Geoposition* item = |
| 540 cache.FindPosition(CreateReferenceWifiScanData(i)); | 541 cache.FindPosition(CreateReferenceWifiScanData(i)); |
| 541 ASSERT_TRUE(item) << i; | 542 ASSERT_TRUE(item) << i; |
| 542 EXPECT_EQ(pos.latitude, item->latitude) << i; | 543 EXPECT_EQ(pos.latitude, item->latitude) << i; |
| 543 EXPECT_EQ(pos.longitude, item->longitude) << i; | 544 EXPECT_EQ(pos.longitude, item->longitude) << i; |
| 544 if (i <= kCacheSize) { | 545 if (i <= kCacheSize) { |
| 545 // Nothing should have spilled yet; check oldest item is still there. | 546 // Nothing should have spilled yet; check oldest item is still there. |
| 546 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(1))); | 547 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(1))); |
| 547 } else { | 548 } else { |
| 548 const int evicted = i - kCacheSize; | 549 const int evicted = i - kCacheSize; |
| 549 EXPECT_FALSE(cache.FindPosition(CreateReferenceWifiScanData(evicted))); | 550 EXPECT_FALSE(cache.FindPosition(CreateReferenceWifiScanData(evicted))); |
| 550 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(evicted + 1))); | 551 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(evicted + 1))); |
| 551 } | 552 } |
| 552 } | 553 } |
| 553 } | 554 } |
| 554 | 555 |
| 555 } // namespace | 556 } // namespace |
| OLD | NEW |