| 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 {
|
|
|