Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Unified Diff: chrome/browser/captive_portal/captive_portal_detector.cc

Issue 242483003: Move CaptivePortalDetector to src/components/captive_portal (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698