Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: net/url_request/url_request_http_job.cc

Issue 2546213003: Implement net/ support for Android's NetworkSecurityPolicy (Closed)
Patch Set: Address comments and add test Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 // Checks for reasons not to return a URLRequestHttpJob, and if one is found,
176 // returns a URLRequestRedirectJob or URLRequestErrorJob as necessary.
177 net::URLRequestJob* MaybeInternallyRedirectOrFail(
mmenke 2016/12/13 18:39:14 I think this does enough weird stuff that we shoul
mgersh 2016/12/13 19:01:58 Done.
172 net::URLRequest* request, 178 net::URLRequest* request,
173 net::NetworkDelegate* network_delegate) { 179 net::NetworkDelegate* network_delegate) {
174 const GURL& url = request->url(); 180 const GURL& url = request->url();
181
182 // Neither check applies to https and wss requests
mmenke 2016/12/13 18:39:14 nit: End these comments with periods.
mgersh 2016/12/13 19:01:58 Done.
175 if (url.SchemeIsCryptographic()) 183 if (url.SchemeIsCryptographic())
176 return nullptr; 184 return nullptr;
177 185
186 // Check for HSTS upgrade
178 net::TransportSecurityState* hsts = 187 net::TransportSecurityState* hsts =
179 request->context()->transport_security_state(); 188 request->context()->transport_security_state();
180 if (!hsts || !hsts->ShouldUpgradeToSSL(url.host())) 189 if (hsts && hsts->ShouldUpgradeToSSL(url.host())) {
181 return nullptr; 190 GURL::Replacements replacements;
191 replacements.SetSchemeStr(url.SchemeIs(url::kHttpScheme) ? url::kHttpsScheme
192 : url::kWssScheme);
193 return new net::URLRequestRedirectJob(
194 request, network_delegate, url.ReplaceComponents(replacements),
195 // Use status code 307 to preserve the method, so POST requests work.
196 net::URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS");
197 }
182 198
183 GURL::Replacements replacements; 199 #if defined(OS_ANDROID)
184 replacements.SetSchemeStr(url.SchemeIs(url::kHttpScheme) ? url::kHttpsScheme 200 // Check whether the app allows cleartext traffic to this host, and return
185 : url::kWssScheme); 201 // ERR_BLOCKED_BY_CLIENT if not
186 return new net::URLRequestRedirectJob( 202 if (request->context()->check_cleartext_permitted() &&
187 request, network_delegate, url.ReplaceComponents(replacements), 203 !net::android::IsCleartextPermitted(url.host())) {
188 // Use status code 307 to preserve the method, so POST requests work. 204 return new net::URLRequestErrorJob(request, network_delegate,
189 net::URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS"); 205 net::ERR_BLOCKED_BY_CLIENT);
206 }
207 #endif
208
209 return nullptr;
190 } 210 }
191 211
192 } // namespace 212 } // namespace
193 213
194 namespace net { 214 namespace net {
195 215
196 // TODO(darin): make sure the port blocking code is not lost 216 // TODO(darin): make sure the port blocking code is not lost
197 // static 217 // static
198 URLRequestJob* URLRequestHttpJob::Factory(URLRequest* request, 218 URLRequestJob* URLRequestHttpJob::Factory(URLRequest* request,
199 NetworkDelegate* network_delegate, 219 NetworkDelegate* network_delegate,
200 const std::string& scheme) { 220 const std::string& scheme) {
201 DCHECK(scheme == "http" || scheme == "https" || scheme == "ws" || 221 DCHECK(scheme == "http" || scheme == "https" || scheme == "ws" ||
202 scheme == "wss"); 222 scheme == "wss");
203 223
204 if (!request->context()->http_transaction_factory()) { 224 if (!request->context()->http_transaction_factory()) {
205 NOTREACHED() << "requires a valid context"; 225 NOTREACHED() << "requires a valid context";
206 return new URLRequestErrorJob( 226 return new URLRequestErrorJob(
207 request, network_delegate, ERR_INVALID_ARGUMENT); 227 request, network_delegate, ERR_INVALID_ARGUMENT);
208 } 228 }
209 229
210 URLRequestRedirectJob* redirect = 230 URLRequestJob* redirect_or_error =
211 MaybeInternallyRedirect(request, network_delegate); 231 MaybeInternallyRedirectOrFail(request, network_delegate);
212 if (redirect) 232 if (redirect_or_error)
213 return redirect; 233 return redirect_or_error;
214 234
215 return new URLRequestHttpJob(request, 235 return new URLRequestHttpJob(request,
216 network_delegate, 236 network_delegate,
217 request->context()->http_user_agent_settings()); 237 request->context()->http_user_agent_settings());
218 } 238 }
219 239
220 URLRequestHttpJob::URLRequestHttpJob( 240 URLRequestHttpJob::URLRequestHttpJob(
221 URLRequest* request, 241 URLRequest* request,
222 NetworkDelegate* network_delegate, 242 NetworkDelegate* network_delegate,
223 const HttpUserAgentSettings* http_user_agent_settings) 243 const HttpUserAgentSettings* http_user_agent_settings)
(...skipping 1317 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 awaiting_callback_ = false; 1561 awaiting_callback_ = false;
1542 1562
1543 // Notify NetworkQualityEstimator. 1563 // Notify NetworkQualityEstimator.
1544 NetworkQualityEstimator* network_quality_estimator = 1564 NetworkQualityEstimator* network_quality_estimator =
1545 request()->context()->network_quality_estimator(); 1565 request()->context()->network_quality_estimator();
1546 if (network_quality_estimator) 1566 if (network_quality_estimator)
1547 network_quality_estimator->NotifyURLRequestDestroyed(*request()); 1567 network_quality_estimator->NotifyURLRequestDestroyed(*request());
1548 } 1568 }
1549 1569
1550 } // namespace net 1570 } // namespace net
OLDNEW
« no previous file with comments | « net/url_request/url_request_context.cc ('k') | net/url_request/url_request_http_job_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698