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

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

Issue 2886843006: servificied service worker interception
Patch Set: 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 f7d814d7f136aa336bfd55720a1cb4967237c4fe..7befe2376f6e0e971abd4fe61aa4fcb6fa126869 100644
--- a/content/browser/loader/navigation_url_loader_network_service.cc
+++ b/content/browser/loader/navigation_url_loader_network_service.cc
@@ -52,82 +52,91 @@ WebContents* GetWebContentsFromFrameTreeNodeID(int frame_tree_node_id) {
return WebContentsImpl::FromFrameTreeNode(frame_tree_node);
}
-void PrepareNavigationStartOnIO(
- std::unique_ptr<ResourceRequest> resource_request,
- ResourceContext* resource_context,
- ServiceWorkerNavigationHandleCore* service_worker_navigation_handle_core,
- AppCacheNavigationHandleCore* appcache_handle_core,
- NavigationRequestInfo* request_info,
- mojom::URLLoaderFactoryPtrInfo factory_from_ui,
- 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_to_pass,
- std::unique_ptr<service_manager::Connector> connector) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- const ResourceType resource_type = request_info->is_main_frame
- ? RESOURCE_TYPE_MAIN_FRAME
- : RESOURCE_TYPE_SUB_FRAME;
-
- if (resource_request->request_body) {
- AttachRequestBodyBlobDataHandles(resource_request->request_body.get(),
- resource_context);
- }
+} // namespace
- mojom::URLLoaderFactoryPtr url_loader_factory_ptr;
- if (service_worker_navigation_handle_core) {
- RequestContextFrameType frame_type =
- request_info->is_main_frame ? REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL
- : REQUEST_CONTEXT_FRAME_TYPE_NESTED;
-
- storage::BlobStorageContext* blob_storage_context = GetBlobStorageContext(
- GetChromeBlobStorageContextForResourceContext(resource_context));
- url_loader_factory_ptr =
- ServiceWorkerRequestHandler::InitializeForNavigationNetworkService(
- *resource_request, resource_context,
- service_worker_navigation_handle_core, blob_storage_context,
- request_info->begin_params.skip_service_worker, resource_type,
- request_info->begin_params.request_context_type, frame_type,
- request_info->are_ancestors_secure,
- request_info->common_params.post_data, web_contents_getter);
- }
+class NavigationURLLoaderNetworkService::IOLoader {
+ public:
+ IOLoader() {}
+ ~IOLoader() {}
+ void PrepareNavigationStartOnIO(
+ std::unique_ptr<ResourceRequest> resource_request,
+ ResourceContext* resource_context,
+ ServiceWorkerNavigationHandleCore* service_worker_navigation_handle_core,
+ AppCacheNavigationHandleCore* appcache_handle_core,
+ NavigationRequestInfo* request_info,
+ mojom::URLLoaderFactoryPtrInfo factory_from_ui,
+ 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_to_pass,
+ std::unique_ptr<service_manager::Connector> connector) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ const ResourceType resource_type = request_info->is_main_frame
+ ? RESOURCE_TYPE_MAIN_FRAME
+ : RESOURCE_TYPE_SUB_FRAME;
+
+ if (resource_request->request_body) {
+ AttachRequestBodyBlobDataHandles(resource_request->request_body.get(),
+ resource_context);
+ }
- // TODO(scottmg): We need to rework AppCache to have it return a
- // URLLoaderFactoryPtr[Info] here. We should also try to have it return
- // synchronously in as many cases as possible (especially when there's no
- // AppCache) to simplify and speed the common case.
- if (false /*appcache_handle_core*/) {
- AppCacheRequestHandler::InitializeForNavigationNetworkService(
- std::move(resource_request), resource_context, appcache_handle_core,
- resource_type,
- base::Callback<void(
- mojom::URLLoaderFactoryPtrInfo,
- std::unique_ptr<ResourceRequest>)>() /* TODO(ananta) */);
- return;
- }
+ mojom::URLLoaderFactoryPtr url_loader_factory_ptr;
+ if (service_worker_navigation_handle_core) {
+ RequestContextFrameType frame_type =
+ request_info->is_main_frame ? REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL
+ : REQUEST_CONTEXT_FRAME_TYPE_NESTED;
+
+ storage::BlobStorageContext* blob_storage_context = GetBlobStorageContext(
+ GetChromeBlobStorageContextForResourceContext(resource_context));
+ url_loader_factory_ptr =
+ ServiceWorkerRequestHandler::InitializeForNavigationNetworkService(
+ *resource_request, resource_context,
+ service_worker_navigation_handle_core, blob_storage_context,
+ request_info->begin_params.skip_service_worker, resource_type,
+ request_info->begin_params.request_context_type, frame_type,
+ request_info->are_ancestors_secure,
+ request_info->common_params.post_data, web_contents_getter);
+ }
- // If we haven't gotten one from the above, then use the one the UI thread
- // gave us, or otherwise fallback to the default.
- mojom::URLLoaderFactory* factory;
- if (url_loader_factory_ptr) {
- factory = url_loader_factory_ptr.get();
- } else {
- if (factory_from_ui.is_valid()) {
- url_loader_factory_ptr.Bind(std::move(factory_from_ui));
+ // TODO(scottmg): We need to rework AppCache to have it return a
+ // URLLoaderFactoryPtr[Info] here. We should also try to have it return
+ // synchronously in as many cases as possible (especially when there's no
+ // AppCache) to simplify and speed the common case.
+ if (false /*appcache_handle_core*/) {
+ AppCacheRequestHandler::InitializeForNavigationNetworkService(
+ std::move(resource_request), resource_context, appcache_handle_core,
+ resource_type,
+ base::Callback<void(
+ mojom::URLLoaderFactoryPtrInfo,
+ std::unique_ptr<ResourceRequest>)>() /* TODO(ananta) */);
+ return;
+ }
+
+ // If we haven't gotten one from the above, then use the one the UI thread
+ // gave us, or otherwise fallback to the default.
+ mojom::URLLoaderFactory* factory;
+ if (url_loader_factory_ptr) {
factory = url_loader_factory_ptr.get();
} else {
- factory = url_loader_factory_getter->GetNetworkFactory()->get();
+ if (factory_from_ui.is_valid()) {
+ url_loader_factory_ptr.Bind(std::move(factory_from_ui));
+ factory = url_loader_factory_ptr.get();
+ } else {
+ factory = url_loader_factory_getter->GetNetworkFactory()->get();
+ }
}
- }
- factory->CreateLoaderAndStart(
- std::move(url_loader_request), 0 /* routing_id? */, 0 /* request_id? */,
- mojom::kURLLoadOptionSendSSLInfo, *resource_request,
- std::move(url_loader_client_to_pass));
-}
+ factory->CreateLoaderAndStart(
+ std::move(url_loader_request), 0 /* routing_id? */, 0 /* request_id? */,
+ mojom::kURLLoadOptionSendSSLInfo, *resource_request,
+ std::move(url_loader_client_to_pass));
+ url_loader_factory_ptr_ = std::move(url_loader_factory_ptr);
+ }
-} // namespace
+ private:
+ mojom::URLLoaderFactoryPtr url_loader_factory_ptr_;
+};
NavigationURLLoaderNetworkService::NavigationURLLoaderNetworkService(
ResourceContext* resource_context,
@@ -193,9 +202,11 @@ NavigationURLLoaderNetworkService::NavigationURLLoaderNetworkService(
factory_ptr_info = GetWebUIURLLoader(frame_tree_node).PassInterface();
}
+ io_loader_.reset(new IOLoader());
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
- base::Bind(&PrepareNavigationStartOnIO,
+ base::Bind(&IOLoader::PrepareNavigationStartOnIO,
+ base::Unretained(io_loader_.get()),
base::Passed(std::move(new_request)), resource_context,
service_worker_navigation_handle
? service_worker_navigation_handle->core()

Powered by Google App Engine
This is Rietveld 408576698