| 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 "chrome/browser/captive_portal/captive_portal_service.h" | 5 #include "chrome/browser/captive_portal/captive_portal_service.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| 11 #include "base/test/test_timeouts.h" | 11 #include "base/test/test_timeouts.h" |
| 12 #include "chrome/browser/captive_portal/testing_utils.h" | 12 #include "chrome/browser/captive_portal/testing_utils.h" |
| 13 #include "chrome/browser/prefs/pref_service.h" | 13 #include "chrome/browser/prefs/pref_service.h" |
| 14 #include "chrome/common/chrome_notification_types.h" | 14 #include "chrome/common/chrome_notification_types.h" |
| 15 #include "chrome/common/chrome_switches.h" | 15 #include "chrome/common/chrome_switches.h" |
| 16 #include "chrome/common/pref_names.h" | 16 #include "chrome/common/pref_names.h" |
| 17 #include "chrome/test/base/testing_profile.h" | 17 #include "chrome/test/base/testing_profile.h" |
| 18 #include "chrome/test/base/ui_test_utils.h" | 18 #include "chrome/test/base/ui_test_utils.h" |
| 19 #include "content/public/browser/notification_details.h" | 19 #include "content/public/browser/notification_details.h" |
| 20 #include "content/public/browser/notification_observer.h" | 20 #include "content/public/browser/notification_observer.h" |
| 21 #include "content/public/browser/notification_registrar.h" | 21 #include "content/public/browser/notification_registrar.h" |
| 22 #include "content/public/browser/notification_source.h" | 22 #include "content/public/browser/notification_source.h" |
| 23 #include "net/base/net_errors.h" | 23 #include "net/base/net_errors.h" |
| 24 #include "net/http/http_response_headers.h" | |
| 25 #include "net/url_request/test_url_fetcher_factory.h" | |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
| 27 | 25 |
| 28 namespace captive_portal { | 26 namespace captive_portal { |
| 29 | 27 |
| 30 namespace { | 28 namespace { |
| 31 | 29 |
| 32 // A short amount of time that some tests wait for. | 30 // A short amount of time that some tests wait for. |
| 33 const int kShortTimeMs = 10; | 31 const int kShortTimeMs = 10; |
| 34 | 32 |
| 35 // An observer watches the CaptivePortalDetector. It tracks the last | 33 // An observer watches the CaptivePortalDetector. It tracks the last |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 base::TimeDelta expected_delay = | 154 base::TimeDelta expected_delay = |
| 157 base::TimeDelta::FromSeconds(expected_delay_secs); | 155 base::TimeDelta::FromSeconds(expected_delay_secs); |
| 158 | 156 |
| 159 ASSERT_EQ(CaptivePortalService::STATE_IDLE, service()->state()); | 157 ASSERT_EQ(CaptivePortalService::STATE_IDLE, service()->state()); |
| 160 ASSERT_EQ(expected_delay, GetTimeUntilNextRequest()); | 158 ASSERT_EQ(expected_delay, GetTimeUntilNextRequest()); |
| 161 | 159 |
| 162 AdvanceTime(expected_delay); | 160 AdvanceTime(expected_delay); |
| 163 ASSERT_EQ(base::TimeDelta(), GetTimeUntilNextRequest()); | 161 ASSERT_EQ(base::TimeDelta(), GetTimeUntilNextRequest()); |
| 164 | 162 |
| 165 CaptivePortalObserver observer(profile(), service()); | 163 CaptivePortalObserver observer(profile(), service()); |
| 166 net::TestURLFetcherFactory factory; | |
| 167 service()->DetectCaptivePortal(); | 164 service()->DetectCaptivePortal(); |
| 168 | 165 |
| 169 EXPECT_EQ(CaptivePortalService::STATE_TIMER_RUNNING, service()->state()); | 166 EXPECT_EQ(CaptivePortalService::STATE_TIMER_RUNNING, service()->state()); |
| 170 EXPECT_FALSE(FetchingURL()); | 167 EXPECT_FALSE(FetchingURL()); |
| 171 ASSERT_TRUE(TimerRunning()); | 168 ASSERT_TRUE(TimerRunning()); |
| 172 | 169 |
| 173 MessageLoop::current()->RunUntilIdle(); | 170 MessageLoop::current()->RunUntilIdle(); |
| 174 EXPECT_EQ(CaptivePortalService::STATE_CHECKING_FOR_PORTAL, | 171 EXPECT_EQ(CaptivePortalService::STATE_CHECKING_FOR_PORTAL, |
| 175 service()->state()); | 172 service()->state()); |
| 176 ASSERT_TRUE(FetchingURL()); | 173 ASSERT_TRUE(FetchingURL()); |
| 177 EXPECT_FALSE(TimerRunning()); | 174 EXPECT_FALSE(TimerRunning()); |
| 178 | 175 |
| 179 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); | 176 CompleteURLFetch(net_error, status_code, response_headers); |
| 180 if (net_error != net::OK) { | |
| 181 EXPECT_FALSE(response_headers); | |
| 182 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, | |
| 183 net_error)); | |
| 184 } else { | |
| 185 fetcher->set_response_code(status_code); | |
| 186 if (response_headers) { | |
| 187 scoped_refptr<net::HttpResponseHeaders> headers( | |
| 188 CreateResponseHeaders(response_headers)); | |
| 189 // Sanity check. | |
| 190 EXPECT_EQ(status_code, headers->response_code()); | |
| 191 fetcher->set_response_headers(headers); | |
| 192 } | |
| 193 } | |
| 194 | |
| 195 OnURLFetchComplete(fetcher); | |
| 196 | 177 |
| 197 EXPECT_FALSE(FetchingURL()); | 178 EXPECT_FALSE(FetchingURL()); |
| 198 EXPECT_FALSE(TimerRunning()); | 179 EXPECT_FALSE(TimerRunning()); |
| 199 EXPECT_EQ(1, observer.num_results_received()); | 180 EXPECT_EQ(1, observer.num_results_received()); |
| 200 EXPECT_EQ(expected_result, observer.captive_portal_result()); | 181 EXPECT_EQ(expected_result, observer.captive_portal_result()); |
| 201 } | 182 } |
| 202 | 183 |
| 203 // Runs a test when the captive portal service is disabled. | 184 // Runs a test when the captive portal service is disabled. |
| 204 void RunDisabledTest(int expected_delay_secs) { | 185 void RunDisabledTest(int expected_delay_secs) { |
| 205 base::TimeDelta expected_delay = | 186 base::TimeDelta expected_delay = |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 RunTest(RESULT_BEHIND_CAPTIVE_PORTAL, net::OK, 200, 0, NULL); | 363 RunTest(RESULT_BEHIND_CAPTIVE_PORTAL, net::OK, 200, 0, NULL); |
| 383 } | 364 } |
| 384 | 365 |
| 385 // Check that disabling the captive portal service while a check is running | 366 // Check that disabling the captive portal service while a check is running |
| 386 // works. | 367 // works. |
| 387 TEST_F(CaptivePortalServiceTest, CaptivePortalPrefDisabledWhileRunning) { | 368 TEST_F(CaptivePortalServiceTest, CaptivePortalPrefDisabledWhileRunning) { |
| 388 Initialize(CaptivePortalService::SKIP_OS_CHECK_FOR_TESTING); | 369 Initialize(CaptivePortalService::SKIP_OS_CHECK_FOR_TESTING); |
| 389 CaptivePortalObserver observer(profile(), service()); | 370 CaptivePortalObserver observer(profile(), service()); |
| 390 | 371 |
| 391 // Needed to create the URLFetcher, even if it never returns any results. | 372 // Needed to create the URLFetcher, even if it never returns any results. |
| 392 net::TestURLFetcherFactory factory; | |
| 393 service()->DetectCaptivePortal(); | 373 service()->DetectCaptivePortal(); |
| 394 | 374 |
| 395 MessageLoop::current()->RunUntilIdle(); | 375 MessageLoop::current()->RunUntilIdle(); |
| 396 EXPECT_TRUE(FetchingURL()); | 376 EXPECT_TRUE(FetchingURL()); |
| 397 EXPECT_FALSE(TimerRunning()); | 377 EXPECT_FALSE(TimerRunning()); |
| 398 | 378 |
| 399 EnableCaptivePortalDetectionPreference(false); | 379 EnableCaptivePortalDetectionPreference(false); |
| 400 EXPECT_FALSE(FetchingURL()); | 380 EXPECT_FALSE(FetchingURL()); |
| 401 EXPECT_TRUE(TimerRunning()); | 381 EXPECT_TRUE(TimerRunning()); |
| 402 EXPECT_EQ(0, observer.num_results_received()); | 382 EXPECT_EQ(0, observer.num_results_received()); |
| 403 | 383 |
| 404 MessageLoop::current()->RunUntilIdle(); | 384 MessageLoop::current()->RunUntilIdle(); |
| 405 | 385 |
| 406 EXPECT_FALSE(FetchingURL()); | 386 EXPECT_FALSE(FetchingURL()); |
| 407 EXPECT_FALSE(TimerRunning()); | 387 EXPECT_FALSE(TimerRunning()); |
| 408 EXPECT_EQ(1, observer.num_results_received()); | 388 EXPECT_EQ(1, observer.num_results_received()); |
| 409 | 389 |
| 410 EXPECT_EQ(RESULT_INTERNET_CONNECTED, observer.captive_portal_result()); | 390 EXPECT_EQ(RESULT_INTERNET_CONNECTED, observer.captive_portal_result()); |
| 411 } | 391 } |
| 412 | 392 |
| 413 // Check that disabling the captive portal service while a check is pending | 393 // Check that disabling the captive portal service while a check is pending |
| 414 // works. | 394 // works. |
| 415 TEST_F(CaptivePortalServiceTest, CaptivePortalPrefDisabledWhilePending) { | 395 TEST_F(CaptivePortalServiceTest, CaptivePortalPrefDisabledWhilePending) { |
| 416 Initialize(CaptivePortalService::SKIP_OS_CHECK_FOR_TESTING); | 396 Initialize(CaptivePortalService::SKIP_OS_CHECK_FOR_TESTING); |
| 417 set_initial_backoff_no_portal(base::TimeDelta::FromDays(1)); | 397 set_initial_backoff_no_portal(base::TimeDelta::FromDays(1)); |
| 418 | 398 |
| 419 // Needed to create the URLFetcher, even if it never returns any results. | |
| 420 net::TestURLFetcherFactory factory; | |
| 421 | |
| 422 CaptivePortalObserver observer(profile(), service()); | 399 CaptivePortalObserver observer(profile(), service()); |
| 423 service()->DetectCaptivePortal(); | 400 service()->DetectCaptivePortal(); |
| 424 EXPECT_FALSE(FetchingURL()); | 401 EXPECT_FALSE(FetchingURL()); |
| 425 EXPECT_TRUE(TimerRunning()); | 402 EXPECT_TRUE(TimerRunning()); |
| 426 | 403 |
| 427 EnableCaptivePortalDetectionPreference(false); | 404 EnableCaptivePortalDetectionPreference(false); |
| 428 EXPECT_FALSE(FetchingURL()); | 405 EXPECT_FALSE(FetchingURL()); |
| 429 EXPECT_TRUE(TimerRunning()); | 406 EXPECT_TRUE(TimerRunning()); |
| 430 EXPECT_EQ(0, observer.num_results_received()); | 407 EXPECT_EQ(0, observer.num_results_received()); |
| 431 | 408 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 444 Initialize(CaptivePortalService::SKIP_OS_CHECK_FOR_TESTING); | 421 Initialize(CaptivePortalService::SKIP_OS_CHECK_FOR_TESTING); |
| 445 | 422 |
| 446 EnableCaptivePortalDetectionPreference(false); | 423 EnableCaptivePortalDetectionPreference(false); |
| 447 RunDisabledTest(0); | 424 RunDisabledTest(0); |
| 448 | 425 |
| 449 CaptivePortalObserver observer(profile(), service()); | 426 CaptivePortalObserver observer(profile(), service()); |
| 450 service()->DetectCaptivePortal(); | 427 service()->DetectCaptivePortal(); |
| 451 EXPECT_FALSE(FetchingURL()); | 428 EXPECT_FALSE(FetchingURL()); |
| 452 EXPECT_TRUE(TimerRunning()); | 429 EXPECT_TRUE(TimerRunning()); |
| 453 | 430 |
| 454 net::TestURLFetcherFactory factory; | |
| 455 | |
| 456 EnableCaptivePortalDetectionPreference(true); | 431 EnableCaptivePortalDetectionPreference(true); |
| 457 EXPECT_FALSE(FetchingURL()); | 432 EXPECT_FALSE(FetchingURL()); |
| 458 EXPECT_TRUE(TimerRunning()); | 433 EXPECT_TRUE(TimerRunning()); |
| 459 | 434 |
| 460 MessageLoop::current()->RunUntilIdle(); | 435 MessageLoop::current()->RunUntilIdle(); |
| 461 ASSERT_TRUE(FetchingURL()); | 436 ASSERT_TRUE(FetchingURL()); |
| 462 EXPECT_FALSE(TimerRunning()); | 437 EXPECT_FALSE(TimerRunning()); |
| 463 | 438 |
| 464 net::TestURLFetcher* fetcher = factory.GetFetcherByID(0); | 439 CompleteURLFetch(net::OK, 200, NULL); |
| 465 fetcher->set_response_code(200); | |
| 466 OnURLFetchComplete(fetcher); | |
| 467 EXPECT_FALSE(FetchingURL()); | 440 EXPECT_FALSE(FetchingURL()); |
| 468 EXPECT_FALSE(TimerRunning()); | 441 EXPECT_FALSE(TimerRunning()); |
| 469 | 442 |
| 470 EXPECT_EQ(1, observer.num_results_received()); | 443 EXPECT_EQ(1, observer.num_results_received()); |
| 471 EXPECT_EQ(RESULT_BEHIND_CAPTIVE_PORTAL, observer.captive_portal_result()); | 444 EXPECT_EQ(RESULT_BEHIND_CAPTIVE_PORTAL, observer.captive_portal_result()); |
| 472 } | 445 } |
| 473 | 446 |
| 474 // Checks that disabling for browser tests works as expected. | 447 // Checks that disabling for browser tests works as expected. |
| 475 TEST_F(CaptivePortalServiceTest, CaptivePortalDisableForTests) { | 448 TEST_F(CaptivePortalServiceTest, CaptivePortalDisableForTests) { |
| 476 Initialize(CaptivePortalService::DISABLED_FOR_TESTING); | 449 Initialize(CaptivePortalService::DISABLED_FOR_TESTING); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 | 510 |
| 538 RunTest(RESULT_NO_RESPONSE, | 511 RunTest(RESULT_NO_RESPONSE, |
| 539 net::OK, | 512 net::OK, |
| 540 503, | 513 503, |
| 541 0, | 514 0, |
| 542 "HTTP/1.1 503 OK\nRetry-After: Tue, 17 Apr 2012 18:02:51 GMT\n\n"); | 515 "HTTP/1.1 503 OK\nRetry-After: Tue, 17 Apr 2012 18:02:51 GMT\n\n"); |
| 543 EXPECT_EQ(base::TimeDelta::FromSeconds(51), GetTimeUntilNextRequest()); | 516 EXPECT_EQ(base::TimeDelta::FromSeconds(51), GetTimeUntilNextRequest()); |
| 544 } | 517 } |
| 545 | 518 |
| 546 } // namespace captive_portal | 519 } // namespace captive_portal |
| OLD | NEW |