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

Unified Diff: chrome/browser/profiles/profile_io_data.cc

Issue 2986733002: Reland of Make ProfileIOData use URLRequestContextBuilder (Closed)
Patch Set: Created 3 years, 5 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
« no previous file with comments | « chrome/browser/profiles/profile_io_data.h ('k') | net/url_request/url_request_context_builder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/profiles/profile_io_data.cc
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 95cc04a90d387ace13564693ec84b65a5e18f0a4..0795a96b6d99822e5d6d3e6ec5f1bad602d5dc0c 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -106,6 +106,7 @@
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_builder.h"
+#include "net/url_request/url_request_context_builder_mojo.h"
#include "net/url_request/url_request_context_storage.h"
#include "net/url_request/url_request_file_job.h"
#include "net/url_request/url_request_intercepting_job_factory.h"
@@ -369,6 +370,15 @@
chrome_context_getter->NotifyContextShuttingDown();
}
+// Wraps |inner_job_factory| with |protocol_handler_interceptor|.
+std::unique_ptr<net::URLRequestJobFactory> CreateURLRequestJobFactory(
+ std::unique_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
+ protocol_handler_interceptor,
+ std::unique_ptr<net::URLRequestJobFactory> inner_job_factory) {
+ protocol_handler_interceptor->Chain(std::move(inner_job_factory));
+ return std::move(protocol_handler_interceptor);
+}
+
} // namespace
void ProfileIOData::InitializeOnUIThread(Profile* profile) {
@@ -677,20 +687,10 @@
main_request_context_->transport_security_state()->SetRequireCTDelegate(
nullptr);
-
- // And the same for the ReportingService.
- main_request_context_storage()->set_reporting_service(
- std::unique_ptr<net::ReportingService>());
-
- // This should be shut down last, as any other requests may initiate more
- // activity when the ProxyService aborts lookups.
- main_request_context_->proxy_service()->OnShutdown();
}
// TODO(ajwong): These AssertNoURLRequests() calls are unnecessary since they
// are already done in the URLRequestContext destructor.
- if (main_request_context_)
- main_request_context_->AssertNoURLRequests();
if (extensions_request_context_)
extensions_request_context_->AssertNoURLRequests();
@@ -782,6 +782,18 @@
bool set_protocol = job_factory->SetProtocolHandler(
it->first, base::WrapUnique(it->second.release()));
DCHECK(set_protocol);
+ }
+ protocol_handlers->clear();
+}
+
+// static
+void ProfileIOData::AddProtocolHandlersToBuilder(
+ net::URLRequestContextBuilder* builder,
+ content::ProtocolHandlerMap* protocol_handlers) {
+ for (auto& protocol_handler : *protocol_handlers) {
+ builder->SetProtocolHandler(
+ protocol_handler.first,
+ base::WrapUnique(protocol_handler.second.release()));
}
protocol_handlers->clear();
}
@@ -945,11 +957,12 @@
// here. Instead, it will inherit its QUIC enablement from IOThread on
// construction, which is fine, as NetHttpSessionParamsObserver also disables
// QUIC there.
- if (!main_request_context_storage_ ||
- !main_request_context_storage_->http_network_session())
+ if (!main_request_context_)
return;
- main_request_context_storage_->http_network_session()->DisableQuic();
+ main_request_context_->http_transaction_factory()
+ ->GetSession()
+ ->DisableQuic();
}
void ProfileIOData::set_data_reduction_proxy_io_data(
@@ -996,23 +1009,21 @@
IOThread* const io_thread = profile_params_->io_thread;
IOThread::Globals* const io_thread_globals = io_thread->globals();
- const base::CommandLine& command_line =
- *base::CommandLine::ForCurrentProcess();
// Create extension request context. Only used for cookies.
extensions_request_context_.reset(new net::URLRequestContext());
extensions_request_context_->set_name("extensions");
// Create the main request context.
- main_request_context_.reset(new net::URLRequestContext());
- main_request_context_storage_.reset(
- new net::URLRequestContextStorage(main_request_context_.get()));
- main_request_context_->set_name("main");
-
- ApplyProfileParamsToContext(main_request_context_.get());
- main_request_context_->set_net_log(io_thread->net_log());
-
- main_request_context_->set_enable_brotli(io_thread_globals->enable_brotli);
+ net::URLRequestContextBuilderMojo builder;
+ builder.set_name("main");
+
+ builder.set_net_log(io_thread->net_log());
+ builder.set_shared_http_user_agent_settings(
+ chrome_http_user_agent_settings_.get());
+ builder.set_ssl_config_service(profile_params_->ssl_config_service);
+
+ builder.set_enable_brotli(io_thread_globals->enable_brotli);
std::unique_ptr<ChromeNetworkDelegate> chrome_network_delegate(
new ChromeNetworkDelegate(
@@ -1025,7 +1036,8 @@
#if BUILDFLAG(ENABLE_EXTENSIONS)
chrome_network_delegate->set_extension_info_map(
profile_params_->extension_info_map.get());
- if (!command_line.HasSwitch(switches::kDisableExtensionsHttpThrottling)) {
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableExtensionsHttpThrottling)) {
extension_throttle_manager_.reset(
new extensions::ExtensionThrottleManager());
}
@@ -1050,33 +1062,19 @@
ConfigureNetworkDelegate(profile_params_->io_thread,
std::move(chrome_network_delegate));
- main_request_context_->set_host_resolver(
+ builder.set_shared_host_resolver(
io_thread_globals->system_request_context->host_resolver());
- main_request_context_->set_http_auth_handler_factory(
+ builder.set_shared_http_auth_handler_factory(
io_thread_globals->system_request_context->http_auth_handler_factory());
- main_request_context_storage_->set_proxy_service(
- ProxyServiceFactory::CreateProxyService(
- io_thread->net_log(), main_request_context_.get(),
- network_delegate.get(),
- std::move(profile_params_->proxy_config_service), command_line,
- io_thread->WpadQuickCheckEnabled(),
- io_thread->PacHttpsUrlStrippingEnabled()));
-
- main_request_context_storage_->set_network_delegate(
- std::move(network_delegate));
-
- std::unique_ptr<net::TransportSecurityState> transport_security_state(
- base::MakeUnique<net::TransportSecurityState>());
- transport_security_persister_.reset(new net::TransportSecurityPersister(
- transport_security_state.get(), profile_params_->path,
- base::CreateSequencedTaskRunnerWithTraits(
- {base::MayBlock(), base::TaskPriority::BACKGROUND,
- base::TaskShutdownBehavior::BLOCK_SHUTDOWN}),
- IsOffTheRecord()));
- main_request_context_storage_->set_transport_security_state(
- std::move(transport_security_state));
+ io_thread->SetUpProxyConfigService(
+ &builder, std::move(profile_params_->proxy_config_service));
+
+ builder.set_network_delegate(std::move(network_delegate));
+
+ builder.set_transport_security_persister_path(profile_params_->path);
+ builder.set_transport_security_persister_readonly(IsOffTheRecord());
// Take ownership over these parameters.
cookie_settings_ = profile_params_->cookie_settings;
@@ -1085,10 +1083,6 @@
extension_info_map_ = profile_params_->extension_info_map;
#endif
- resource_context_->host_resolver_ =
- io_thread_globals->system_request_context->host_resolver();
- resource_context_->request_context_ = main_request_context_.get();
-
if (profile_params_->loading_predictor_observer_) {
loading_predictor_observer_ =
std::move(profile_params_->loading_predictor_observer_);
@@ -1104,7 +1098,7 @@
#endif
if (g_cert_verifier_for_testing) {
- main_request_context_->set_cert_verifier(g_cert_verifier_for_testing);
+ builder.set_shared_cert_verifier(g_cert_verifier_for_testing);
} else {
#if defined(OS_CHROMEOS)
crypto::ScopedPK11Slot public_slot =
@@ -1120,9 +1114,9 @@
cert_verifier_ = base::MakeUnique<net::CachingCertVerifier>(
base::MakeUnique<net::MultiThreadedCertVerifier>(verify_proc.get()));
}
- main_request_context_->set_cert_verifier(cert_verifier_.get());
+ builder.set_shared_cert_verifier(cert_verifier_.get());
#else
- main_request_context_->set_cert_verifier(
+ builder.set_shared_cert_verifier(
io_thread_globals->system_request_context->cert_verifier());
#endif
}
@@ -1141,19 +1135,28 @@
io_thread_globals->ct_logs, io_thread->net_log()));
ct_verifier->SetObserver(ct_tree_tracker_.get());
- main_request_context_storage_->set_cert_transparency_verifier(
- std::move(ct_verifier));
+ builder.set_ct_verifier(std::move(ct_verifier));
io_thread->RegisterSTHObserver(ct_tree_tracker_.get());
ct_tree_tracker_unregistration_ =
base::Bind(&IOThread::UnregisterSTHObserver, base::Unretained(io_thread),
ct_tree_tracker_.get());
- main_request_context_storage_->set_ct_policy_enforcer(
- base::MakeUnique<net::CTPolicyEnforcer>());
-
- InitializeInternal(profile_params_.get(), protocol_handlers,
+ builder.set_http_network_session_params(
+ profile_params_->io_thread->NetworkSessionParams());
+ if (data_reduction_proxy_io_data_.get()) {
+ builder.set_shared_proxy_delegate(
+ data_reduction_proxy_io_data_->proxy_delegate());
+ }
+
+ InitializeInternal(&builder, profile_params_.get(), protocol_handlers,
std::move(request_interceptors));
+
+ main_request_context_ = builder.Build();
+
+ // Attach some things to the URLRequestContextBuilder's
+ // TransportSecurityState. Since no requests have been made yet, safe to do
+ // this even after the call to Build().
net::NetworkTrafficAnnotationTag traffic_annotation =
net::DefineNetworkTrafficAnnotation("domain_security_policy", R"(
@@ -1196,15 +1199,14 @@
main_request_context_->transport_security_state()->SetRequireCTDelegate(
ct_policy_manager_->GetDelegate());
+ resource_context_->host_resolver_ =
+ io_thread_globals->system_request_context->host_resolver();
+ resource_context_->request_context_ = main_request_context_.get();
+
+ OnMainRequestContextCreated(profile_params_.get());
+
profile_params_.reset();
initialized_ = true;
-}
-
-void ProfileIOData::ApplyProfileParamsToContext(
- net::URLRequestContext* context) const {
- context->set_http_user_agent_settings(
- chrome_http_user_agent_settings_.get());
- context->set_ssl_config_service(profile_params_->ssl_config_service.get());
}
std::unique_ptr<net::URLRequestJobFactory>
@@ -1283,6 +1285,69 @@
return std::move(protocol_handler_interceptor);
} else {
return top_job_factory;
+ }
+}
+
+void ProfileIOData::SetUpJobFactoryDefaultsForBuilder(
+ net::URLRequestContextBuilder* builder,
+ content::URLRequestInterceptorScopedVector request_interceptors,
+ std::unique_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
+ protocol_handler_interceptor,
+ net::HostResolver* host_resolver) const {
+ // NOTE(willchan): Keep these protocol handlers in sync with
+ // ProfileIOData::IsHandledProtocol().
+ builder->SetProtocolHandler(
+ url::kFileScheme,
+ base::MakeUnique<net::FileProtocolHandler>(
+ base::CreateTaskRunnerWithTraits(
+ {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})));
+
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+ DCHECK(extension_info_map_.get());
+ // Check only for incognito (and not Chrome OS guest mode GUEST_PROFILE).
+ bool is_incognito = profile_type() == Profile::INCOGNITO_PROFILE;
+ builder->SetProtocolHandler(extensions::kExtensionScheme,
+ extensions::CreateExtensionProtocolHandler(
+ is_incognito, extension_info_map_.get()));
+#endif
+ builder->SetProtocolHandler(url::kDataScheme,
+ base::MakeUnique<net::DataProtocolHandler>());
+#if defined(OS_CHROMEOS)
+ if (profile_params_) {
+ builder->SetProtocolHandler(
+ content::kExternalFileScheme,
+ base::MakeUnique<chromeos::ExternalFileProtocolHandler>(
+ profile_params_->profile));
+ }
+#endif // defined(OS_CHROMEOS)
+#if defined(OS_ANDROID)
+ builder->SetProtocolHandler(
+ url::kContentScheme,
+ content::ContentProtocolHandler::Create(base::CreateTaskRunnerWithTraits(
+ {base::MayBlock(), base::TaskPriority::USER_VISIBLE,
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})));
+#endif
+
+ builder->SetProtocolHandler(
+ url::kAboutScheme,
+ base::MakeUnique<about_handler::AboutProtocolHandler>());
+
+#if !BUILDFLAG(DISABLE_FTP_SUPPORT)
+ builder->SetProtocolHandler(url::kFtpScheme,
+ net::FtpProtocolHandler::Create(host_resolver));
+#endif // !BUILDFLAG(DISABLE_FTP_SUPPORT)
+
+#if BUILDFLAG(DEBUG_DEVTOOLS)
+ request_interceptors.push_back(base::MakeUnique<DebugDevToolsInterceptor>());
+#endif
+
+ builder->SetInterceptors(std::move(request_interceptors));
+
+ if (protocol_handler_interceptor) {
+ builder->set_create_intercepting_job_factory(
+ base::BindOnce(&CreateURLRequestJobFactory,
+ base::Passed(std::move(protocol_handler_interceptor))));
}
}
@@ -1328,25 +1393,6 @@
resource_context_.reset();
}
-std::unique_ptr<net::HttpNetworkSession>
-ProfileIOData::CreateHttpNetworkSession(
- const ProfileParams& profile_params) const {
- net::URLRequestContext* context = main_request_context();
-
- IOThread* const io_thread = profile_params.io_thread;
-
- net::HttpNetworkSession::Context session_context;
- net::URLRequestContextBuilder::SetHttpNetworkSessionComponents(
- context, &session_context);
- if (data_reduction_proxy_io_data_.get()) {
- session_context.proxy_delegate =
- data_reduction_proxy_io_data_->proxy_delegate();
- }
-
- return std::unique_ptr<net::HttpNetworkSession>(new net::HttpNetworkSession(
- io_thread->NetworkSessionParams(), session_context));
-}
-
std::unique_ptr<net::HttpCache> ProfileIOData::CreateMainHttpFactory(
net::HttpNetworkSession* session,
std::unique_ptr<net::HttpCache::BackendFactory> main_backend) const {
« no previous file with comments | « chrome/browser/profiles/profile_io_data.h ('k') | net/url_request/url_request_context_builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698