| Index: content/browser/loader/navigation_url_loader_network_service.cc
|
| diff --git a/content/browser/loader/navigation_url_loader_network_service.cc b/content/browser/loader/navigation_url_loader_network_service.cc
|
| index 49b37ab1630e3d8622b66d1135b7ea41df2096b9..4136c41cf977a64d301fec1cf407f5d1006f1041 100644
|
| --- a/content/browser/loader/navigation_url_loader_network_service.cc
|
| +++ b/content/browser/loader/navigation_url_loader_network_service.cc
|
| @@ -66,11 +66,13 @@ WebContents* GetWebContentsFromFrameTreeNodeID(int frame_tree_node_id) {
|
| // redirects happen.
|
| class NavigationURLLoaderNetworkService::URLLoaderRequestController {
|
| public:
|
| - URLLoaderRequestController(std::unique_ptr<ResourceRequest> resource_request,
|
| - ResourceContext* resource_context)
|
| + URLLoaderRequestController(
|
| + std::unique_ptr<ResourceRequest> resource_request,
|
| + ResourceContext* resource_context,
|
| + scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter)
|
| : resource_request_(std::move(resource_request)),
|
| resource_context_(resource_context),
|
| - network_factory_(nullptr) {}
|
| + url_loader_factory_getter_(url_loader_factory_getter) {}
|
|
|
| virtual ~URLLoaderRequestController() {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| @@ -81,7 +83,6 @@ class NavigationURLLoaderNetworkService::URLLoaderRequestController {
|
| AppCacheNavigationHandleCore* appcache_handle_core,
|
| std::unique_ptr<NavigationRequestInfo> request_info,
|
| mojom::URLLoaderFactoryPtrInfo factory_for_webui,
|
| - scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter,
|
| const base::Callback<WebContents*(void)>& web_contents_getter,
|
| mojom::URLLoaderAssociatedRequest url_loader_request,
|
| mojom::URLLoaderClientPtr url_loader_client_ptr,
|
| @@ -132,9 +133,6 @@ class NavigationURLLoaderNetworkService::URLLoaderRequestController {
|
| // TODO: add appcache code here.
|
| }
|
|
|
| - DCHECK(!network_factory_);
|
| - network_factory_ = url_loader_factory_getter->GetNetworkFactory()->get();
|
| -
|
| Restart(std::move(url_loader_request), std::move(url_loader_client_ptr));
|
| }
|
|
|
| @@ -167,8 +165,12 @@ class NavigationURLLoaderNetworkService::URLLoaderRequestController {
|
| }
|
|
|
| DCHECK_EQ(handlers_.size(), handler_index_);
|
| - DCHECK(network_factory_ != nullptr);
|
| - MaybeStartLoader(network_factory_);
|
| + if (resource_request_->url.SchemeIs(url::kBlobScheme)) {
|
| + factory = url_loader_factory_getter_->GetBlobFactory()->get();
|
| + } else {
|
| + factory = url_loader_factory_getter_->GetNetworkFactory()->get();
|
| + }
|
| + MaybeStartLoader(factory);
|
| }
|
|
|
| private:
|
| @@ -178,9 +180,7 @@ class NavigationURLLoaderNetworkService::URLLoaderRequestController {
|
| std::unique_ptr<ResourceRequest> resource_request_;
|
| ResourceContext* resource_context_;
|
|
|
| - // The factory for doing a vanilla network request, called when
|
| - // any of other request handlers handle the given request.
|
| - mojom::URLLoaderFactory* network_factory_;
|
| + scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter_;
|
|
|
| // Kept around until we create a loader.
|
| mojom::URLLoaderAssociatedRequest url_loader_request_;
|
| @@ -249,14 +249,16 @@ NavigationURLLoaderNetworkService::NavigationURLLoaderNetworkService(
|
| schemes.end()) {
|
| FrameTreeNode* frame_tree_node =
|
| FrameTreeNode::GloballyFindByID(frame_tree_node_id);
|
| - factory_for_webui = GetWebUIURLLoader(frame_tree_node).PassInterface();
|
| + factory_for_webui = CreateWebUIURLLoader(frame_tree_node).PassInterface();
|
| }
|
|
|
| g_next_request_id--;
|
|
|
| DCHECK(!request_controller_);
|
| request_controller_ = base::MakeUnique<URLLoaderRequestController>(
|
| - std::move(new_request), resource_context);
|
| + std::move(new_request), resource_context,
|
| + static_cast<StoragePartitionImpl*>(storage_partition)
|
| + ->url_loader_factory_getter());
|
| BrowserThread::PostTask(
|
| BrowserThread::IO, FROM_HERE,
|
| base::Bind(
|
| @@ -268,8 +270,6 @@ NavigationURLLoaderNetworkService::NavigationURLLoaderNetworkService(
|
| appcache_handle ? appcache_handle->core() : nullptr,
|
| base::Passed(std::move(request_info)),
|
| base::Passed(std::move(factory_for_webui)),
|
| - static_cast<StoragePartitionImpl*>(storage_partition)
|
| - ->url_loader_factory_getter(),
|
| base::Bind(&GetWebContentsFromFrameTreeNodeID, frame_tree_node_id),
|
| base::Passed(std::move(loader_associated_request)),
|
| base::Passed(std::move(url_loader_client_ptr_to_pass)),
|
|
|