Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/url_request/url_request_http_job.h" | 5 #include "net/url_request/url_request_http_job.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/base_switches.h" | 9 #include "base/base_switches.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 60 #include "net/url_request/http_user_agent_settings.h" | 60 #include "net/url_request/http_user_agent_settings.h" |
| 61 #include "net/url_request/url_request.h" | 61 #include "net/url_request/url_request.h" |
| 62 #include "net/url_request/url_request_context.h" | 62 #include "net/url_request/url_request_context.h" |
| 63 #include "net/url_request/url_request_error_job.h" | 63 #include "net/url_request/url_request_error_job.h" |
| 64 #include "net/url_request/url_request_job_factory.h" | 64 #include "net/url_request/url_request_job_factory.h" |
| 65 #include "net/url_request/url_request_redirect_job.h" | 65 #include "net/url_request/url_request_redirect_job.h" |
| 66 #include "net/url_request/url_request_throttler_manager.h" | 66 #include "net/url_request/url_request_throttler_manager.h" |
| 67 #include "net/websockets/websocket_handshake_stream_base.h" | 67 #include "net/websockets/websocket_handshake_stream_base.h" |
| 68 #include "url/origin.h" | 68 #include "url/origin.h" |
| 69 | 69 |
| 70 #if defined(OS_ANDROID) | |
| 71 #include "net/android/network_library.h" | |
| 72 #endif | |
| 73 | |
| 70 static const char kAvailDictionaryHeader[] = "Avail-Dictionary"; | 74 static const char kAvailDictionaryHeader[] = "Avail-Dictionary"; |
| 71 | 75 |
| 72 namespace { | 76 namespace { |
| 73 | 77 |
| 74 const char kDeflate[] = "deflate"; | 78 const char kDeflate[] = "deflate"; |
| 75 const char kGZip[] = "gzip"; | 79 const char kGZip[] = "gzip"; |
| 76 const char kSdch[] = "sdch"; | 80 const char kSdch[] = "sdch"; |
| 77 const char kXGZip[] = "x-gzip"; | 81 const char kXGZip[] = "x-gzip"; |
| 78 const char kBrotli[] = "br"; | 82 const char kBrotli[] = "br"; |
| 79 | 83 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 161 params->channel_id_service->GetUniqueID()) { | 165 params->channel_id_service->GetUniqueID()) { |
| 162 ephemerality = PERSISTENT_MATCH; | 166 ephemerality = PERSISTENT_MATCH; |
| 163 } else { | 167 } else { |
| 164 NOTREACHED(); | 168 NOTREACHED(); |
| 165 ephemerality = PERSISTENT_MISMATCH; | 169 ephemerality = PERSISTENT_MISMATCH; |
| 166 } | 170 } |
| 167 UMA_HISTOGRAM_ENUMERATION("Net.TokenBinding.StoreEphemerality", ephemerality, | 171 UMA_HISTOGRAM_ENUMERATION("Net.TokenBinding.StoreEphemerality", ephemerality, |
| 168 EPHEMERALITY_MAX); | 172 EPHEMERALITY_MAX); |
| 169 } | 173 } |
| 170 | 174 |
| 171 net::URLRequestRedirectJob* MaybeInternallyRedirect( | 175 net::URLRequestJob* MaybeInternallyRedirectOrFail( |
|
pauljensen
2016/12/07 13:20:28
needs a comment
mgersh
2016/12/13 17:02:58
Done.
| |
| 172 net::URLRequest* request, | 176 net::URLRequest* request, |
| 173 net::NetworkDelegate* network_delegate) { | 177 net::NetworkDelegate* network_delegate) { |
| 174 const GURL& url = request->url(); | 178 const GURL& url = request->url(); |
| 175 if (url.SchemeIsCryptographic()) | 179 if (url.SchemeIsCryptographic()) |
| 176 return nullptr; | 180 return nullptr; |
| 177 | 181 |
| 178 net::TransportSecurityState* hsts = | 182 net::TransportSecurityState* hsts = |
| 179 request->context()->transport_security_state(); | 183 request->context()->transport_security_state(); |
| 180 if (!hsts || !hsts->ShouldUpgradeToSSL(url.host())) | 184 if (hsts && hsts->ShouldUpgradeToSSL(url.host())) { |
| 181 return nullptr; | 185 GURL::Replacements replacements; |
| 186 replacements.SetSchemeStr(url.SchemeIs(url::kHttpScheme) ? url::kHttpsScheme | |
| 187 : url::kWssScheme); | |
| 188 return new net::URLRequestRedirectJob( | |
| 189 request, network_delegate, url.ReplaceComponents(replacements), | |
| 190 // Use status code 307 to preserve the method, so POST requests work. | |
| 191 net::URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS"); | |
| 192 } | |
| 182 | 193 |
| 183 GURL::Replacements replacements; | 194 #if defined(OS_ANDROID) |
| 184 replacements.SetSchemeStr(url.SchemeIs(url::kHttpScheme) ? url::kHttpsScheme | 195 if (request->context()->check_cleartext_permitted() && |
| 185 : url::kWssScheme); | 196 !net::android::IsCleartextPermitted(url.host())) |
|
pauljensen
2016/12/07 13:20:28
I don't see a check for https...this really needs
mgersh
2016/12/13 17:02:58
It's there, just not visible in the diff. I added
| |
| 186 return new net::URLRequestRedirectJob( | 197 return new net::URLRequestErrorJob(request, network_delegate, |
| 187 request, network_delegate, url.ReplaceComponents(replacements), | 198 net::ERR_BLOCKED_BY_CLIENT); |
|
pauljensen
2016/12/07 13:20:28
multi-line if clauses should have curly braces
mgersh
2016/12/13 17:02:58
Done.
| |
| 188 // Use status code 307 to preserve the method, so POST requests work. | 199 #endif |
| 189 net::URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS"); | 200 |
| 201 return nullptr; | |
| 190 } | 202 } |
| 191 | 203 |
| 192 } // namespace | 204 } // namespace |
| 193 | 205 |
| 194 namespace net { | 206 namespace net { |
| 195 | 207 |
| 196 // TODO(darin): make sure the port blocking code is not lost | 208 // TODO(darin): make sure the port blocking code is not lost |
| 197 // static | 209 // static |
| 198 URLRequestJob* URLRequestHttpJob::Factory(URLRequest* request, | 210 URLRequestJob* URLRequestHttpJob::Factory(URLRequest* request, |
| 199 NetworkDelegate* network_delegate, | 211 NetworkDelegate* network_delegate, |
| 200 const std::string& scheme) { | 212 const std::string& scheme) { |
| 201 DCHECK(scheme == "http" || scheme == "https" || scheme == "ws" || | 213 DCHECK(scheme == "http" || scheme == "https" || scheme == "ws" || |
| 202 scheme == "wss"); | 214 scheme == "wss"); |
| 203 | 215 |
| 204 if (!request->context()->http_transaction_factory()) { | 216 if (!request->context()->http_transaction_factory()) { |
| 205 NOTREACHED() << "requires a valid context"; | 217 NOTREACHED() << "requires a valid context"; |
| 206 return new URLRequestErrorJob( | 218 return new URLRequestErrorJob( |
| 207 request, network_delegate, ERR_INVALID_ARGUMENT); | 219 request, network_delegate, ERR_INVALID_ARGUMENT); |
| 208 } | 220 } |
| 209 | 221 |
| 210 URLRequestRedirectJob* redirect = | 222 URLRequestJob* redirect_or_error = |
| 211 MaybeInternallyRedirect(request, network_delegate); | 223 MaybeInternallyRedirectOrFail(request, network_delegate); |
| 212 if (redirect) | 224 if (redirect_or_error) |
| 213 return redirect; | 225 return redirect_or_error; |
| 214 | 226 |
| 215 return new URLRequestHttpJob(request, | 227 return new URLRequestHttpJob(request, |
| 216 network_delegate, | 228 network_delegate, |
| 217 request->context()->http_user_agent_settings()); | 229 request->context()->http_user_agent_settings()); |
| 218 } | 230 } |
| 219 | 231 |
| 220 URLRequestHttpJob::URLRequestHttpJob( | 232 URLRequestHttpJob::URLRequestHttpJob( |
| 221 URLRequest* request, | 233 URLRequest* request, |
| 222 NetworkDelegate* network_delegate, | 234 NetworkDelegate* network_delegate, |
| 223 const HttpUserAgentSettings* http_user_agent_settings) | 235 const HttpUserAgentSettings* http_user_agent_settings) |
| (...skipping 1317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1541 awaiting_callback_ = false; | 1553 awaiting_callback_ = false; |
| 1542 | 1554 |
| 1543 // Notify NetworkQualityEstimator. | 1555 // Notify NetworkQualityEstimator. |
| 1544 NetworkQualityEstimator* network_quality_estimator = | 1556 NetworkQualityEstimator* network_quality_estimator = |
| 1545 request()->context()->network_quality_estimator(); | 1557 request()->context()->network_quality_estimator(); |
| 1546 if (network_quality_estimator) | 1558 if (network_quality_estimator) |
| 1547 network_quality_estimator->NotifyURLRequestDestroyed(*request()); | 1559 network_quality_estimator->NotifyURLRequestDestroyed(*request()); |
| 1548 } | 1560 } |
| 1549 | 1561 |
| 1550 } // namespace net | 1562 } // namespace net |
| OLD | NEW |