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 "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" |
11 #include "base/values.h" | 11 #include "base/values.h" |
12 #include "content/browser/geolocation/fake_access_token_store.h" | 12 #include "content/browser/geolocation/fake_access_token_store.h" |
13 #include "content/browser/geolocation/network_location_provider.h" | 13 #include "content/browser/geolocation/network_location_provider.h" |
14 #include "content/public/test/test_url_fetcher_factory.h" | 14 #include "net/url_request/test_url_fetcher_factory.h" |
15 #include "net/url_request/url_request_status.h" | 15 #include "net/url_request/url_request_status.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
17 | 17 |
18 using content::FakeAccessTokenStore; | 18 using content::FakeAccessTokenStore; |
19 using content::Geoposition; | 19 using content::Geoposition; |
20 | 20 |
21 namespace { | 21 namespace { |
22 | 22 |
23 // Constants used in multiple tests. | 23 // Constants used in multiple tests. |
24 const char kTestServerUrl[] = "https://www.geolocation.test/service"; | 24 const char kTestServerUrl[] = "https://www.geolocation.test/service"; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 protected: | 151 protected: |
152 GeolocationNetworkProviderTest() : test_server_url_(kTestServerUrl) { | 152 GeolocationNetworkProviderTest() : test_server_url_(kTestServerUrl) { |
153 // TODO(joth): Really these should be in SetUp, not here, but they take no | 153 // TODO(joth): Really these should be in SetUp, not here, but they take no |
154 // effect on Mac OS Release builds if done there. I kid not. Figure out why. | 154 // effect on Mac OS Release builds if done there. I kid not. Figure out why. |
155 WifiDataProvider::SetFactory( | 155 WifiDataProvider::SetFactory( |
156 MockDeviceDataProviderImpl<WifiData>::GetInstance); | 156 MockDeviceDataProviderImpl<WifiData>::GetInstance); |
157 } | 157 } |
158 | 158 |
159 // Returns the current url fetcher (if any) and advances the id ready for the | 159 // Returns the current url fetcher (if any) and advances the id ready for the |
160 // next test step. | 160 // next test step. |
161 TestURLFetcher* get_url_fetcher_and_advance_id() { | 161 net::TestURLFetcher* get_url_fetcher_and_advance_id() { |
162 TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID( | 162 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID( |
163 NetworkLocationRequest::url_fetcher_id_for_tests); | 163 NetworkLocationRequest::url_fetcher_id_for_tests); |
164 if (fetcher) | 164 if (fetcher) |
165 ++NetworkLocationRequest::url_fetcher_id_for_tests; | 165 ++NetworkLocationRequest::url_fetcher_id_for_tests; |
166 return fetcher; | 166 return fetcher; |
167 } | 167 } |
168 | 168 |
169 static int IndexToChannel(int index) { return index + 4; } | 169 static int IndexToChannel(int index) { return index + 4; } |
170 | 170 |
171 // Creates wifi data containing the specified number of access points, with | 171 // Creates wifi data containing the specified number of access points, with |
172 // some differentiating charactistics in each. | 172 // some differentiating charactistics in each. |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 // SSID. | 260 // SSID. |
261 EXPECT_EQ(expected_wifi_tokens[5], actual_wifi_tokens[5]); | 261 EXPECT_EQ(expected_wifi_tokens[5], actual_wifi_tokens[5]); |
262 EXPECT_EQ(expected_wifi_tokens[6], actual_wifi_tokens[6]); | 262 EXPECT_EQ(expected_wifi_tokens[6], actual_wifi_tokens[6]); |
263 } | 263 } |
264 EXPECT_TRUE(GURL(request_url).is_valid()); | 264 EXPECT_TRUE(GURL(request_url).is_valid()); |
265 } | 265 } |
266 | 266 |
267 const GURL test_server_url_; | 267 const GURL test_server_url_; |
268 MessageLoop main_message_loop_; | 268 MessageLoop main_message_loop_; |
269 scoped_refptr<FakeAccessTokenStore> access_token_store_; | 269 scoped_refptr<FakeAccessTokenStore> access_token_store_; |
270 TestURLFetcherFactory url_fetcher_factory_; | 270 net::TestURLFetcherFactory url_fetcher_factory_; |
271 scoped_refptr<MockDeviceDataProviderImpl<WifiData> > wifi_data_provider_; | 271 scoped_refptr<MockDeviceDataProviderImpl<WifiData> > wifi_data_provider_; |
272 }; | 272 }; |
273 | 273 |
274 | 274 |
275 TEST_F(GeolocationNetworkProviderTest, CreateDestroy) { | 275 TEST_F(GeolocationNetworkProviderTest, CreateDestroy) { |
276 // Test fixture members were SetUp correctly. | 276 // Test fixture members were SetUp correctly. |
277 EXPECT_EQ(&main_message_loop_, MessageLoop::current()); | 277 EXPECT_EQ(&main_message_loop_, MessageLoop::current()); |
278 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); | 278 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); |
279 EXPECT_TRUE(NULL != provider.get()); | 279 EXPECT_TRUE(NULL != provider.get()); |
280 provider.reset(); | 280 provider.reset(); |
281 SUCCEED(); | 281 SUCCEED(); |
282 } | 282 } |
283 | 283 |
284 TEST_F(GeolocationNetworkProviderTest, StartProvider) { | 284 TEST_F(GeolocationNetworkProviderTest, StartProvider) { |
285 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); | 285 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); |
286 EXPECT_TRUE(provider->StartProvider(false)); | 286 EXPECT_TRUE(provider->StartProvider(false)); |
287 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 287 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
288 ASSERT_TRUE(fetcher != NULL); | 288 ASSERT_TRUE(fetcher != NULL); |
289 | 289 |
290 EXPECT_EQ(test_server_url_.spec() + kTestJson, | 290 EXPECT_EQ(test_server_url_.spec() + kTestJson, |
291 fetcher->GetOriginalURL().spec()); | 291 fetcher->GetOriginalURL().spec()); |
292 | 292 |
293 CheckRequestIsValid(fetcher->GetOriginalURL().spec(), 0, 0, 0, ""); | 293 CheckRequestIsValid(fetcher->GetOriginalURL().spec(), 0, 0, 0, ""); |
294 } | 294 } |
295 | 295 |
296 TEST_F(GeolocationNetworkProviderTest, StartProviderLongRequest) { | 296 TEST_F(GeolocationNetworkProviderTest, StartProviderLongRequest) { |
297 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); | 297 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); |
298 EXPECT_TRUE(provider->StartProvider(false)); | 298 EXPECT_TRUE(provider->StartProvider(false)); |
299 const int kFirstScanAps = 20; | 299 const int kFirstScanAps = 20; |
300 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps)); | 300 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps)); |
301 main_message_loop_.RunAllPending(); | 301 main_message_loop_.RunAllPending(); |
302 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 302 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
303 ASSERT_TRUE(fetcher != NULL); | 303 ASSERT_TRUE(fetcher != NULL); |
304 // The request url should have been shortened to less than 2048 characters | 304 // The request url should have been shortened to less than 2048 characters |
305 // in length by not including access points with the lowest signal strength | 305 // in length by not including access points with the lowest signal strength |
306 // in the request. | 306 // in the request. |
307 EXPECT_LT(fetcher->GetOriginalURL().spec().size(), size_t(2048)); | 307 EXPECT_LT(fetcher->GetOriginalURL().spec().size(), size_t(2048)); |
308 CheckRequestIsValid(fetcher->GetOriginalURL().spec(), 0, 16, 4, ""); | 308 CheckRequestIsValid(fetcher->GetOriginalURL().spec(), 0, 16, 4, ""); |
309 } | 309 } |
310 | 310 |
311 TEST_F(GeolocationNetworkProviderTest, MultiRegistrations) { | 311 TEST_F(GeolocationNetworkProviderTest, MultiRegistrations) { |
312 // TODO(joth): Strictly belongs in a base-class unit test file. | 312 // TODO(joth): Strictly belongs in a base-class unit test file. |
313 MessageLoopQuitListener listener; | 313 MessageLoopQuitListener listener; |
314 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); | 314 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); |
315 EXPECT_FALSE(provider->has_listeners()); | 315 EXPECT_FALSE(provider->has_listeners()); |
316 provider->RegisterListener(&listener); | 316 provider->RegisterListener(&listener); |
317 EXPECT_TRUE(provider->has_listeners()); | 317 EXPECT_TRUE(provider->has_listeners()); |
318 provider->RegisterListener(&listener); | 318 provider->RegisterListener(&listener); |
319 EXPECT_TRUE(provider->has_listeners()); | 319 EXPECT_TRUE(provider->has_listeners()); |
320 | 320 |
321 provider->UnregisterListener(&listener); | 321 provider->UnregisterListener(&listener); |
322 EXPECT_TRUE(provider->has_listeners()); | 322 EXPECT_TRUE(provider->has_listeners()); |
323 provider->UnregisterListener(&listener); | 323 provider->UnregisterListener(&listener); |
324 EXPECT_FALSE(provider->has_listeners()); | 324 EXPECT_FALSE(provider->has_listeners()); |
325 } | 325 } |
326 | 326 |
327 TEST_F(GeolocationNetworkProviderTest, MultipleWifiScansComplete) { | 327 TEST_F(GeolocationNetworkProviderTest, MultipleWifiScansComplete) { |
328 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); | 328 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); |
329 EXPECT_TRUE(provider->StartProvider(false)); | 329 EXPECT_TRUE(provider->StartProvider(false)); |
330 | 330 |
331 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 331 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
332 ASSERT_TRUE(fetcher != NULL); | 332 ASSERT_TRUE(fetcher != NULL); |
333 EXPECT_EQ(test_server_url_.spec() + kTestJson, | 333 EXPECT_EQ(test_server_url_.spec() + kTestJson, |
334 fetcher->GetOriginalURL().spec()); | 334 fetcher->GetOriginalURL().spec()); |
335 | 335 |
336 // Complete the network request with bad position fix. | 336 // Complete the network request with bad position fix. |
337 const char* kNoFixNetworkResponse = | 337 const char* kNoFixNetworkResponse = |
338 "{" | 338 "{" |
339 " \"status\": \"ZERO_RESULTS\"" | 339 " \"status\": \"ZERO_RESULTS\"" |
340 "}"; | 340 "}"; |
341 fetcher->set_url(test_server_url_); | 341 fetcher->set_url(test_server_url_); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 | 445 |
446 wifi_data_provider_->SetData(CreateReferenceWifiScanData(1)); | 446 wifi_data_provider_->SetData(CreateReferenceWifiScanData(1)); |
447 main_message_loop_.RunAllPending(); | 447 main_message_loop_.RunAllPending(); |
448 EXPECT_TRUE(get_url_fetcher_and_advance_id()); | 448 EXPECT_TRUE(get_url_fetcher_and_advance_id()); |
449 } | 449 } |
450 | 450 |
451 TEST_F(GeolocationNetworkProviderTest, NewDataReplacesExistingNetworkRequest) { | 451 TEST_F(GeolocationNetworkProviderTest, NewDataReplacesExistingNetworkRequest) { |
452 // Send initial request with empty device data | 452 // Send initial request with empty device data |
453 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); | 453 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); |
454 EXPECT_TRUE(provider->StartProvider(false)); | 454 EXPECT_TRUE(provider->StartProvider(false)); |
455 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 455 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
456 EXPECT_TRUE(fetcher); | 456 EXPECT_TRUE(fetcher); |
457 | 457 |
458 // Now wifi data arrives; new request should be sent. | 458 // Now wifi data arrives; new request should be sent. |
459 wifi_data_provider_->SetData(CreateReferenceWifiScanData(4)); | 459 wifi_data_provider_->SetData(CreateReferenceWifiScanData(4)); |
460 main_message_loop_.RunAllPending(); | 460 main_message_loop_.RunAllPending(); |
461 fetcher = get_url_fetcher_and_advance_id(); | 461 fetcher = get_url_fetcher_and_advance_id(); |
462 EXPECT_TRUE(fetcher); | 462 EXPECT_TRUE(fetcher); |
463 } | 463 } |
464 | 464 |
465 TEST_F(GeolocationNetworkProviderTest, NetworkRequestDeferredForPermission) { | 465 TEST_F(GeolocationNetworkProviderTest, NetworkRequestDeferredForPermission) { |
466 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); | 466 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); |
467 EXPECT_TRUE(provider->StartProvider(false)); | 467 EXPECT_TRUE(provider->StartProvider(false)); |
468 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 468 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
469 EXPECT_FALSE(fetcher); | 469 EXPECT_FALSE(fetcher); |
470 provider->OnPermissionGranted(); | 470 provider->OnPermissionGranted(); |
471 | 471 |
472 fetcher = get_url_fetcher_and_advance_id(); | 472 fetcher = get_url_fetcher_and_advance_id(); |
473 ASSERT_TRUE(fetcher != NULL); | 473 ASSERT_TRUE(fetcher != NULL); |
474 | 474 |
475 EXPECT_EQ(test_server_url_.spec() + kTestJson, | 475 EXPECT_EQ(test_server_url_.spec() + kTestJson, |
476 fetcher->GetOriginalURL().spec()); | 476 fetcher->GetOriginalURL().spec()); |
477 } | 477 } |
478 | 478 |
479 TEST_F(GeolocationNetworkProviderTest, | 479 TEST_F(GeolocationNetworkProviderTest, |
480 NetworkRequestWithWifiDataDeferredForPermission) { | 480 NetworkRequestWithWifiDataDeferredForPermission) { |
481 access_token_store_->access_token_set_[test_server_url_] = | 481 access_token_store_->access_token_set_[test_server_url_] = |
482 UTF8ToUTF16(REFERENCE_ACCESS_TOKEN); | 482 UTF8ToUTF16(REFERENCE_ACCESS_TOKEN); |
483 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); | 483 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); |
484 EXPECT_TRUE(provider->StartProvider(false)); | 484 EXPECT_TRUE(provider->StartProvider(false)); |
485 TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); | 485 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); |
486 EXPECT_FALSE(fetcher); | 486 EXPECT_FALSE(fetcher); |
487 | 487 |
488 static const int kScanCount = 4; | 488 static const int kScanCount = 4; |
489 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kScanCount)); | 489 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kScanCount)); |
490 main_message_loop_.RunAllPending(); | 490 main_message_loop_.RunAllPending(); |
491 | 491 |
492 fetcher = get_url_fetcher_and_advance_id(); | 492 fetcher = get_url_fetcher_and_advance_id(); |
493 EXPECT_FALSE(fetcher); | 493 EXPECT_FALSE(fetcher); |
494 | 494 |
495 provider->OnPermissionGranted(); | 495 provider->OnPermissionGranted(); |
(...skipping 23 matching lines...) Expand all Loading... |
519 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(1))); | 519 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(1))); |
520 } else { | 520 } else { |
521 const int evicted = i - kCacheSize; | 521 const int evicted = i - kCacheSize; |
522 EXPECT_FALSE(cache.FindPosition(CreateReferenceWifiScanData(evicted))); | 522 EXPECT_FALSE(cache.FindPosition(CreateReferenceWifiScanData(evicted))); |
523 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(evicted + 1))); | 523 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(evicted + 1))); |
524 } | 524 } |
525 } | 525 } |
526 } | 526 } |
527 | 527 |
528 } // namespace | 528 } // namespace |
OLD | NEW |