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..73fe8fa0d6ae110f6e8884f19642dd173f75101f 100644 |
--- a/net/url_request/url_request_http_job.cc |
+++ b/net/url_request/url_request_http_job.cc |
@@ -158,6 +158,27 @@ void LogChannelIDAndCookieStores(const GURL& url, |
EPHEMERALITY_MAX); |
} |
+net::URLRequestRedirectJob* MaybeInternallyRedirect( |
+ net::URLRequest* request, |
+ net::NetworkDelegate* network_delegate) { |
+ const GURL& url = request->url(); |
+ if (url.SchemeIsCryptographic()) |
+ return nullptr; |
+ |
+ net::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 net::URLRequestRedirectJob( |
+ request, network_delegate, url.ReplaceComponents(replacements), |
+ // Use status code 307 to preserve the method, so POST requests work. |
+ net::URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS"); |
+} |
+ |
} // namespace |
namespace net { |
@@ -258,13 +279,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 = |
+ MaybeInternallyRedirect(request, network_delegate); |
+ if (redirect) |
+ return redirect; |
+ |
return new URLRequestHttpJob(request, |
network_delegate, |
request->context()->http_user_agent_settings()); |