Chromium Code Reviews| 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 fc4fb7ebb44b3d03035eeaf15baa705b2ea4cc4b..83abe9d4436be4ac83ee6117f8a56943d7245ea3 100644 |
| --- a/content/browser/loader/navigation_url_loader_network_service.cc |
| +++ b/content/browser/loader/navigation_url_loader_network_service.cc |
| @@ -10,10 +10,12 @@ |
| #include "base/memory/ptr_util.h" |
| #include "base/trace_event/trace_event.h" |
| #include "content/browser/blob_storage/chrome_blob_storage_context.h" |
| +#include "content/browser/frame_host/frame_tree_node.h" |
| #include "content/browser/frame_host/navigation_request_info.h" |
| #include "content/browser/loader/navigation_resource_handler.h" |
| #include "content/browser/loader/navigation_resource_throttle.h" |
| #include "content/browser/loader/navigation_url_loader_delegate.h" |
| +#include "content/browser/webui/web_ui_url_loader_factory.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/global_request_id.h" |
| #include "content/public/browser/navigation_data.h" |
| @@ -23,6 +25,7 @@ |
| #include "content/public/common/referrer.h" |
| #include "content/public/common/service_manager_connection.h" |
| #include "content/public/common/service_names.mojom.h" |
| +#include "content/public/common/url_constants.h" |
| #include "net/base/load_flags.h" |
| #include "net/url_request/url_request_context.h" |
| #include "services/service_manager/public/cpp/connector.h" |
| @@ -61,34 +64,37 @@ NavigationURLLoaderNetworkService::NavigationURLLoaderNetworkService( |
| ServiceWorkerNavigationHandle* service_worker_handle, |
| AppCacheNavigationHandle* appcache_handle, |
| NavigationURLLoaderDelegate* delegate) |
| - : delegate_(delegate), binding_(this), weak_factory_(this) { |
| + : delegate_(delegate), |
| + binding_(this), |
| + request_info_(std::move(request_info)), |
| + weak_factory_(this) { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP1( |
| "navigation", "Navigation timeToResponseStarted", this, |
| - request_info->common_params.navigation_start, "FrameTreeNode id", |
| - request_info->frame_tree_node_id); |
| + request_info_->common_params.navigation_start, "FrameTreeNode id", |
| + request_info_->frame_tree_node_id); |
| // TODO(scottmg): Port over stuff from RDHI::BeginNavigationRequest() here. |
| auto new_request = base::MakeUnique<ResourceRequest>(); |
| - new_request->method = request_info->common_params.method; |
| - new_request->url = request_info->common_params.url; |
| - new_request->first_party_for_cookies = request_info->first_party_for_cookies; |
| + new_request->method = request_info_->common_params.method; |
| + new_request->url = request_info_->common_params.url; |
| + new_request->first_party_for_cookies = request_info_->first_party_for_cookies; |
| new_request->priority = net::HIGHEST; |
| // The code below to set fields like request_initiator, referrer, etc has |
| // been copied from ResourceDispatcherHostImpl. We did not refactor the |
| // common code into a function, because RDHI uses accessor functions on the |
| // URLRequest class to set these fields. whereas we use ResourceRequest here. |
| - new_request->request_initiator = request_info->begin_params.initiator_origin; |
| - new_request->referrer = request_info->common_params.referrer.url; |
| - new_request->referrer_policy = request_info->common_params.referrer.policy; |
| - new_request->headers = request_info->begin_params.headers; |
| + new_request->request_initiator = request_info_->begin_params.initiator_origin; |
| + new_request->referrer = request_info_->common_params.referrer.url; |
| + new_request->referrer_policy = request_info_->common_params.referrer.policy; |
| + new_request->headers = request_info_->begin_params.headers; |
| - int load_flags = request_info->begin_params.load_flags; |
| + int load_flags = request_info_->begin_params.load_flags; |
| load_flags |= net::LOAD_VERIFY_EV_CERT; |
| - if (request_info->is_main_frame) |
| + if (request_info_->is_main_frame) |
| load_flags |= net::LOAD_MAIN_FRAME_DEPRECATED; |
| // Sync loads should have maximum priority and should be the only |
| @@ -97,7 +103,7 @@ NavigationURLLoaderNetworkService::NavigationURLLoaderNetworkService( |
| new_request->load_flags = load_flags; |
| - new_request->request_body = request_info->common_params.post_data.get(); |
| + new_request->request_body = request_info_->common_params.post_data.get(); |
| if (new_request->request_body.get()) { |
| // The request body may need blob handles to be added to it. This |
| // functionality has to be invoked on the IO thread. |
| @@ -199,13 +205,25 @@ void NavigationURLLoaderNetworkService::StartURLRequest( |
| mojom::URLLoaderClientPtr url_loader_client_ptr_to_pass; |
| binding_.Bind(&url_loader_client_ptr_to_pass); |
| - GetURLLoaderFactory().CreateLoaderAndStart( |
| - mojo::MakeRequest(&url_loader_associated_ptr_), 0 /* routing_id? */, |
| - 0 /* request_id? */, mojom::kURLLoadOptionSendSSLInfo, *request, |
| - std::move(url_loader_client_ptr_to_pass)); |
| + mojom::URLLoaderFactory* factory = nullptr; |
| + mojom::URLLoaderFactoryPtr factory_ptr; |
|
yzshen1
2017/05/05 19:54:07
This |factory_ptr| will be destroyed when it goes
jam
2017/05/05 22:19:39
Thanks, I didn't realize this. Added comment. agre
|
| + if (request->url.SchemeIs(kChromeUIScheme)) { |
| + FrameTreeNode* frame_tree_node = |
| + FrameTreeNode::GloballyFindByID(request_info_->frame_tree_node_id); |
| + factory_ptr = GetWebUIURLLoader(frame_tree_node); |
| + factory = factory_ptr.get(); |
| + } |
| + |
| + if (!factory) |
| + factory = GetURLLoaderFactory(); |
| + |
| + factory->CreateLoaderAndStart(mojo::MakeRequest(&url_loader_associated_ptr_), |
| + 0 /* routing_id? */, 0 /* request_id? */, |
| + mojom::kURLLoadOptionSendSSLInfo, *request, |
| + std::move(url_loader_client_ptr_to_pass)); |
| } |
| -mojom::URLLoaderFactory& |
| +mojom::URLLoaderFactory* |
| NavigationURLLoaderNetworkService::GetURLLoaderFactory() { |
| // TODO(yzshen): We will need the ability to customize the factory per frame |
| // e.g., for appcache or service worker. |
| @@ -214,7 +232,7 @@ NavigationURLLoaderNetworkService::GetURLLoaderFactory() { |
| mojom::kNetworkServiceName, &g_url_loader_factory.Get()); |
| } |
| - return *g_url_loader_factory.Get(); |
| + return g_url_loader_factory.Get().get(); |
| } |
| } // namespace content |