diff options
author | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-04 21:36:42 +0000 |
---|---|---|
committer | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-04 21:36:42 +0000 |
commit | 06965e0f336afc1b1a7849dd4a0637313d64a994 (patch) | |
tree | eba577add9eec91ed7599aafad7a81ef3d54520b /net/url_request | |
parent | baf556aa12ddfb301f2a54f5c741505b55bad18c (diff) | |
download | chromium_src-06965e0f336afc1b1a7849dd4a0637313d64a994.zip chromium_src-06965e0f336afc1b1a7849dd4a0637313d64a994.tar.gz chromium_src-06965e0f336afc1b1a7849dd4a0637313d64a994.tar.bz2 |
ForceTLS: generate internal redirect when mistakenly using http.
Previously, we just generated a cryptic error when the user attempted
to navigate to a ForceTLS site with HTTP. With this patch, we generate
an internal redirect to the HTTPS version of the site.
(This collided with Dave's r25496, which also added
url_request_redirect_job.cc. Thankfully our code was almost identical.)
http://codereview.chromium.org/193014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25519 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/url_request')
-rw-r--r-- | net/url_request/url_request_http_job.cc | 12 | ||||
-rw-r--r-- | net/url_request/url_request_redirect_job.h | 4 |
2 files changed, 10 insertions, 6 deletions
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index d432f54..bd33720 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -28,6 +28,7 @@ #include "net/url_request/url_request.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_error_job.h" +#include "net/url_request/url_request_redirect_job.h" // static std::set<int> URLRequestHttpJob::explicitly_allowed_ports_; @@ -56,8 +57,15 @@ URLRequestJob* URLRequestHttpJob::Factory(URLRequest* request, if (kForceHTTPS && scheme == "http" && request->context()->force_tls_state() && request->context()->force_tls_state()->IsEnabledForHost( - request->url().host())) - return new URLRequestErrorJob(request, net::ERR_DISALLOWED_URL_SCHEME); + request->url().host())) { + DCHECK_EQ(request->url().scheme(), "http"); + url_canon::Replacements<char> replacements; + static const char kNewScheme[] = "https"; + replacements.SetScheme(kNewScheme, + url_parse::Component(0, strlen(kNewScheme))); + GURL new_location = request->url().ReplaceComponents(replacements); + return new URLRequestRedirectJob(request, new_location); + } return new URLRequestHttpJob(request); } diff --git a/net/url_request/url_request_redirect_job.h b/net/url_request/url_request_redirect_job.h index df35f8d..d7395a7 100644 --- a/net/url_request/url_request_redirect_job.h +++ b/net/url_request/url_request_redirect_job.h @@ -5,11 +5,7 @@ #ifndef NET_URL_REQUEST_URL_REQUEST_REDIRECT_JOB_H_ #define NET_URL_REQUEST_URL_REQUEST_REDIRECT_JOB_H_ -#include <string> - -#include "net/url_request/url_request.h" #include "net/url_request/url_request_job.h" -#include "googleurl/src/gurl.h" class GURL; |