| 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 <stddef.h> | 9 #include <stddef.h> |
| 10 | 10 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 #include "content/browser/appcache/appcache_navigation_handle_core.h" | 37 #include "content/browser/appcache/appcache_navigation_handle_core.h" |
| 38 #include "content/browser/appcache/chrome_appcache_service.h" | 38 #include "content/browser/appcache/chrome_appcache_service.h" |
| 39 #include "content/browser/bad_message.h" | 39 #include "content/browser/bad_message.h" |
| 40 #include "content/browser/blob_storage/chrome_blob_storage_context.h" | 40 #include "content/browser/blob_storage/chrome_blob_storage_context.h" |
| 41 #include "content/browser/child_process_security_policy_impl.h" | 41 #include "content/browser/child_process_security_policy_impl.h" |
| 42 #include "content/browser/frame_host/frame_tree.h" | 42 #include "content/browser/frame_host/frame_tree.h" |
| 43 #include "content/browser/frame_host/navigation_handle_impl.h" | 43 #include "content/browser/frame_host/navigation_handle_impl.h" |
| 44 #include "content/browser/frame_host/navigation_request_info.h" | 44 #include "content/browser/frame_host/navigation_request_info.h" |
| 45 #include "content/browser/frame_host/navigator.h" | 45 #include "content/browser/frame_host/navigator.h" |
| 46 #include "content/browser/loader/async_resource_handler.h" | 46 #include "content/browser/loader/async_resource_handler.h" |
| 47 #include "content/browser/loader/async_revalidation_manager.h" | |
| 48 #include "content/browser/loader/detachable_resource_handler.h" | 47 #include "content/browser/loader/detachable_resource_handler.h" |
| 49 #include "content/browser/loader/intercepting_resource_handler.h" | 48 #include "content/browser/loader/intercepting_resource_handler.h" |
| 50 #include "content/browser/loader/loader_delegate.h" | 49 #include "content/browser/loader/loader_delegate.h" |
| 51 #include "content/browser/loader/mime_sniffing_resource_handler.h" | 50 #include "content/browser/loader/mime_sniffing_resource_handler.h" |
| 52 #include "content/browser/loader/mojo_async_resource_handler.h" | 51 #include "content/browser/loader/mojo_async_resource_handler.h" |
| 53 #include "content/browser/loader/navigation_resource_handler.h" | 52 #include "content/browser/loader/navigation_resource_handler.h" |
| 54 #include "content/browser/loader/navigation_resource_throttle.h" | 53 #include "content/browser/loader/navigation_resource_throttle.h" |
| 55 #include "content/browser/loader/navigation_url_loader_impl_core.h" | 54 #include "content/browser/loader/navigation_url_loader_impl_core.h" |
| 56 #include "content/browser/loader/null_resource_controller.h" | 55 #include "content/browser/loader/null_resource_controller.h" |
| 57 #include "content/browser/loader/power_save_block_resource_throttle.h" | 56 #include "content/browser/loader/power_save_block_resource_throttle.h" |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 ANNOTATE_BENIGN_RACE( | 438 ANNOTATE_BENIGN_RACE( |
| 440 &last_user_gesture_time_, | 439 &last_user_gesture_time_, |
| 441 "We don't care about the precise value, see http://crbug.com/92889"); | 440 "We don't care about the precise value, see http://crbug.com/92889"); |
| 442 | 441 |
| 443 BrowserThread::PostTask(BrowserThread::IO, | 442 BrowserThread::PostTask(BrowserThread::IO, |
| 444 FROM_HERE, | 443 FROM_HERE, |
| 445 base::Bind(&ResourceDispatcherHostImpl::OnInit, | 444 base::Bind(&ResourceDispatcherHostImpl::OnInit, |
| 446 base::Unretained(this))); | 445 base::Unretained(this))); |
| 447 | 446 |
| 448 update_load_states_timer_.reset(new base::RepeatingTimer()); | 447 update_load_states_timer_.reset(new base::RepeatingTimer()); |
| 449 | |
| 450 // stale-while-revalidate currently doesn't work with browser-side navigation. | |
| 451 // Only enable stale-while-revalidate if browser navigation is not enabled. | |
| 452 // | |
| 453 // TODO(ricea): Make stale-while-revalidate and browser-side navigation work | |
| 454 // together. Or disable stale-while-revalidate completely before browser-side | |
| 455 // navigation becomes the default. crbug.com/561610 | |
| 456 if (!IsBrowserSideNavigationEnabled() && | |
| 457 base::FeatureList::IsEnabled(features::kStaleWhileRevalidate)) { | |
| 458 async_revalidation_manager_.reset(new AsyncRevalidationManager); | |
| 459 } | |
| 460 } | 448 } |
| 461 | 449 |
| 462 ResourceDispatcherHostImpl::ResourceDispatcherHostImpl() | 450 ResourceDispatcherHostImpl::ResourceDispatcherHostImpl() |
| 463 : ResourceDispatcherHostImpl(CreateDownloadHandlerIntercept()) {} | 451 : ResourceDispatcherHostImpl(CreateDownloadHandlerIntercept()) {} |
| 464 | 452 |
| 465 ResourceDispatcherHostImpl::~ResourceDispatcherHostImpl() { | 453 ResourceDispatcherHostImpl::~ResourceDispatcherHostImpl() { |
| 466 DCHECK(outstanding_requests_stats_map_.empty()); | 454 DCHECK(outstanding_requests_stats_map_.empty()); |
| 467 DCHECK(g_resource_dispatcher_host); | 455 DCHECK(g_resource_dispatcher_host); |
| 468 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 456 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 469 g_resource_dispatcher_host = NULL; | 457 g_resource_dispatcher_host = NULL; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 loader->GetRequestInfo()->IsDownload() || | 569 loader->GetRequestInfo()->IsDownload() || |
| 582 loader->GetRequestInfo()->is_stream() || | 570 loader->GetRequestInfo()->is_stream() || |
| 583 (loader->GetRequestInfo()->detachable_handler() && | 571 (loader->GetRequestInfo()->detachable_handler() && |
| 584 loader->GetRequestInfo()->detachable_handler()->is_detached()) || | 572 loader->GetRequestInfo()->detachable_handler()->is_detached()) || |
| 585 loader->GetRequestInfo()->requester_info()->IsBrowserSideNavigation() || | 573 loader->GetRequestInfo()->requester_info()->IsBrowserSideNavigation() || |
| 586 loader->is_transferring()); | 574 loader->is_transferring()); |
| 587 } | 575 } |
| 588 #endif | 576 #endif |
| 589 | 577 |
| 590 loaders_to_cancel.clear(); | 578 loaders_to_cancel.clear(); |
| 591 | |
| 592 if (async_revalidation_manager_) { | |
| 593 // Cancelling async revalidations should not result in the creation of new | |
| 594 // requests. Do it before the CHECKs to ensure this does not happen. | |
| 595 async_revalidation_manager_->CancelAsyncRevalidationsForResourceContext( | |
| 596 context); | |
| 597 } | |
| 598 } | 579 } |
| 599 | 580 |
| 600 void ResourceDispatcherHostImpl::ClearLoginDelegateForRequest( | 581 void ResourceDispatcherHostImpl::ClearLoginDelegateForRequest( |
| 601 net::URLRequest* request) { | 582 net::URLRequest* request) { |
| 602 ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(request); | 583 ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(request); |
| 603 if (info) { | 584 if (info) { |
| 604 ResourceLoader* loader = GetLoader(info->GetGlobalRequestID()); | 585 ResourceLoader* loader = GetLoader(info->GetGlobalRequestID()); |
| 605 if (loader) | 586 if (loader) |
| 606 loader->ClearLoginDelegate(); | 587 loader->ClearLoginDelegate(); |
| 607 } | 588 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 730 void ResourceDispatcherHostImpl::DidReceiveRedirect( | 711 void ResourceDispatcherHostImpl::DidReceiveRedirect( |
| 731 ResourceLoader* loader, | 712 ResourceLoader* loader, |
| 732 const GURL& new_url, | 713 const GURL& new_url, |
| 733 ResourceResponse* response) { | 714 ResourceResponse* response) { |
| 734 ResourceRequestInfoImpl* info = loader->GetRequestInfo(); | 715 ResourceRequestInfoImpl* info = loader->GetRequestInfo(); |
| 735 if (delegate_) { | 716 if (delegate_) { |
| 736 delegate_->OnRequestRedirected( | 717 delegate_->OnRequestRedirected( |
| 737 new_url, loader->request(), info->GetContext(), response); | 718 new_url, loader->request(), info->GetContext(), response); |
| 738 } | 719 } |
| 739 | 720 |
| 740 net::URLRequest* request = loader->request(); | |
| 741 if (request->response_info().async_revalidation_required) { | |
| 742 // Async revalidation is only supported for the first redirect leg. | |
| 743 DCHECK_EQ(request->url_chain().size(), 1u); | |
| 744 DCHECK(async_revalidation_manager_); | |
| 745 | |
| 746 async_revalidation_manager_->BeginAsyncRevalidation(request, | |
| 747 scheduler_.get()); | |
| 748 } | |
| 749 | |
| 750 // Remove the LOAD_SUPPORT_ASYNC_REVALIDATION flag if it is present. | |
| 751 // It is difficult to create a URLRequest with the correct flags and headers | |
| 752 // for redirect legs other than the first one. Since stale-while-revalidate in | |
| 753 // combination with redirects isn't needed for experimental use, punt on it | |
| 754 // for now. | |
| 755 // TODO(ricea): Fix this before launching the feature. | |
| 756 if (request->load_flags() & net::LOAD_SUPPORT_ASYNC_REVALIDATION) { | |
| 757 int new_load_flags = | |
| 758 request->load_flags() & ~net::LOAD_SUPPORT_ASYNC_REVALIDATION; | |
| 759 request->SetLoadFlags(new_load_flags); | |
| 760 } | |
| 761 | |
| 762 // Don't notify WebContents observers for requests known to be | 721 // Don't notify WebContents observers for requests known to be |
| 763 // downloads; they aren't really associated with the Webcontents. | 722 // downloads; they aren't really associated with the Webcontents. |
| 764 // Note that not all downloads are known before content sniffing. | 723 // Note that not all downloads are known before content sniffing. |
| 765 if (info->IsDownload()) | 724 if (info->IsDownload()) |
| 766 return; | 725 return; |
| 767 | 726 |
| 768 // Notify the observers on the UI thread. | 727 // Notify the observers on the UI thread. |
| 728 net::URLRequest* request = loader->request(); |
| 769 std::unique_ptr<ResourceRedirectDetails> detail(new ResourceRedirectDetails( | 729 std::unique_ptr<ResourceRedirectDetails> detail(new ResourceRedirectDetails( |
| 770 loader->request(), | 730 loader->request(), |
| 771 !!request->ssl_info().cert, | 731 !!request->ssl_info().cert, |
| 772 new_url)); | 732 new_url)); |
| 773 loader_delegate_->DidGetRedirectForResourceRequest( | 733 loader_delegate_->DidGetRedirectForResourceRequest( |
| 774 info->GetWebContentsGetterForRequest(), std::move(detail)); | 734 info->GetWebContentsGetterForRequest(), std::move(detail)); |
| 775 } | 735 } |
| 776 | 736 |
| 777 void ResourceDispatcherHostImpl::DidReceiveResponse( | 737 void ResourceDispatcherHostImpl::DidReceiveResponse( |
| 778 ResourceLoader* loader, | 738 ResourceLoader* loader, |
| 779 ResourceResponse* response) { | 739 ResourceResponse* response) { |
| 780 ResourceRequestInfoImpl* info = loader->GetRequestInfo(); | 740 ResourceRequestInfoImpl* info = loader->GetRequestInfo(); |
| 781 net::URLRequest* request = loader->request(); | 741 net::URLRequest* request = loader->request(); |
| 782 if (request->was_fetched_via_proxy() && | 742 if (request->was_fetched_via_proxy() && |
| 783 request->was_fetched_via_spdy() && | 743 request->was_fetched_via_spdy() && |
| 784 request->url().SchemeIs(url::kHttpScheme)) { | 744 request->url().SchemeIs(url::kHttpScheme)) { |
| 785 scheduler_->OnReceivedSpdyProxiedHttpResponse( | 745 scheduler_->OnReceivedSpdyProxiedHttpResponse( |
| 786 info->GetChildID(), info->GetRouteID()); | 746 info->GetChildID(), info->GetRouteID()); |
| 787 } | 747 } |
| 788 | 748 |
| 789 if (request->response_info().async_revalidation_required) { | |
| 790 DCHECK(async_revalidation_manager_); | |
| 791 async_revalidation_manager_->BeginAsyncRevalidation(request, | |
| 792 scheduler_.get()); | |
| 793 } | |
| 794 | |
| 795 ProcessRequestForLinkHeaders(request); | 749 ProcessRequestForLinkHeaders(request); |
| 796 | 750 |
| 797 if (delegate_) | 751 if (delegate_) |
| 798 delegate_->OnResponseStarted(request, info->GetContext(), response); | 752 delegate_->OnResponseStarted(request, info->GetContext(), response); |
| 799 | 753 |
| 800 // Don't notify WebContents observers for requests known to be | 754 // Don't notify WebContents observers for requests known to be |
| 801 // downloads; they aren't really associated with the Webcontents. | 755 // downloads; they aren't really associated with the Webcontents. |
| 802 // Note that not all downloads are known before content sniffing. | 756 // Note that not all downloads are known before content sniffing. |
| 803 if (info->IsDownload()) | 757 if (info->IsDownload()) |
| 804 return; | 758 return; |
| (...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1480 // Only block image loads, as the attack applies largely to the "src" | 1434 // Only block image loads, as the attack applies largely to the "src" |
| 1481 // property of the <img> tag. It is common for web properties to allow | 1435 // property of the <img> tag. It is common for web properties to allow |
| 1482 // untrusted values for <img src>; this is considered a fair thing for an | 1436 // untrusted values for <img src>; this is considered a fair thing for an |
| 1483 // HTML sanitizer to do. Conversely, any HTML sanitizer that didn't | 1437 // HTML sanitizer to do. Conversely, any HTML sanitizer that didn't |
| 1484 // filter sources for <script>, <link>, <embed>, <object>, <iframe> tags | 1438 // filter sources for <script>, <link>, <embed>, <object>, <iframe> tags |
| 1485 // would be considered vulnerable in and of itself. | 1439 // would be considered vulnerable in and of itself. |
| 1486 do_not_prompt_for_login = true; | 1440 do_not_prompt_for_login = true; |
| 1487 load_flags |= net::LOAD_DO_NOT_USE_EMBEDDED_IDENTITY; | 1441 load_flags |= net::LOAD_DO_NOT_USE_EMBEDDED_IDENTITY; |
| 1488 } | 1442 } |
| 1489 | 1443 |
| 1490 bool support_async_revalidation = | |
| 1491 !is_sync_load && async_revalidation_manager_ && | |
| 1492 AsyncRevalidationManager::QualifiesForAsyncRevalidation(request_data); | |
| 1493 | |
| 1494 if (support_async_revalidation) | |
| 1495 load_flags |= net::LOAD_SUPPORT_ASYNC_REVALIDATION; | |
| 1496 | |
| 1497 // Sync loads should have maximum priority and should be the only | 1444 // Sync loads should have maximum priority and should be the only |
| 1498 // requets that have the ignore limits flag set. | 1445 // requets that have the ignore limits flag set. |
| 1499 if (is_sync_load) { | 1446 if (is_sync_load) { |
| 1500 DCHECK_EQ(request_data.priority, net::MAXIMUM_PRIORITY); | 1447 DCHECK_EQ(request_data.priority, net::MAXIMUM_PRIORITY); |
| 1501 DCHECK_NE(load_flags & net::LOAD_IGNORE_LIMITS, 0); | 1448 DCHECK_NE(load_flags & net::LOAD_IGNORE_LIMITS, 0); |
| 1502 } else { | 1449 } else { |
| 1503 DCHECK_EQ(load_flags & net::LOAD_IGNORE_LIMITS, 0); | 1450 DCHECK_EQ(load_flags & net::LOAD_IGNORE_LIMITS, 0); |
| 1504 } | 1451 } |
| 1505 new_request->SetLoadFlags(load_flags); | 1452 new_request->SetLoadFlags(load_flags); |
| 1506 | 1453 |
| 1507 // Make extra info and read footer (contains request ID). | 1454 // Make extra info and read footer (contains request ID). |
| 1508 ResourceRequestInfoImpl* extra_info = new ResourceRequestInfoImpl( | 1455 ResourceRequestInfoImpl* extra_info = new ResourceRequestInfoImpl( |
| 1509 requester_info, route_id, | 1456 requester_info, route_id, |
| 1510 -1, // frame_tree_node_id | 1457 -1, // frame_tree_node_id |
| 1511 request_data.origin_pid, request_id, request_data.render_frame_id, | 1458 request_data.origin_pid, request_id, request_data.render_frame_id, |
| 1512 request_data.is_main_frame, request_data.parent_is_main_frame, | 1459 request_data.is_main_frame, request_data.parent_is_main_frame, |
| 1513 request_data.resource_type, request_data.transition_type, | 1460 request_data.resource_type, request_data.transition_type, |
| 1514 request_data.should_replace_current_entry, | 1461 request_data.should_replace_current_entry, |
| 1515 false, // is download | 1462 false, // is download |
| 1516 false, // is stream | 1463 false, // is stream |
| 1517 allow_download, request_data.has_user_gesture, | 1464 allow_download, request_data.has_user_gesture, |
| 1518 request_data.enable_load_timing, request_data.enable_upload_progress, | 1465 request_data.enable_load_timing, request_data.enable_upload_progress, |
| 1519 do_not_prompt_for_login, request_data.referrer_policy, | 1466 do_not_prompt_for_login, request_data.referrer_policy, |
| 1520 request_data.visibility_state, resource_context, report_raw_headers, | 1467 request_data.visibility_state, resource_context, report_raw_headers, |
| 1521 !is_sync_load, | 1468 !is_sync_load, |
| 1522 GetPreviewsState(request_data.previews_state, delegate_, *new_request, | 1469 GetPreviewsState(request_data.previews_state, delegate_, *new_request, |
| 1523 resource_context, | 1470 resource_context, |
| 1524 request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME), | 1471 request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME), |
| 1525 support_async_revalidation ? request_data.headers : std::string(), | |
| 1526 request_data.request_body, request_data.initiated_in_secure_context); | 1472 request_data.request_body, request_data.initiated_in_secure_context); |
| 1527 // Request takes ownership. | 1473 // Request takes ownership. |
| 1528 extra_info->AssociateWithRequest(new_request.get()); | 1474 extra_info->AssociateWithRequest(new_request.get()); |
| 1529 | 1475 |
| 1530 if (new_request->url().SchemeIs(url::kBlobScheme)) { | 1476 if (new_request->url().SchemeIs(url::kBlobScheme)) { |
| 1531 // Hang on to a reference to ensure the blob is not released prior | 1477 // Hang on to a reference to ensure the blob is not released prior |
| 1532 // to the job being started. | 1478 // to the job being started. |
| 1533 storage::BlobProtocolHandler::SetRequestedBlobDataHandle( | 1479 storage::BlobProtocolHandler::SetRequestedBlobDataHandle( |
| 1534 new_request.get(), requester_info->blob_storage_context() | 1480 new_request.get(), requester_info->blob_storage_context() |
| 1535 ->context() | 1481 ->context() |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1829 download, // allow_download | 1775 download, // allow_download |
| 1830 false, // has_user_gesture | 1776 false, // has_user_gesture |
| 1831 false, // enable_load_timing | 1777 false, // enable_load_timing |
| 1832 false, // enable_upload_progress | 1778 false, // enable_upload_progress |
| 1833 false, // do_not_prompt_for_login | 1779 false, // do_not_prompt_for_login |
| 1834 blink::WebReferrerPolicyDefault, blink::WebPageVisibilityStateVisible, | 1780 blink::WebReferrerPolicyDefault, blink::WebPageVisibilityStateVisible, |
| 1835 context, | 1781 context, |
| 1836 false, // report_raw_headers | 1782 false, // report_raw_headers |
| 1837 true, // is_async | 1783 true, // is_async |
| 1838 previews_state, // previews_state | 1784 previews_state, // previews_state |
| 1839 std::string(), // original_headers | |
| 1840 nullptr, // body | 1785 nullptr, // body |
| 1841 false); // initiated_in_secure_context | 1786 false); // initiated_in_secure_context |
| 1842 } | 1787 } |
| 1843 | 1788 |
| 1844 void ResourceDispatcherHostImpl::OnRenderViewHostCreated(int child_id, | 1789 void ResourceDispatcherHostImpl::OnRenderViewHostCreated(int child_id, |
| 1845 int route_id) { | 1790 int route_id) { |
| 1846 scheduler_->OnClientCreated(child_id, route_id); | 1791 scheduler_->OnClientCreated(child_id, route_id); |
| 1847 } | 1792 } |
| 1848 | 1793 |
| 1849 void ResourceDispatcherHostImpl::OnRenderViewHostDeleted(int child_id, | 1794 void ResourceDispatcherHostImpl::OnRenderViewHostDeleted(int child_id, |
| (...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2196 false, // is stream | 2141 false, // is stream |
| 2197 info.common_params.allow_download, info.begin_params.has_user_gesture, | 2142 info.common_params.allow_download, info.begin_params.has_user_gesture, |
| 2198 true, // enable_load_timing | 2143 true, // enable_load_timing |
| 2199 false, // enable_upload_progress | 2144 false, // enable_upload_progress |
| 2200 false, // do_not_prompt_for_login | 2145 false, // do_not_prompt_for_login |
| 2201 info.common_params.referrer.policy, info.page_visibility_state, | 2146 info.common_params.referrer.policy, info.page_visibility_state, |
| 2202 resource_context, info.report_raw_headers, | 2147 resource_context, info.report_raw_headers, |
| 2203 true, // is_async | 2148 true, // is_async |
| 2204 GetPreviewsState(info.common_params.previews_state, delegate_, | 2149 GetPreviewsState(info.common_params.previews_state, delegate_, |
| 2205 *new_request, resource_context, info.is_main_frame), | 2150 *new_request, resource_context, info.is_main_frame), |
| 2206 // The original_headers field is for stale-while-revalidate but the | |
| 2207 // feature doesn't work with PlzNavigate, so it's just a placeholder | |
| 2208 // here. | |
| 2209 // TODO(ricea): Make the feature work with stale-while-revalidate | |
| 2210 // and clean this up. | |
| 2211 std::string(), // original_headers | |
| 2212 info.common_params.post_data, | 2151 info.common_params.post_data, |
| 2213 // TODO(mek): Currently initiated_in_secure_context is only used for | 2152 // TODO(mek): Currently initiated_in_secure_context is only used for |
| 2214 // subresource requests, so it doesn't matter what value it gets here. | 2153 // subresource requests, so it doesn't matter what value it gets here. |
| 2215 // If in the future this changes this should be updated to somehow get a | 2154 // If in the future this changes this should be updated to somehow get a |
| 2216 // meaningful value. | 2155 // meaningful value. |
| 2217 false); // initiated_in_secure_context | 2156 false); // initiated_in_secure_context |
| 2218 extra_info->set_navigation_ui_data(std::move(navigation_ui_data)); | 2157 extra_info->set_navigation_ui_data(std::move(navigation_ui_data)); |
| 2219 | 2158 |
| 2220 // Request takes ownership. | 2159 // Request takes ownership. |
| 2221 extra_info->AssociateWithRequest(new_request.get()); | 2160 extra_info->AssociateWithRequest(new_request.get()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2255 info.begin_params.mixed_content_context_type, | 2194 info.begin_params.mixed_content_context_type, |
| 2256 appcache_handle_core ? appcache_handle_core->GetAppCacheService() | 2195 appcache_handle_core ? appcache_handle_core->GetAppCacheService() |
| 2257 : nullptr, | 2196 : nullptr, |
| 2258 -1, // child_id | 2197 -1, // child_id |
| 2259 -1, // route_id | 2198 -1, // route_id |
| 2260 std::move(handler)); | 2199 std::move(handler)); |
| 2261 | 2200 |
| 2262 BeginRequestInternal(std::move(new_request), std::move(handler)); | 2201 BeginRequestInternal(std::move(new_request), std::move(handler)); |
| 2263 } | 2202 } |
| 2264 | 2203 |
| 2265 void ResourceDispatcherHostImpl::EnableStaleWhileRevalidateForTesting() { | |
| 2266 if (!async_revalidation_manager_) | |
| 2267 async_revalidation_manager_.reset(new AsyncRevalidationManager); | |
| 2268 } | |
| 2269 | |
| 2270 void ResourceDispatcherHostImpl::SetLoaderDelegate( | 2204 void ResourceDispatcherHostImpl::SetLoaderDelegate( |
| 2271 LoaderDelegate* loader_delegate) { | 2205 LoaderDelegate* loader_delegate) { |
| 2272 loader_delegate_ = loader_delegate; | 2206 loader_delegate_ = loader_delegate; |
| 2273 } | 2207 } |
| 2274 | 2208 |
| 2275 void ResourceDispatcherHostImpl::OnRenderFrameDeleted( | 2209 void ResourceDispatcherHostImpl::OnRenderFrameDeleted( |
| 2276 const GlobalFrameRoutingId& global_routing_id) { | 2210 const GlobalFrameRoutingId& global_routing_id) { |
| 2277 CancelRequestsForRoute(global_routing_id); | 2211 CancelRequestsForRoute(global_routing_id); |
| 2278 } | 2212 } |
| 2279 | 2213 |
| (...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2792 &throttles); | 2726 &throttles); |
| 2793 if (!throttles.empty()) { | 2727 if (!throttles.empty()) { |
| 2794 handler.reset(new ThrottlingResourceHandler(std::move(handler), request, | 2728 handler.reset(new ThrottlingResourceHandler(std::move(handler), request, |
| 2795 std::move(throttles))); | 2729 std::move(throttles))); |
| 2796 } | 2730 } |
| 2797 } | 2731 } |
| 2798 return handler; | 2732 return handler; |
| 2799 } | 2733 } |
| 2800 | 2734 |
| 2801 } // namespace content | 2735 } // namespace content |
| OLD | NEW |