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)), |