| 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 | 
|---|