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

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: fix threading issue with weakptr Created 3 years, 6 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 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)),
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.cc ('k') | content/browser/loader/test_url_loader_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698