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

Side by Side Diff: content/browser/loader/resource_dispatcher_host_impl.cc

Issue 648813002: PlzNavigate: Add first version of NavigationURLLoader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@plz-navigate-prepare
Patch Set: Fix build Created 6 years, 2 months 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 // 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 19 matching lines...) Expand all
30 #include "content/browser/download/download_resource_handler.h" 30 #include "content/browser/download/download_resource_handler.h"
31 #include "content/browser/download/save_file_manager.h" 31 #include "content/browser/download/save_file_manager.h"
32 #include "content/browser/download/save_file_resource_handler.h" 32 #include "content/browser/download/save_file_resource_handler.h"
33 #include "content/browser/fileapi/chrome_blob_storage_context.h" 33 #include "content/browser/fileapi/chrome_blob_storage_context.h"
34 #include "content/browser/frame_host/navigation_request_info.h" 34 #include "content/browser/frame_host/navigation_request_info.h"
35 #include "content/browser/frame_host/navigator.h" 35 #include "content/browser/frame_host/navigator.h"
36 #include "content/browser/loader/async_resource_handler.h" 36 #include "content/browser/loader/async_resource_handler.h"
37 #include "content/browser/loader/buffered_resource_handler.h" 37 #include "content/browser/loader/buffered_resource_handler.h"
38 #include "content/browser/loader/cross_site_resource_handler.h" 38 #include "content/browser/loader/cross_site_resource_handler.h"
39 #include "content/browser/loader/detachable_resource_handler.h" 39 #include "content/browser/loader/detachable_resource_handler.h"
40 #include "content/browser/loader/navigation_resource_handler.h"
41 #include "content/browser/loader/navigation_url_loader_core.h"
40 #include "content/browser/loader/power_save_block_resource_throttle.h" 42 #include "content/browser/loader/power_save_block_resource_throttle.h"
41 #include "content/browser/loader/redirect_to_file_resource_handler.h" 43 #include "content/browser/loader/redirect_to_file_resource_handler.h"
42 #include "content/browser/loader/resource_message_filter.h" 44 #include "content/browser/loader/resource_message_filter.h"
43 #include "content/browser/loader/resource_request_info_impl.h" 45 #include "content/browser/loader/resource_request_info_impl.h"
44 #include "content/browser/loader/stream_resource_handler.h" 46 #include "content/browser/loader/stream_resource_handler.h"
45 #include "content/browser/loader/sync_resource_handler.h" 47 #include "content/browser/loader/sync_resource_handler.h"
46 #include "content/browser/loader/throttling_resource_handler.h" 48 #include "content/browser/loader/throttling_resource_handler.h"
47 #include "content/browser/loader/upload_data_stream_builder.h" 49 #include "content/browser/loader/upload_data_stream_builder.h"
48 #include "content/browser/renderer_host/render_view_host_delegate.h" 50 #include "content/browser/renderer_host/render_view_host_delegate.h"
49 #include "content/browser/renderer_host/render_view_host_impl.h" 51 #include "content/browser/renderer_host/render_view_host_impl.h"
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 return; 355 return;
354 web_contents->DidGetResourceResponseStart(*details.get()); 356 web_contents->DidGetResourceResponseStart(*details.get());
355 } 357 }
356 358
357 bool IsValidatedSCT( 359 bool IsValidatedSCT(
358 const net::SignedCertificateTimestampAndStatus& sct_status) { 360 const net::SignedCertificateTimestampAndStatus& sct_status) {
359 return sct_status.status == net::ct::SCT_STATUS_OK; 361 return sct_status.status == net::ct::SCT_STATUS_OK;
360 } 362 }
361 363
362 storage::BlobStorageContext* GetBlobStorageContext( 364 storage::BlobStorageContext* GetBlobStorageContext(
363 ResourceMessageFilter* filter) { 365 ChromeBlobStorageContext* blob_storage_context) {
364 if (!filter->blob_storage_context()) 366 if (!blob_storage_context)
365 return NULL; 367 return NULL;
366 return filter->blob_storage_context()->context(); 368 return blob_storage_context->context();
367 } 369 }
368 370
369 void AttachRequestBodyBlobDataHandles( 371 void AttachRequestBodyBlobDataHandles(
370 ResourceRequestBody* body, 372 ResourceRequestBody* body,
371 storage::BlobStorageContext* blob_context) { 373 storage::BlobStorageContext* blob_context) {
372 DCHECK(blob_context); 374 DCHECK(blob_context);
373 for (size_t i = 0; i < body->elements()->size(); ++i) { 375 for (size_t i = 0; i < body->elements()->size(); ++i) {
374 const ResourceRequestBody::Element& element = (*body->elements())[i]; 376 const ResourceRequestBody::Element& element = (*body->elements())[i];
375 if (element.type() != ResourceRequestBody::Element::TYPE_BLOB) 377 if (element.type() != ResourceRequestBody::Element::TYPE_BLOB)
376 continue; 378 continue;
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 delete loaders; 537 delete loaders;
536 } else { 538 } else {
537 ++i; 539 ++i;
538 } 540 }
539 } 541 }
540 542
541 #ifndef NDEBUG 543 #ifndef NDEBUG
542 for (LoaderList::iterator i = loaders_to_cancel.begin(); 544 for (LoaderList::iterator i = loaders_to_cancel.begin();
543 i != loaders_to_cancel.end(); ++i) { 545 i != loaders_to_cancel.end(); ++i) {
544 // There is no strict requirement that this be the case, but currently 546 // There is no strict requirement that this be the case, but currently
545 // downloads, streams, detachable requests, and transferred requests are the 547 // downloads, streams, detachable requests, transferred requests, and
546 // only requests that aren't cancelled when the associated processes go 548 // browser-owned requests are the only requests that aren't cancelled when
547 // away. It may be OK for this invariant to change in the future, but if 549 // the associated processes go away. It may be OK for this invariant to
548 // this assertion fires without the invariant changing, then it's indicative 550 // change in the future, but if this assertion fires without the invariant
549 // of a leak. 551 // changing, then it's indicative of a leak.
550 DCHECK((*i)->GetRequestInfo()->IsDownload() || 552 DCHECK((*i)->GetRequestInfo()->IsDownload() ||
551 (*i)->GetRequestInfo()->is_stream() || 553 (*i)->GetRequestInfo()->is_stream() ||
552 ((*i)->GetRequestInfo()->detachable_handler() && 554 ((*i)->GetRequestInfo()->detachable_handler() &&
553 (*i)->GetRequestInfo()->detachable_handler()->is_detached()) || 555 (*i)->GetRequestInfo()->detachable_handler()->is_detached()) ||
556 (*i)->GetRequestInfo()->GetProcessType() == PROCESS_TYPE_BROWSER ||
554 (*i)->is_transferring()); 557 (*i)->is_transferring());
555 } 558 }
556 #endif 559 #endif
557 560
558 loaders_to_cancel.clear(); 561 loaders_to_cancel.clear();
559 562
560 // Validate that no more requests for this context were added. 563 // Validate that no more requests for this context were added.
561 for (LoaderMap::const_iterator i = pending_loaders_.begin(); 564 for (LoaderMap::const_iterator i = pending_loaders_.begin();
562 i != pending_loaders_.end(); ++i) { 565 i != pending_loaders_.end(); ++i) {
563 // http://crbug.com/90971 566 // http://crbug.com/90971
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 const Referrer referrer(request_data.referrer, request_data.referrer_policy); 1164 const Referrer referrer(request_data.referrer, request_data.referrer_policy);
1162 SetReferrerForRequest(new_request.get(), referrer); 1165 SetReferrerForRequest(new_request.get(), referrer);
1163 1166
1164 net::HttpRequestHeaders headers; 1167 net::HttpRequestHeaders headers;
1165 headers.AddHeadersFromString(request_data.headers); 1168 headers.AddHeadersFromString(request_data.headers);
1166 new_request->SetExtraRequestHeaders(headers); 1169 new_request->SetExtraRequestHeaders(headers);
1167 1170
1168 new_request->SetLoadFlags(load_flags); 1171 new_request->SetLoadFlags(load_flags);
1169 1172
1170 storage::BlobStorageContext* blob_context = 1173 storage::BlobStorageContext* blob_context =
1171 GetBlobStorageContext(filter_); 1174 GetBlobStorageContext(filter_->blob_storage_context());
1172 // Resolve elements from request_body and prepare upload data. 1175 // Resolve elements from request_body and prepare upload data.
1173 if (request_data.request_body.get()) { 1176 if (request_data.request_body.get()) {
1174 // |blob_context| could be null when the request is from the plugins because 1177 // |blob_context| could be null when the request is from the plugins because
1175 // ResourceMessageFilters created in PluginProcessHost don't have the blob 1178 // ResourceMessageFilters created in PluginProcessHost don't have the blob
1176 // context. 1179 // context.
1177 if (blob_context) { 1180 if (blob_context) {
1178 // Attaches the BlobDataHandles to request_body not to free the blobs and 1181 // Attaches the BlobDataHandles to request_body not to free the blobs and
1179 // any attached shareable files until upload completion. These data will 1182 // any attached shareable files until upload completion. These data will
1180 // be used in UploadDataStream and ServiceWorkerURLRequestJob. 1183 // be used in UploadDataStream and ServiceWorkerURLRequestJob.
1181 AttachRequestBodyBlobDataHandles( 1184 AttachRequestBodyBlobDataHandles(
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1293 } 1296 }
1294 1297
1295 // Prefetches and <a ping> requests outlive their child process. 1298 // Prefetches and <a ping> requests outlive their child process.
1296 if (!sync_result && IsDetachableResourceType(request_data.resource_type)) { 1299 if (!sync_result && IsDetachableResourceType(request_data.resource_type)) {
1297 handler.reset(new DetachableResourceHandler( 1300 handler.reset(new DetachableResourceHandler(
1298 request, 1301 request,
1299 base::TimeDelta::FromMilliseconds(kDefaultDetachableCancelDelayMs), 1302 base::TimeDelta::FromMilliseconds(kDefaultDetachableCancelDelayMs),
1300 handler.Pass())); 1303 handler.Pass()));
1301 } 1304 }
1302 1305
1303 // Install a CrossSiteResourceHandler for all main frame requests. This will 1306 // PlzNavigate: If using --enable-browser-side-navigation, the
1304 // let us check whether a transfer is required and pause for the unload 1307 // CrossSiteResourceHandler is not needed. This codepath is not used for the
1305 // handler either if so or if a cross-process navigation is already under way. 1308 // actual navigation request, but only the subsequent blob URL load. This does
1306 bool is_swappable_navigation = 1309 // not require request transfers.
1307 request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME; 1310 if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
1308 // If we are using --site-per-process, install it for subframes as well. 1311 switches::kEnableBrowserSideNavigation)) {
1309 if (!is_swappable_navigation && 1312 // Install a CrossSiteResourceHandler for all main frame requests. This will
1310 base::CommandLine::ForCurrentProcess()->HasSwitch( 1313 // check whether a transfer is required and, if so, pause for the UI thread
1311 switches::kSitePerProcess)) { 1314 // to drive the transfer.
1312 is_swappable_navigation = 1315 bool is_swappable_navigation =
1313 request_data.resource_type == RESOURCE_TYPE_SUB_FRAME; 1316 request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME;
1317 // If we are using --site-per-process, install it for subframes as well.
1318 if (!is_swappable_navigation &&
1319 base::CommandLine::ForCurrentProcess()->HasSwitch(
1320 switches::kSitePerProcess)) {
1321 is_swappable_navigation =
1322 request_data.resource_type == RESOURCE_TYPE_SUB_FRAME;
1323 }
1324 if (is_swappable_navigation && process_type == PROCESS_TYPE_RENDERER)
1325 handler.reset(new CrossSiteResourceHandler(handler.Pass(), request));
1314 } 1326 }
1315 if (is_swappable_navigation && process_type == PROCESS_TYPE_RENDERER)
1316 handler.reset(new CrossSiteResourceHandler(handler.Pass(), request));
1317 1327
1328 return AddStandardHandlers(request, request_data.resource_type,
1329 resource_context, filter_->appcache_service(),
1330 child_id, route_id, handler.Pass());
1331 }
1332
1333 scoped_ptr<ResourceHandler> ResourceDispatcherHostImpl::AddStandardHandlers(
1334 net::URLRequest* request,
1335 ResourceType resource_type,
1336 ResourceContext* resource_context,
1337 AppCacheService* appcache_service,
1338 int child_id,
1339 int route_id,
1340 scoped_ptr<ResourceHandler> handler) {
1318 // Insert a buffered event handler before the actual one. 1341 // Insert a buffered event handler before the actual one.
1319 handler.reset( 1342 handler.reset(
1320 new BufferedResourceHandler(handler.Pass(), this, request)); 1343 new BufferedResourceHandler(handler.Pass(), this, request));
1321 1344
1322 ScopedVector<ResourceThrottle> throttles; 1345 ScopedVector<ResourceThrottle> throttles;
1323 if (delegate_) { 1346 if (delegate_) {
1324 delegate_->RequestBeginning(request, 1347 delegate_->RequestBeginning(request,
1325 resource_context, 1348 resource_context,
1326 filter_->appcache_service(), 1349 appcache_service,
1327 request_data.resource_type, 1350 resource_type,
1328 &throttles); 1351 &throttles);
1329 } 1352 }
1330 1353
1331 if (request->has_upload()) { 1354 if (request->has_upload()) {
1332 // Block power save while uploading data. 1355 // Block power save while uploading data.
1333 throttles.push_back(new PowerSaveBlockResourceThrottle()); 1356 throttles.push_back(new PowerSaveBlockResourceThrottle());
1334 } 1357 }
1335 1358
1336 throttles.push_back( 1359 throttles.push_back(
1337 scheduler_->ScheduleRequest(child_id, route_id, request).release()); 1360 scheduler_->ScheduleRequest(child_id, route_id, request).release());
1338 1361
1339 handler.reset( 1362 handler.reset(
1340 new ThrottlingResourceHandler(handler.Pass(), request, throttles.Pass())); 1363 new ThrottlingResourceHandler(handler.Pass(), request, throttles.Pass()));
1341 1364
1365
nasko 2014/10/20 13:52:18 nit: no need for an extra new line.
davidben 2014/10/22 01:32:37 Done.
1342 return handler.Pass(); 1366 return handler.Pass();
1343 } 1367 }
1344 1368
1345 void ResourceDispatcherHostImpl::OnReleaseDownloadedFile(int request_id) { 1369 void ResourceDispatcherHostImpl::OnReleaseDownloadedFile(int request_id) {
1346 UnregisterDownloadedTempFile(filter_->child_id(), request_id); 1370 UnregisterDownloadedTempFile(filter_->child_id(), request_id);
1347 } 1371 }
1348 1372
1349 void ResourceDispatcherHostImpl::OnDataDownloadedACK(int request_id) { 1373 void ResourceDispatcherHostImpl::OnDataDownloadedACK(int request_id) {
1350 // TODO(michaeln): maybe throttle DataDownloaded messages 1374 // TODO(michaeln): maybe throttle DataDownloaded messages
1351 } 1375 }
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1760 return true; 1784 return true;
1761 } 1785 }
1762 1786
1763 void ResourceDispatcherHostImpl::FinishedWithResourcesForRequest( 1787 void ResourceDispatcherHostImpl::FinishedWithResourcesForRequest(
1764 const net::URLRequest* request_) { 1788 const net::URLRequest* request_) {
1765 const ResourceRequestInfoImpl* info = 1789 const ResourceRequestInfoImpl* info =
1766 ResourceRequestInfoImpl::ForRequest(request_); 1790 ResourceRequestInfoImpl::ForRequest(request_);
1767 IncrementOutstandingRequestsCount(-1, *info); 1791 IncrementOutstandingRequestsCount(-1, *info);
1768 } 1792 }
1769 1793
1770 void ResourceDispatcherHostImpl::StartNavigationRequest( 1794 void ResourceDispatcherHostImpl::BeginNavigationRequest(
1795 ResourceContext* resource_context,
1796 int64 frame_tree_node_id,
1771 const CommonNavigationParams& params, 1797 const CommonNavigationParams& params,
1772 const NavigationRequestInfo& info, 1798 const NavigationRequestInfo& info,
1773 scoped_refptr<ResourceRequestBody> request_body, 1799 scoped_refptr<ResourceRequestBody> request_body,
1774 int64 navigation_request_id, 1800 NavigationURLLoaderCore* loader) {
1775 int64 frame_node_id) { 1801 // BeginNavigationRequest currently should only be used for the browser-side
nasko 2014/10/20 13:52:18 nit: prefix the comment with PlzNavigate
davidben 2014/10/22 01:32:37 Done.
1776 NOTIMPLEMENTED(); 1802 // navigations project.
1777 } 1803 CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
1804 switches::kEnableBrowserSideNavigation));
1778 1805
1779 void ResourceDispatcherHostImpl::CancelNavigationRequest( 1806 ResourceType resource_type = info.is_main_frame ?
1780 int64 navigation_request_id, 1807 RESOURCE_TYPE_MAIN_FRAME : RESOURCE_TYPE_SUB_FRAME;
1781 int64 frame_node_id) { 1808
1782 NOTIMPLEMENTED(); 1809 if (is_shutdown_ ||
1810 // TODO(davidben): Check ShouldServiceRequest here. This is important; it
1811 // needs to be checked relative to the child that /requested/ the
1812 // navigation. It's where file upload checks, etc., come in.
1813 (delegate_ && !delegate_->ShouldBeginRequest(
1814 info.navigation_params.method,
1815 params.url,
1816 resource_type,
1817 resource_context))) {
1818 loader->RequestFailedOnIOThread(net::ERR_ABORTED);
1819 return;
1820 }
1821
1822 // http://crbug.com/90971
nasko 2014/10/20 13:52:18 nit: the comment should say a bit more than the bu
davidben 2014/10/22 01:32:37 Done. (Just copied that from elsewhere.)
1823 char url_buf[128];
1824 base::strlcpy(url_buf, params.url.spec().c_str(), arraysize(url_buf));
1825 base::debug::Alias(url_buf);
1826 CHECK(ContainsKey(active_resource_contexts_, resource_context));
1827
1828 const net::URLRequestContext* request_context =
1829 resource_context->GetRequestContext();
1830
1831 int load_flags = info.navigation_params.load_flags;
1832 load_flags |= net::LOAD_VERIFY_EV_CERT;
1833 if (info.is_main_frame) {
1834 load_flags |= net::LOAD_MAIN_FRAME;
1835 } else {
1836 load_flags |= net::LOAD_SUB_FRAME;
1837 }
1838 // Add a flag to selectively bypass the data reduction proxy if the resource
1839 // type is not an image.
1840 load_flags |= net::LOAD_BYPASS_DATA_REDUCTION_PROXY;
1841
1842 // TODO(davidben): BuildLoadFlagsForRequest includes logic for
1843 // CanSendCookiesForOrigin and CanReadRawCookies. Is this needed here?
1844
1845 // Sync loads should have maximum priority and should be the only
1846 // requests that have the ignore limits flag set.
1847 DCHECK_EQ(load_flags & net::LOAD_IGNORE_LIMITS, 0);
1848
1849 // TODO(davidben): OverrideCookieStoreForRenderProcess handling for
1850 // prerender. There isn't a renderer process yet, so we need to use the
nasko 2014/10/20 13:52:18 nit: There actually might be a process, right? We
davidben 2014/10/22 01:32:37 Done.
1851 // ResourceContext or something.
1852 scoped_ptr<net::URLRequest> new_request;
1853 new_request = request_context->CreateRequest(params.url, net::HIGHEST,
1854 nullptr, nullptr);
1855
1856 new_request->set_method(info.navigation_params.method);
1857 new_request->set_first_party_for_cookies(
1858 info.first_party_for_cookies);
1859 if (info.is_main_frame) {
1860 new_request->set_first_party_url_policy(
1861 net::URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT);
1862 }
1863
1864 SetReferrerForRequest(new_request.get(), params.referrer);
1865
1866 net::HttpRequestHeaders headers;
1867 headers.AddHeadersFromString(info.navigation_params.headers);
1868 new_request->SetExtraRequestHeaders(headers);
1869
1870 new_request->SetLoadFlags(load_flags);
1871
1872 // Resolve elements from request_body and prepare upload data.
1873 if (info.navigation_params.request_body.get()) {
1874 storage::BlobStorageContext* blob_context = GetBlobStorageContext(
1875 GetChromeBlobStorageContextForResourceContext(resource_context));
1876 AttachRequestBodyBlobDataHandles(
1877 info.navigation_params.request_body.get(),
1878 blob_context);
1879 // TODO(davidben): The FileSystemContext is null here. In the case where
1880 // another renderer requested this navigation, this should be the same
1881 // FileSystemContext passed into ShouldServiceRequest.
1882 new_request->set_upload(UploadDataStreamBuilder::Build(
1883 info.navigation_params.request_body.get(),
1884 blob_context,
1885 nullptr, // file_system_context
1886 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)
1887 .get()));
1888 }
1889
1890 request_id_--;
1891
1892 // Make extra info and read footer (contains request ID).
1893 //
1894 // TODO(davidben): Associate the request with the FrameTreeNode or tab so that
nasko 2014/10/20 13:52:18 Should be FrameTreeNode, not tab, right? If we ass
davidben 2014/10/22 01:32:37 Well, I'm actually not sure if we have anything th
1895 // IO thread -> UI thread hops will work.
1896 ResourceRequestInfoImpl* extra_info =
1897 new ResourceRequestInfoImpl(
1898 PROCESS_TYPE_BROWSER,
1899 -1, // child_id
1900 -1, // route_id
1901 -1, // request_data.origin_pid,
1902 request_id_,
1903 -1, // request_data.render_frame_id,
1904 info.is_main_frame,
1905 info.parent_is_main_frame,
1906 -1, // request_data.parent_render_frame_id,
1907 resource_type,
1908 params.transition,
1909 // should_replace_current_entry. This was only maintained at layer for
1910 // request transfers and isn't needed for browser-side navigations.
1911 false,
1912 false, // is download
1913 false, // is stream
1914 params.allow_download,
1915 info.navigation_params.has_user_gesture,
1916 true,
1917 params.referrer.policy,
1918 // TODO(davidben): This is only used for prerenders. Replace
1919 // is_showing with something for that. Or maybe it just comes from the
1920 // same mechanism as the cookie one.
1921 blink::WebPageVisibilityStateVisible,
1922 resource_context,
1923 base::WeakPtr<ResourceMessageFilter>(), // filter
1924 true);
1925 // Request takes ownership.
1926 extra_info->AssociateWithRequest(new_request.get());
1927
1928 if (new_request->url().SchemeIs(url::kBlobScheme)) {
1929 // Hang on to a reference to ensure the blob is not released prior
1930 // to the job being started.
1931 ChromeBlobStorageContext* blob_context =
1932 GetChromeBlobStorageContextForResourceContext(resource_context);
1933 storage::BlobProtocolHandler::SetRequestedBlobDataHandle(
1934 new_request.get(),
1935 blob_context->context()->GetBlobDataFromPublicURL(new_request->url()));
1936 }
1937
1938 // TODO(davidben): Attach ServiceWorkerRequestHandler.
1939
1940 // TODO(davidben): Attach AppCacheInterceptor.
1941
1942 scoped_ptr<ResourceHandler> handler(new NavigationResourceHandler(
1943 new_request.get(), loader));
1944
1945 handler = AddStandardHandlers(new_request.get(), resource_type,
1946 resource_context,
1947 nullptr, // TODO(davidben): appcache_service
1948 -1, // TODO(davidben): child_id
1949 -1, // TODO(davidben): route_id
1950 handler.Pass());
1951
1952 BeginRequestInternal(new_request.Pass(), handler.Pass());
1783 } 1953 }
1784 1954
1785 // static 1955 // static
1786 int ResourceDispatcherHostImpl::CalculateApproximateMemoryCost( 1956 int ResourceDispatcherHostImpl::CalculateApproximateMemoryCost(
1787 net::URLRequest* request) { 1957 net::URLRequest* request) {
1788 // The following fields should be a minor size contribution (experimentally 1958 // The following fields should be a minor size contribution (experimentally
1789 // on the order of 100). However since they are variable length, it could 1959 // on the order of 100). However since they are variable length, it could
1790 // in theory be a sizeable contribution. 1960 // in theory be a sizeable contribution.
1791 int strings_cost = request->extra_request_headers().ToString().size() + 1961 int strings_cost = request->extra_request_headers().ToString().size() +
1792 request->original_url().spec().size() + 1962 request->original_url().spec().size() +
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
2156 2326
2157 // Add a flag to selectively bypass the data reduction proxy if the resource 2327 // Add a flag to selectively bypass the data reduction proxy if the resource
2158 // type is not an image. 2328 // type is not an image.
2159 if (request_data.resource_type != RESOURCE_TYPE_IMAGE) 2329 if (request_data.resource_type != RESOURCE_TYPE_IMAGE)
2160 load_flags |= net::LOAD_BYPASS_DATA_REDUCTION_PROXY; 2330 load_flags |= net::LOAD_BYPASS_DATA_REDUCTION_PROXY;
2161 2331
2162 return load_flags; 2332 return load_flags;
2163 } 2333 }
2164 2334
2165 } // namespace content 2335 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698