summaryrefslogtreecommitdiffstats
path: root/net/url_request
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-04 21:36:42 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-04 21:36:42 +0000
commit06965e0f336afc1b1a7849dd4a0637313d64a994 (patch)
treeeba577add9eec91ed7599aafad7a81ef3d54520b /net/url_request
parentbaf556aa12ddfb301f2a54f5c741505b55bad18c (diff)
downloadchromium_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.cc12
-rw-r--r--net/url_request/url_request_redirect_job.h4
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;