Index: chrome/browser/captive_portal/captive_portal_detector.cc |
diff --git a/chrome/browser/captive_portal/captive_portal_detector.cc b/chrome/browser/captive_portal/captive_portal_detector.cc |
deleted file mode 100644 |
index 846566b107a13e4fe5c25dc9493e4e36714c8988..0000000000000000000000000000000000000000 |
--- a/chrome/browser/captive_portal/captive_portal_detector.cc |
+++ /dev/null |
@@ -1,170 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/captive_portal/captive_portal_detector.h" |
- |
-#include "base/logging.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "net/base/load_flags.h" |
-#include "net/http/http_response_headers.h" |
-#include "net/url_request/url_request_status.h" |
- |
-namespace captive_portal { |
- |
-namespace { |
- |
-const char* const kCaptivePortalResultNames[] = { |
- "InternetConnected", |
- "NoResponse", |
- "BehindCaptivePortal", |
- "NumCaptivePortalResults", |
-}; |
-COMPILE_ASSERT(arraysize(kCaptivePortalResultNames) == RESULT_COUNT + 1, |
- captive_portal_result_name_count_mismatch); |
- |
-} // namespace |
- |
-const char CaptivePortalDetector::kDefaultURL[] = |
- "http://www.gstatic.com/generate_204"; |
- |
-CaptivePortalDetector::CaptivePortalDetector( |
- const scoped_refptr<net::URLRequestContextGetter>& request_context) |
- : request_context_(request_context) { |
-} |
- |
-CaptivePortalDetector::~CaptivePortalDetector() { |
-} |
- |
-// static |
-std::string CaptivePortalDetector::CaptivePortalResultToString(Result result) { |
- DCHECK_GE(result, 0); |
- DCHECK_LT(static_cast<unsigned int>(result), |
- arraysize(kCaptivePortalResultNames)); |
- return kCaptivePortalResultNames[result]; |
-} |
- |
-void CaptivePortalDetector::DetectCaptivePortal( |
- const GURL& url, |
- const DetectionCallback& detection_callback) { |
- DCHECK(CalledOnValidThread()); |
- DCHECK(!FetchingURL()); |
- DCHECK(detection_callback_.is_null()); |
- |
- detection_callback_ = detection_callback; |
- |
- // The first 0 means this can use a TestURLFetcherFactory in unit tests. |
- url_fetcher_.reset(net::URLFetcher::Create(0, |
- url, |
- net::URLFetcher::GET, |
- this)); |
- url_fetcher_->SetAutomaticallyRetryOn5xx(false); |
- url_fetcher_->SetRequestContext(request_context_.get()); |
- |
- // Can't safely use net::LOAD_DISABLE_CERT_REVOCATION_CHECKING here, |
- // since then the connection may be reused without checking the cert. |
- url_fetcher_->SetLoadFlags( |
- net::LOAD_BYPASS_CACHE | |
- net::LOAD_DO_NOT_PROMPT_FOR_LOGIN | |
- net::LOAD_DO_NOT_SAVE_COOKIES | |
- net::LOAD_DO_NOT_SEND_COOKIES | |
- net::LOAD_DO_NOT_SEND_AUTH_DATA); |
- url_fetcher_->Start(); |
-} |
- |
-void CaptivePortalDetector::Cancel() { |
- url_fetcher_.reset(); |
- detection_callback_.Reset(); |
-} |
- |
-void CaptivePortalDetector::OnURLFetchComplete(const net::URLFetcher* source) { |
- DCHECK(CalledOnValidThread()); |
- DCHECK(FetchingURL()); |
- DCHECK_EQ(url_fetcher_.get(), source); |
- DCHECK(!detection_callback_.is_null()); |
- |
- Results results; |
- GetCaptivePortalResultFromResponse(url_fetcher_.get(), &results); |
- DetectionCallback callback = detection_callback_; |
- url_fetcher_.reset(); |
- detection_callback_.Reset(); |
- callback.Run(results); |
-} |
- |
-// Takes a net::URLFetcher that has finished trying to retrieve the test |
-// URL, and returns a CaptivePortalService::Result based on its result. |
-void CaptivePortalDetector::GetCaptivePortalResultFromResponse( |
- const net::URLFetcher* url_fetcher, |
- Results* results) const { |
- DCHECK(results); |
- DCHECK(!url_fetcher->GetStatus().is_io_pending()); |
- |
- results->result = RESULT_NO_RESPONSE; |
- results->response_code = url_fetcher->GetResponseCode(); |
- results->retry_after_delta = base::TimeDelta(); |
- results->landing_url = url_fetcher->GetURL(); |
- |
- // If there's a network error of some sort when fetching a file via HTTP, |
- // there may be a networking problem, rather than a captive portal. |
- // TODO(mmenke): Consider special handling for redirects that end up at |
- // errors, especially SSL certificate errors. |
- if (url_fetcher->GetStatus().status() != net::URLRequestStatus::SUCCESS) |
- return; |
- |
- // In the case of 503 errors, look for the Retry-After header. |
- if (results->response_code == 503) { |
- net::HttpResponseHeaders* headers = url_fetcher->GetResponseHeaders(); |
- std::string retry_after_string; |
- |
- // If there's no Retry-After header, nothing else to do. |
- if (!headers->EnumerateHeader(NULL, "Retry-After", &retry_after_string)) |
- return; |
- |
- // Otherwise, try parsing it as an integer (seconds) or as an HTTP date. |
- int seconds; |
- base::Time full_date; |
- if (base::StringToInt(retry_after_string, &seconds)) { |
- results->retry_after_delta = base::TimeDelta::FromSeconds(seconds); |
- } else if (headers->GetTimeValuedHeader("Retry-After", &full_date)) { |
- base::Time now = GetCurrentTime(); |
- if (full_date > now) |
- results->retry_after_delta = full_date - now; |
- } |
- return; |
- } |
- |
- // A 511 response (Network Authentication Required) means that the user needs |
- // to login to whatever server issued the response. |
- // See: http://tools.ietf.org/html/rfc6585 |
- if (results->response_code == 511) { |
- results->result = RESULT_BEHIND_CAPTIVE_PORTAL; |
- return; |
- } |
- |
- // Other non-2xx/3xx HTTP responses may indicate server errors. |
- if (results->response_code >= 400 || results->response_code < 200) |
- return; |
- |
- // A 204 response code indicates there's no captive portal. |
- if (results->response_code == 204) { |
- results->result = RESULT_INTERNET_CONNECTED; |
- return; |
- } |
- |
- // Otherwise, assume it's a captive portal. |
- results->result = RESULT_BEHIND_CAPTIVE_PORTAL; |
-} |
- |
-base::Time CaptivePortalDetector::GetCurrentTime() const { |
- if (time_for_testing_.is_null()) |
- return base::Time::Now(); |
- else |
- return time_for_testing_; |
-} |
- |
-bool CaptivePortalDetector::FetchingURL() const { |
- return url_fetcher_.get() != NULL; |
-} |
- |
-} // namespace captive_portal |