| 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 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 588 } | 588 } |
| 589 | 589 |
| 590 DownloadInterruptReason ResourceDispatcherHostImpl::BeginDownload( | 590 DownloadInterruptReason ResourceDispatcherHostImpl::BeginDownload( |
| 591 scoped_ptr<net::URLRequest> request, | 591 scoped_ptr<net::URLRequest> request, |
| 592 const Referrer& referrer, | 592 const Referrer& referrer, |
| 593 bool is_content_initiated, | 593 bool is_content_initiated, |
| 594 ResourceContext* context, | 594 ResourceContext* context, |
| 595 int child_id, | 595 int child_id, |
| 596 int route_id, | 596 int route_id, |
| 597 bool prefer_cache, | 597 bool prefer_cache, |
| 598 bool do_not_prompt_for_login, |
| 598 scoped_ptr<DownloadSaveInfo> save_info, | 599 scoped_ptr<DownloadSaveInfo> save_info, |
| 599 uint32 download_id, | 600 uint32 download_id, |
| 600 const DownloadStartedCallback& started_callback) { | 601 const DownloadStartedCallback& started_callback) { |
| 601 if (is_shutdown_) | 602 if (is_shutdown_) |
| 602 return CallbackAndReturn(started_callback, | 603 return CallbackAndReturn(started_callback, |
| 603 DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN); | 604 DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN); |
| 604 | 605 |
| 605 const GURL& url = request->original_url(); | 606 const GURL& url = request->original_url(); |
| 606 | 607 |
| 607 // http://crbug.com/90971 | 608 // http://crbug.com/90971 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 const net::URLRequestContext* request_context = context->GetRequestContext(); | 651 const net::URLRequestContext* request_context = context->GetRequestContext(); |
| 651 if (!request_context->job_factory()->IsHandledURL(url)) { | 652 if (!request_context->job_factory()->IsHandledURL(url)) { |
| 652 VLOG(1) << "Download request for unsupported protocol: " | 653 VLOG(1) << "Download request for unsupported protocol: " |
| 653 << url.possibly_invalid_spec(); | 654 << url.possibly_invalid_spec(); |
| 654 return CallbackAndReturn(started_callback, | 655 return CallbackAndReturn(started_callback, |
| 655 DOWNLOAD_INTERRUPT_REASON_NETWORK_INVALID_REQUEST); | 656 DOWNLOAD_INTERRUPT_REASON_NETWORK_INVALID_REQUEST); |
| 656 } | 657 } |
| 657 | 658 |
| 658 ResourceRequestInfoImpl* extra_info = | 659 ResourceRequestInfoImpl* extra_info = |
| 659 CreateRequestInfo(child_id, route_id, true, context); | 660 CreateRequestInfo(child_id, route_id, true, context); |
| 661 extra_info->set_do_not_prompt_for_login(do_not_prompt_for_login); |
| 660 extra_info->AssociateWithRequest(request.get()); // Request takes ownership. | 662 extra_info->AssociateWithRequest(request.get()); // Request takes ownership. |
| 661 | 663 |
| 662 if (request->url().SchemeIs(url::kBlobScheme)) { | 664 if (request->url().SchemeIs(url::kBlobScheme)) { |
| 663 ChromeBlobStorageContext* blob_context = | 665 ChromeBlobStorageContext* blob_context = |
| 664 GetChromeBlobStorageContextForResourceContext(context); | 666 GetChromeBlobStorageContextForResourceContext(context); |
| 665 storage::BlobProtocolHandler::SetRequestedBlobDataHandle( | 667 storage::BlobProtocolHandler::SetRequestedBlobDataHandle( |
| 666 request.get(), | 668 request.get(), |
| 667 blob_context->context()->GetBlobDataFromPublicURL(request->url())); | 669 blob_context->context()->GetBlobDataFromPublicURL(request->url())); |
| 668 } | 670 } |
| 669 | 671 |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1143 | 1145 |
| 1144 // Allow the observer to block/handle the request. | 1146 // Allow the observer to block/handle the request. |
| 1145 if (delegate_ && !delegate_->ShouldBeginRequest(request_data.method, | 1147 if (delegate_ && !delegate_->ShouldBeginRequest(request_data.method, |
| 1146 request_data.url, | 1148 request_data.url, |
| 1147 request_data.resource_type, | 1149 request_data.resource_type, |
| 1148 resource_context)) { | 1150 resource_context)) { |
| 1149 AbortRequestBeforeItStarts(filter_, sync_result, request_id); | 1151 AbortRequestBeforeItStarts(filter_, sync_result, request_id); |
| 1150 return; | 1152 return; |
| 1151 } | 1153 } |
| 1152 | 1154 |
| 1153 bool is_sync_load = sync_result != NULL; | |
| 1154 int load_flags = | |
| 1155 BuildLoadFlagsForRequest(request_data, child_id, is_sync_load); | |
| 1156 | |
| 1157 // Sync loads should have maximum priority and should be the only | |
| 1158 // requets that have the ignore limits flag set. | |
| 1159 if (is_sync_load) { | |
| 1160 DCHECK_EQ(request_data.priority, net::MAXIMUM_PRIORITY); | |
| 1161 DCHECK_NE(load_flags & net::LOAD_IGNORE_LIMITS, 0); | |
| 1162 } else { | |
| 1163 DCHECK_EQ(load_flags & net::LOAD_IGNORE_LIMITS, 0); | |
| 1164 } | |
| 1165 | |
| 1166 // Construct the request. | 1155 // Construct the request. |
| 1167 net::CookieStore* cookie_store = | 1156 net::CookieStore* cookie_store = |
| 1168 GetContentClient()->browser()->OverrideCookieStoreForRenderProcess( | 1157 GetContentClient()->browser()->OverrideCookieStoreForRenderProcess( |
| 1169 child_id); | 1158 child_id); |
| 1170 scoped_ptr<net::URLRequest> new_request; | 1159 scoped_ptr<net::URLRequest> new_request; |
| 1171 new_request = request_context->CreateRequest( | 1160 new_request = request_context->CreateRequest( |
| 1172 request_data.url, request_data.priority, NULL, cookie_store); | 1161 request_data.url, request_data.priority, NULL, cookie_store); |
| 1173 | 1162 |
| 1174 new_request->set_method(request_data.method); | 1163 new_request->set_method(request_data.method); |
| 1175 new_request->set_first_party_for_cookies( | 1164 new_request->set_first_party_for_cookies( |
| 1176 request_data.first_party_for_cookies); | 1165 request_data.first_party_for_cookies); |
| 1177 | 1166 |
| 1178 // If the request is a MAIN_FRAME request, the first-party URL gets updated on | 1167 // If the request is a MAIN_FRAME request, the first-party URL gets updated on |
| 1179 // redirects. | 1168 // redirects. |
| 1180 if (request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME) { | 1169 if (request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME) { |
| 1181 new_request->set_first_party_url_policy( | 1170 new_request->set_first_party_url_policy( |
| 1182 net::URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT); | 1171 net::URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT); |
| 1183 } | 1172 } |
| 1184 | 1173 |
| 1185 const Referrer referrer(request_data.referrer, request_data.referrer_policy); | 1174 const Referrer referrer(request_data.referrer, request_data.referrer_policy); |
| 1186 SetReferrerForRequest(new_request.get(), referrer); | 1175 SetReferrerForRequest(new_request.get(), referrer); |
| 1187 | 1176 |
| 1188 net::HttpRequestHeaders headers; | 1177 net::HttpRequestHeaders headers; |
| 1189 headers.AddHeadersFromString(request_data.headers); | 1178 headers.AddHeadersFromString(request_data.headers); |
| 1190 new_request->SetExtraRequestHeaders(headers); | 1179 new_request->SetExtraRequestHeaders(headers); |
| 1191 | 1180 |
| 1192 new_request->SetLoadFlags(load_flags); | |
| 1193 | |
| 1194 storage::BlobStorageContext* blob_context = | 1181 storage::BlobStorageContext* blob_context = |
| 1195 GetBlobStorageContext(filter_->blob_storage_context()); | 1182 GetBlobStorageContext(filter_->blob_storage_context()); |
| 1196 // Resolve elements from request_body and prepare upload data. | 1183 // Resolve elements from request_body and prepare upload data. |
| 1197 if (request_data.request_body.get()) { | 1184 if (request_data.request_body.get()) { |
| 1198 // |blob_context| could be null when the request is from the plugins because | 1185 // |blob_context| could be null when the request is from the plugins because |
| 1199 // ResourceMessageFilters created in PluginProcessHost don't have the blob | 1186 // ResourceMessageFilters created in PluginProcessHost don't have the blob |
| 1200 // context. | 1187 // context. |
| 1201 if (blob_context) { | 1188 if (blob_context) { |
| 1202 // Attaches the BlobDataHandles to request_body not to free the blobs and | 1189 // Attaches the BlobDataHandles to request_body not to free the blobs and |
| 1203 // any attached shareable files until upload completion. These data will | 1190 // any attached shareable files until upload completion. These data will |
| 1204 // be used in UploadDataStream and ServiceWorkerURLRequestJob. | 1191 // be used in UploadDataStream and ServiceWorkerURLRequestJob. |
| 1205 AttachRequestBodyBlobDataHandles( | 1192 AttachRequestBodyBlobDataHandles( |
| 1206 request_data.request_body.get(), | 1193 request_data.request_body.get(), |
| 1207 blob_context); | 1194 blob_context); |
| 1208 } | 1195 } |
| 1209 new_request->set_upload(UploadDataStreamBuilder::Build( | 1196 new_request->set_upload(UploadDataStreamBuilder::Build( |
| 1210 request_data.request_body.get(), | 1197 request_data.request_body.get(), |
| 1211 blob_context, | 1198 blob_context, |
| 1212 filter_->file_system_context(), | 1199 filter_->file_system_context(), |
| 1213 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE) | 1200 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE) |
| 1214 .get())); | 1201 .get())); |
| 1215 } | 1202 } |
| 1216 | 1203 |
| 1217 bool allow_download = request_data.allow_download && | 1204 bool allow_download = request_data.allow_download && |
| 1218 IsResourceTypeFrame(request_data.resource_type); | 1205 IsResourceTypeFrame(request_data.resource_type); |
| 1206 bool do_not_prompt_for_login = request_data.do_not_prompt_for_login; |
| 1207 bool is_sync_load = sync_result != NULL; |
| 1208 int load_flags = |
| 1209 BuildLoadFlagsForRequest(request_data, child_id, is_sync_load); |
| 1210 if (request_data.resource_type == RESOURCE_TYPE_PREFETCH || |
| 1211 request_data.resource_type == RESOURCE_TYPE_FAVICON) { |
| 1212 do_not_prompt_for_login = true; |
| 1213 } |
| 1214 if (request_data.resource_type == RESOURCE_TYPE_IMAGE && |
| 1215 HTTP_AUTH_RELATION_BLOCKED_CROSS == |
| 1216 HttpAuthRelationTypeOf(request_data.url, |
| 1217 request_data.first_party_for_cookies)) { |
| 1218 // Prevent third-party image content from prompting for login, as this |
| 1219 // is often a scam to extract credentials for another domain from the user. |
| 1220 // Only block image loads, as the attack applies largely to the "src" |
| 1221 // property of the <img> tag. It is common for web properties to allow |
| 1222 // untrusted values for <img src>; this is considered a fair thing for an |
| 1223 // HTML sanitizer to do. Conversely, any HTML sanitizer that didn't |
| 1224 // filter sources for <script>, <link>, <embed>, <object>, <iframe> tags |
| 1225 // would be considered vulnerable in and of itself. |
| 1226 do_not_prompt_for_login = true; |
| 1227 load_flags |= net::LOAD_DO_NOT_USE_EMBEDDED_IDENTITY; |
| 1228 } |
| 1229 |
| 1230 // Sync loads should have maximum priority and should be the only |
| 1231 // requets that have the ignore limits flag set. |
| 1232 if (is_sync_load) { |
| 1233 DCHECK_EQ(request_data.priority, net::MAXIMUM_PRIORITY); |
| 1234 DCHECK_NE(load_flags & net::LOAD_IGNORE_LIMITS, 0); |
| 1235 } else { |
| 1236 DCHECK_EQ(load_flags & net::LOAD_IGNORE_LIMITS, 0); |
| 1237 } |
| 1238 new_request->SetLoadFlags(load_flags); |
| 1219 | 1239 |
| 1220 // Make extra info and read footer (contains request ID). | 1240 // Make extra info and read footer (contains request ID). |
| 1221 ResourceRequestInfoImpl* extra_info = | 1241 ResourceRequestInfoImpl* extra_info = |
| 1222 new ResourceRequestInfoImpl( | 1242 new ResourceRequestInfoImpl( |
| 1223 process_type, | 1243 process_type, |
| 1224 child_id, | 1244 child_id, |
| 1225 route_id, | 1245 route_id, |
| 1226 request_data.origin_pid, | 1246 request_data.origin_pid, |
| 1227 request_id, | 1247 request_id, |
| 1228 request_data.render_frame_id, | 1248 request_data.render_frame_id, |
| 1229 request_data.is_main_frame, | 1249 request_data.is_main_frame, |
| 1230 request_data.parent_is_main_frame, | 1250 request_data.parent_is_main_frame, |
| 1231 request_data.parent_render_frame_id, | 1251 request_data.parent_render_frame_id, |
| 1232 request_data.resource_type, | 1252 request_data.resource_type, |
| 1233 request_data.transition_type, | 1253 request_data.transition_type, |
| 1234 request_data.should_replace_current_entry, | 1254 request_data.should_replace_current_entry, |
| 1235 false, // is download | 1255 false, // is download |
| 1236 false, // is stream | 1256 false, // is stream |
| 1237 allow_download, | 1257 allow_download, |
| 1238 request_data.has_user_gesture, | 1258 request_data.has_user_gesture, |
| 1239 request_data.enable_load_timing, | 1259 request_data.enable_load_timing, |
| 1240 request_data.enable_upload_progress, | 1260 request_data.enable_upload_progress, |
| 1261 do_not_prompt_for_login, |
| 1241 request_data.referrer_policy, | 1262 request_data.referrer_policy, |
| 1242 request_data.visiblity_state, | 1263 request_data.visiblity_state, |
| 1243 resource_context, | 1264 resource_context, |
| 1244 filter_->GetWeakPtr(), | 1265 filter_->GetWeakPtr(), |
| 1245 !is_sync_load); | 1266 !is_sync_load); |
| 1246 // Request takes ownership. | 1267 // Request takes ownership. |
| 1247 extra_info->AssociateWithRequest(new_request.get()); | 1268 extra_info->AssociateWithRequest(new_request.get()); |
| 1248 | 1269 |
| 1249 if (new_request->url().SchemeIs(url::kBlobScheme)) { | 1270 if (new_request->url().SchemeIs(url::kBlobScheme)) { |
| 1250 // Hang on to a reference to ensure the blob is not released prior | 1271 // Hang on to a reference to ensure the blob is not released prior |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1474 int route_id, | 1495 int route_id, |
| 1475 bool download, | 1496 bool download, |
| 1476 ResourceContext* context) { | 1497 ResourceContext* context) { |
| 1477 return new ResourceRequestInfoImpl( | 1498 return new ResourceRequestInfoImpl( |
| 1478 PROCESS_TYPE_RENDERER, | 1499 PROCESS_TYPE_RENDERER, |
| 1479 child_id, | 1500 child_id, |
| 1480 route_id, | 1501 route_id, |
| 1481 0, | 1502 0, |
| 1482 request_id_, | 1503 request_id_, |
| 1483 MSG_ROUTING_NONE, // render_frame_id | 1504 MSG_ROUTING_NONE, // render_frame_id |
| 1484 false, // is_main_frame | 1505 false, // is_main_frame |
| 1485 false, // parent_is_main_frame | 1506 false, // parent_is_main_frame |
| 1486 -1, // parent_render_frame_id | 1507 -1, // parent_render_frame_id |
| 1487 RESOURCE_TYPE_SUB_RESOURCE, | 1508 RESOURCE_TYPE_SUB_RESOURCE, |
| 1488 ui::PAGE_TRANSITION_LINK, | 1509 ui::PAGE_TRANSITION_LINK, |
| 1489 false, // should_replace_current_entry | 1510 false, // should_replace_current_entry |
| 1490 download, // is_download | 1511 download, // is_download |
| 1491 false, // is_stream | 1512 false, // is_stream |
| 1492 download, // allow_download | 1513 download, // allow_download |
| 1493 false, // has_user_gesture | 1514 false, // has_user_gesture |
| 1494 false, // enable_load_timing | 1515 false, // enable_load_timing |
| 1495 false, // enable_upload_progress | 1516 false, // enable_upload_progress |
| 1517 false, // do_not_prompt_for_login |
| 1496 blink::WebReferrerPolicyDefault, | 1518 blink::WebReferrerPolicyDefault, |
| 1497 blink::WebPageVisibilityStateVisible, | 1519 blink::WebPageVisibilityStateVisible, |
| 1498 context, | 1520 context, |
| 1499 base::WeakPtr<ResourceMessageFilter>(), // filter | 1521 base::WeakPtr<ResourceMessageFilter>(), // filter |
| 1500 true); // is_async | 1522 true); // is_async |
| 1501 } | 1523 } |
| 1502 | 1524 |
| 1503 void ResourceDispatcherHostImpl::OnRenderViewHostCreated(int child_id, | 1525 void ResourceDispatcherHostImpl::OnRenderViewHostCreated(int child_id, |
| 1504 int route_id, | 1526 int route_id, |
| 1505 bool is_visible, | 1527 bool is_visible, |
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1940 params.transition, | 1962 params.transition, |
| 1941 // should_replace_current_entry. This was only maintained at layer for | 1963 // should_replace_current_entry. This was only maintained at layer for |
| 1942 // request transfers and isn't needed for browser-side navigations. | 1964 // request transfers and isn't needed for browser-side navigations. |
| 1943 false, | 1965 false, |
| 1944 false, // is download | 1966 false, // is download |
| 1945 false, // is stream | 1967 false, // is stream |
| 1946 params.allow_download, | 1968 params.allow_download, |
| 1947 info.navigation_params.has_user_gesture, | 1969 info.navigation_params.has_user_gesture, |
| 1948 true, // enable_load_timing | 1970 true, // enable_load_timing |
| 1949 false, // enable_upload_progress | 1971 false, // enable_upload_progress |
| 1972 false, // do_not_prompt_for_login |
| 1950 params.referrer.policy, | 1973 params.referrer.policy, |
| 1951 // TODO(davidben): This is only used for prerenders. Replace | 1974 // TODO(davidben): This is only used for prerenders. Replace |
| 1952 // is_showing with something for that. Or maybe it just comes from the | 1975 // is_showing with something for that. Or maybe it just comes from the |
| 1953 // same mechanism as the cookie one. | 1976 // same mechanism as the cookie one. |
| 1954 blink::WebPageVisibilityStateVisible, | 1977 blink::WebPageVisibilityStateVisible, |
| 1955 resource_context, | 1978 resource_context, |
| 1956 base::WeakPtr<ResourceMessageFilter>(), // filter | 1979 base::WeakPtr<ResourceMessageFilter>(), // filter |
| 1957 true); | 1980 true); |
| 1958 // Request takes ownership. | 1981 // Request takes ownership. |
| 1959 extra_info->AssociateWithRequest(new_request.get()); | 1982 extra_info->AssociateWithRequest(new_request.get()); |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2314 // Although EV status is irrelevant to sub-frames and sub-resources, we have | 2337 // Although EV status is irrelevant to sub-frames and sub-resources, we have |
| 2315 // to perform EV certificate verification on all resources because an HTTP | 2338 // to perform EV certificate verification on all resources because an HTTP |
| 2316 // keep-alive connection created to load a sub-frame or a sub-resource could | 2339 // keep-alive connection created to load a sub-frame or a sub-resource could |
| 2317 // be reused to load a main frame. | 2340 // be reused to load a main frame. |
| 2318 load_flags |= net::LOAD_VERIFY_EV_CERT; | 2341 load_flags |= net::LOAD_VERIFY_EV_CERT; |
| 2319 if (request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME) { | 2342 if (request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME) { |
| 2320 load_flags |= net::LOAD_MAIN_FRAME; | 2343 load_flags |= net::LOAD_MAIN_FRAME; |
| 2321 } else if (request_data.resource_type == RESOURCE_TYPE_SUB_FRAME) { | 2344 } else if (request_data.resource_type == RESOURCE_TYPE_SUB_FRAME) { |
| 2322 load_flags |= net::LOAD_SUB_FRAME; | 2345 load_flags |= net::LOAD_SUB_FRAME; |
| 2323 } else if (request_data.resource_type == RESOURCE_TYPE_PREFETCH) { | 2346 } else if (request_data.resource_type == RESOURCE_TYPE_PREFETCH) { |
| 2324 load_flags |= (net::LOAD_PREFETCH | net::LOAD_DO_NOT_PROMPT_FOR_LOGIN); | 2347 load_flags |= net::LOAD_PREFETCH; |
| 2325 } else if (request_data.resource_type == RESOURCE_TYPE_FAVICON) { | |
| 2326 load_flags |= net::LOAD_DO_NOT_PROMPT_FOR_LOGIN; | |
| 2327 } else if (request_data.resource_type == RESOURCE_TYPE_IMAGE) { | |
| 2328 // Prevent third-party image content from prompting for login, as this | |
| 2329 // is often a scam to extract credentials for another domain from the user. | |
| 2330 // Only block image loads, as the attack applies largely to the "src" | |
| 2331 // property of the <img> tag. It is common for web properties to allow | |
| 2332 // untrusted values for <img src>; this is considered a fair thing for an | |
| 2333 // HTML sanitizer to do. Conversely, any HTML sanitizer that didn't | |
| 2334 // filter sources for <script>, <link>, <embed>, <object>, <iframe> tags | |
| 2335 // would be considered vulnerable in and of itself. | |
| 2336 HttpAuthRelationType relation_type = HttpAuthRelationTypeOf( | |
| 2337 request_data.url, request_data.first_party_for_cookies); | |
| 2338 if (relation_type == HTTP_AUTH_RELATION_BLOCKED_CROSS) { | |
| 2339 load_flags |= (net::LOAD_DO_NOT_USE_EMBEDDED_IDENTITY | | |
| 2340 net::LOAD_DO_NOT_PROMPT_FOR_LOGIN); | |
| 2341 } | |
| 2342 } | 2348 } |
| 2343 | 2349 |
| 2344 if (is_sync_load) | 2350 if (is_sync_load) |
| 2345 load_flags |= net::LOAD_IGNORE_LIMITS; | 2351 load_flags |= net::LOAD_IGNORE_LIMITS; |
| 2346 | 2352 |
| 2347 ChildProcessSecurityPolicyImpl* policy = | 2353 ChildProcessSecurityPolicyImpl* policy = |
| 2348 ChildProcessSecurityPolicyImpl::GetInstance(); | 2354 ChildProcessSecurityPolicyImpl::GetInstance(); |
| 2349 if (!policy->CanSendCookiesForOrigin(child_id, request_data.url)) { | 2355 if (!policy->CanSendCookiesForOrigin(child_id, request_data.url)) { |
| 2350 load_flags |= (net::LOAD_DO_NOT_SEND_COOKIES | | 2356 load_flags |= (net::LOAD_DO_NOT_SEND_COOKIES | |
| 2351 net::LOAD_DO_NOT_SEND_AUTH_DATA | | 2357 net::LOAD_DO_NOT_SEND_AUTH_DATA | |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2362 | 2368 |
| 2363 // Add a flag to selectively bypass the data reduction proxy if the resource | 2369 // Add a flag to selectively bypass the data reduction proxy if the resource |
| 2364 // type is not an image. | 2370 // type is not an image. |
| 2365 if (request_data.resource_type != RESOURCE_TYPE_IMAGE) | 2371 if (request_data.resource_type != RESOURCE_TYPE_IMAGE) |
| 2366 load_flags |= net::LOAD_BYPASS_DATA_REDUCTION_PROXY; | 2372 load_flags |= net::LOAD_BYPASS_DATA_REDUCTION_PROXY; |
| 2367 | 2373 |
| 2368 return load_flags; | 2374 return load_flags; |
| 2369 } | 2375 } |
| 2370 | 2376 |
| 2371 } // namespace content | 2377 } // namespace content |
| OLD | NEW |