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

Unified Diff: content/browser/loader/navigation_url_loader_network_service.cc

Issue 2906543002: Add support for reading blobs when using the network service. (Closed)
Patch Set: review comment Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
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 f484182c77a6da1dc5bcdbfd8f230265fb458370..b6c4a157b44fb8d60276117fec4e97535dc6537a 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::URLLoaderRequest 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::URLLoaderRequest url_loader_request_;
@@ -248,14 +248,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(
@@ -267,8 +269,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_request)),
base::Passed(std::move(url_loader_client_ptr_to_pass)),

Powered by Google App Engine
This is Rietveld 408576698