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

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

Issue 2546213003: Implement net/ support for Android's NetworkSecurityPolicy (Closed)
Patch Set: 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 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
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
OLDNEW
« net/url_request/url_request_context.h ('K') | « net/url_request/url_request_context.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698