Index: net/url_request/url_request_http_job.cc |
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc |
index 3fc81f77d9d4a3f93c41f53fd08bfba0d9605785..bf03a9d8842a24e0e78887bc30cbec5ce02d7799 100644 |
--- a/net/url_request/url_request_http_job.cc |
+++ b/net/url_request/url_request_http_job.cc |
@@ -258,13 +258,11 @@ URLRequestJob* URLRequestHttpJob::Factory(URLRequest* request, |
request, network_delegate, ERR_INVALID_ARGUMENT); |
} |
- GURL redirect_url; |
- if (request->GetHSTSRedirect(&redirect_url)) { |
- return new URLRequestRedirectJob( |
- request, network_delegate, redirect_url, |
- // Use status code 307 to preserve the method, so POST requests work. |
- URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS"); |
- } |
+ URLRequestRedirectJob* redirect = |
+ URLRequestHttpJob::MaybeInternallyRedirect(request, network_delegate); |
+ if (redirect) |
+ return redirect; |
+ |
return new URLRequestHttpJob(request, |
network_delegate, |
request->context()->http_user_agent_settings()); |
@@ -329,6 +327,26 @@ URLRequestHttpJob::~URLRequestHttpJob() { |
DoneWithRequest(ABORTED); |
} |
+URLRequestRedirectJob* URLRequestHttpJob::MaybeInternallyRedirect( |
+ URLRequest* request, |
+ NetworkDelegate* network_delegate) { |
+ const GURL& url = request->url(); |
+ if (url.SchemeIsCryptographic()) |
+ return nullptr; |
+ |
+ TransportSecurityState* hsts = request->context()->transport_security_state(); |
+ if (!hsts || !hsts->ShouldUpgradeToSSL(url.host())) |
+ return nullptr; |
+ |
+ GURL::Replacements replacements; |
+ replacements.SetSchemeStr(url.SchemeIs(url::kHttpScheme) ? url::kHttpsScheme |
+ : url::kWssScheme); |
+ return new URLRequestRedirectJob( |
+ request, network_delegate, url.ReplaceComponents(replacements), |
+ // Use status code 307 to preserve the method, so POST requests work. |
+ URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS"); |
+} |
+ |
void URLRequestHttpJob::SetPriority(RequestPriority priority) { |
priority_ = priority; |
if (transaction_) |