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 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading | 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading |
| 6 | 6 |
| 7 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 7 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 187 break; | 187 break; |
| 188 case blink::WebReferrerPolicyAlways: | 188 case blink::WebReferrerPolicyAlways: |
| 189 case blink::WebReferrerPolicyNever: | 189 case blink::WebReferrerPolicyNever: |
| 190 case blink::WebReferrerPolicyOrigin: | 190 case blink::WebReferrerPolicyOrigin: |
| 191 net_referrer_policy = net::URLRequest::NEVER_CLEAR_REFERRER; | 191 net_referrer_policy = net::URLRequest::NEVER_CLEAR_REFERRER; |
| 192 break; | 192 break; |
| 193 } | 193 } |
| 194 request->set_referrer_policy(net_referrer_policy); | 194 request->set_referrer_policy(net_referrer_policy); |
| 195 } | 195 } |
| 196 | 196 |
| 197 Referrer SanitizeReferrerForRequest(net::URLRequest* request, | |
| 198 const Referrer& referrer) { | |
|
davidben
2014/05/09 21:43:35
This would be the third copy of this logic that I
| |
| 199 Referrer sanitized_referrer; | |
| 200 sanitized_referrer.url = referrer.url.GetAsReferrer(); | |
| 201 sanitized_referrer.policy = referrer.policy; | |
| 202 switch (sanitized_referrer.policy) { | |
| 203 case blink::WebReferrerPolicyDefault: | |
| 204 if (sanitized_referrer.url.SchemeIsSecure() && | |
| 205 !request->url().SchemeIsSecure()) { | |
| 206 sanitized_referrer.url = GURL(); | |
| 207 } | |
| 208 break; | |
| 209 case blink::WebReferrerPolicyAlways: | |
| 210 break; | |
| 211 case blink::WebReferrerPolicyNever: | |
| 212 sanitized_referrer.url = GURL(); | |
| 213 break; | |
| 214 case blink::WebReferrerPolicyOrigin: | |
| 215 sanitized_referrer.url = sanitized_referrer.url.GetOrigin(); | |
| 216 break; | |
| 217 default: | |
| 218 NOTREACHED(); | |
| 219 break; | |
| 220 } | |
| 221 return sanitized_referrer; | |
| 222 } | |
| 223 | |
| 224 | |
| 197 // Consults the RendererSecurity policy to determine whether the | 225 // Consults the RendererSecurity policy to determine whether the |
| 198 // ResourceDispatcherHostImpl should service this request. A request might be | 226 // ResourceDispatcherHostImpl should service this request. A request might be |
| 199 // disallowed if the renderer is not authorized to retrieve the request URL or | 227 // disallowed if the renderer is not authorized to retrieve the request URL or |
| 200 // if the renderer is attempting to upload an unauthorized file. | 228 // if the renderer is attempting to upload an unauthorized file. |
| 201 bool ShouldServiceRequest(int process_type, | 229 bool ShouldServiceRequest(int process_type, |
| 202 int child_id, | 230 int child_id, |
| 203 const ResourceHostMsg_Request& request_data, | 231 const ResourceHostMsg_Request& request_data, |
| 204 fileapi::FileSystemContext* file_system_context) { | 232 fileapi::FileSystemContext* file_system_context) { |
| 205 if (process_type == PROCESS_TYPE_PLUGIN) | 233 if (process_type == PROCESS_TYPE_PLUGIN) |
| 206 return true; | 234 return true; |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 486 DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN); | 514 DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN); |
| 487 | 515 |
| 488 const GURL& url = request->original_url(); | 516 const GURL& url = request->original_url(); |
| 489 | 517 |
| 490 // http://crbug.com/90971 | 518 // http://crbug.com/90971 |
| 491 char url_buf[128]; | 519 char url_buf[128]; |
| 492 base::strlcpy(url_buf, url.spec().c_str(), arraysize(url_buf)); | 520 base::strlcpy(url_buf, url.spec().c_str(), arraysize(url_buf)); |
| 493 base::debug::Alias(url_buf); | 521 base::debug::Alias(url_buf); |
| 494 CHECK(ContainsKey(active_resource_contexts_, context)); | 522 CHECK(ContainsKey(active_resource_contexts_, context)); |
| 495 | 523 |
| 496 SetReferrerForRequest(request.get(), referrer); | 524 // Callers which create programmatic downloads do not necessarily sanitize |
| 525 // the referrer, so do it here in a centralized location. | |
| 526 Referrer sanitized_referrer = SanitizeReferrerForRequest(request.get(), | |
| 527 referrer); | |
| 528 SetReferrerForRequest(request.get(), sanitized_referrer); | |
| 497 | 529 |
| 498 int extra_load_flags = net::LOAD_IS_DOWNLOAD; | 530 int extra_load_flags = net::LOAD_IS_DOWNLOAD; |
| 499 if (prefer_cache) { | 531 if (prefer_cache) { |
| 500 // If there is upload data attached, only retrieve from cache because there | 532 // If there is upload data attached, only retrieve from cache because there |
| 501 // is no current mechanism to prompt the user for their consent for a | 533 // is no current mechanism to prompt the user for their consent for a |
| 502 // re-post. For GETs, try to retrieve data from the cache and skip | 534 // re-post. For GETs, try to retrieve data from the cache and skip |
| 503 // validating the entry if present. | 535 // validating the entry if present. |
| 504 if (request->get_upload() != NULL) | 536 if (request->get_upload() != NULL) |
| 505 extra_load_flags |= net::LOAD_ONLY_FROM_CACHE; | 537 extra_load_flags |= net::LOAD_ONLY_FROM_CACHE; |
| 506 else | 538 else |
| (...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1391 return; | 1423 return; |
| 1392 } | 1424 } |
| 1393 | 1425 |
| 1394 net::CookieStore* cookie_store = | 1426 net::CookieStore* cookie_store = |
| 1395 GetContentClient()->browser()->OverrideCookieStoreForRenderProcess( | 1427 GetContentClient()->browser()->OverrideCookieStoreForRenderProcess( |
| 1396 child_id); | 1428 child_id); |
| 1397 scoped_ptr<net::URLRequest> request( | 1429 scoped_ptr<net::URLRequest> request( |
| 1398 request_context->CreateRequest(url, net::DEFAULT_PRIORITY, NULL, | 1430 request_context->CreateRequest(url, net::DEFAULT_PRIORITY, NULL, |
| 1399 cookie_store)); | 1431 cookie_store)); |
| 1400 | 1432 |
| 1401 request->set_method("GET"); | |
| 1402 SetReferrerForRequest(request.get(), referrer); | 1433 SetReferrerForRequest(request.get(), referrer); |
| 1403 | 1434 |
| 1404 // So far, for saving page, we need fetch content from cache, in the | 1435 // So far, for saving page, we need fetch content from cache, in the |
| 1405 // future, maybe we can use a configuration to configure this behavior. | 1436 // future, maybe we can use a configuration to configure this behavior. |
| 1406 request->SetLoadFlags(net::LOAD_PREFERRING_CACHE); | 1437 request->SetLoadFlags(net::LOAD_PREFERRING_CACHE); |
| 1407 | 1438 |
| 1408 // No need to get offline load flags for save files, but make sure | 1439 // No need to get offline load flags for save files, but make sure |
| 1409 // we have an OfflinePolicy to receive request completions. | 1440 // we have an OfflinePolicy to receive request completions. |
| 1410 GlobalRoutingID id(child_id, route_id); | 1441 GlobalRoutingID id(child_id, route_id); |
| 1411 if (!offline_policy_map_[id]) | 1442 if (!offline_policy_map_[id]) |
| (...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2034 if ((load_flags & net::LOAD_REPORT_RAW_HEADERS) | 2065 if ((load_flags & net::LOAD_REPORT_RAW_HEADERS) |
| 2035 && !policy->CanReadRawCookies(child_id)) { | 2066 && !policy->CanReadRawCookies(child_id)) { |
| 2036 VLOG(1) << "Denied unauthorized request for raw headers"; | 2067 VLOG(1) << "Denied unauthorized request for raw headers"; |
| 2037 load_flags &= ~net::LOAD_REPORT_RAW_HEADERS; | 2068 load_flags &= ~net::LOAD_REPORT_RAW_HEADERS; |
| 2038 } | 2069 } |
| 2039 | 2070 |
| 2040 return load_flags; | 2071 return load_flags; |
| 2041 } | 2072 } |
| 2042 | 2073 |
| 2043 } // namespace content | 2074 } // namespace content |
| OLD | NEW |