Index: chrome/browser/profiles/profile_impl_io_data.cc |
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc |
index 63d388c96e1d4ec25af633a72c9d450118950cc0..d322aa902d03aeaf79de30c444d19ace0f247b8e 100644 |
--- a/chrome/browser/profiles/profile_impl_io_data.cc |
+++ b/chrome/browser/profiles/profile_impl_io_data.cc |
@@ -60,6 +60,8 @@ |
#include "net/http/http_server_properties_manager.h" |
#include "net/sdch/sdch_owner.h" |
#include "net/ssl/channel_id_service.h" |
+#include "net/url_request/url_request_context_builder.h" |
+#include "net/url_request/url_request_context_storage.h" |
#include "net/url_request/url_request_intercepting_job_factory.h" |
#include "net/url_request/url_request_job_factory_impl.h" |
#include "storage/browser/quota/special_storage_policy.h" |
@@ -446,7 +448,8 @@ void ProfileImplIOData::InitializeInternal( |
scoped_ptr<ChromeNetworkDelegate> chrome_network_delegate, |
ProfileParams* profile_params, |
content::ProtocolHandlerMap* protocol_handlers, |
- content::URLRequestInterceptorScopedVector request_interceptors) const { |
+ content::URLRequestInterceptorScopedVector request_interceptors, |
+ net::URLRequestContextBuilder* context_builder) const { |
// Set up a persistent store for use by the network stack on the IO thread. |
base::FilePath network_json_store_filepath( |
profile_path_.Append(chrome::kNetworkPersistentStateFilename)); |
@@ -457,49 +460,31 @@ void ProfileImplIOData::InitializeInternal( |
scoped_ptr<PrefFilter>()); |
network_json_store_->ReadPrefsAsync(nullptr); |
- net::URLRequestContext* main_context = main_request_context(); |
- |
IOThread* const io_thread = profile_params->io_thread; |
IOThread::Globals* const io_thread_globals = io_thread->globals(); |
- chrome_network_delegate->set_predictor(predictor_.get()); |
- |
- if (domain_reliability_monitor_) { |
- domain_reliability::DomainReliabilityMonitor* monitor = |
- domain_reliability_monitor_.get(); |
- monitor->InitURLRequestContext(main_context); |
- monitor->AddBakedInConfigs(); |
- monitor->SetDiscardUploads(!GetMetricsEnabledStateOnIOThread()); |
- chrome_network_delegate->set_domain_reliability_monitor(monitor); |
- } |
- |
- ApplyProfileParamsToContext(main_context); |
+ ApplyProfileParamsToContext(context_builder); |
if (http_server_properties_manager_) |
http_server_properties_manager_->InitializeOnNetworkThread(); |
- main_context->set_transport_security_state(transport_security_state()); |
+ context_builder->set_net_log_unowned(io_thread->net_log()); |
- main_context->set_net_log(io_thread->net_log()); |
+ // The context receives a WeakPtr to the server properties. |
+ // TODO(wjmaclean): presumably this value gets copied to other contexts ... |
+ // it would be nice to avoid this. |
+ context_builder->set_http_server_properties(http_server_properties()); |
- network_delegate_ = data_reduction_proxy_io_data()->CreateNetworkDelegate( |
- chrome_network_delegate.Pass(), true).Pass(); |
- |
- main_context->set_network_delegate(network_delegate_.get()); |
- |
- main_context->set_http_server_properties(http_server_properties()); |
- |
- main_context->set_host_resolver( |
+ context_builder->set_host_resolver_unowned( |
io_thread_globals->host_resolver.get()); |
- main_context->set_cert_transparency_verifier( |
+ context_builder->set_cert_transparency_verifier_unowned( |
io_thread_globals->cert_transparency_verifier.get()); |
- main_context->set_http_auth_handler_factory( |
+ context_builder->set_http_auth_handler_factory_unowned( |
io_thread_globals->http_auth_handler_factory.get()); |
- main_context->set_fraudulent_certificate_reporter( |
- fraudulent_certificate_reporter()); |
- |
- main_context->set_proxy_service(proxy_service()); |
+ // TODO(wjmaclean): proxy_service() is currently built with all sorts of stuff |
+ // from io_globals, so we'll treat it as an unowned pointer for now. |
+ context_builder->set_proxy_service_unowned(proxy_service()); |
scoped_refptr<net::CookieStore> cookie_store = NULL; |
net::ChannelIDService* channel_id_service = NULL; |
@@ -518,8 +503,6 @@ void ProfileImplIOData::InitializeInternal( |
cookie_store = content::CreateCookieStore(cookie_config); |
} |
- main_context->set_cookie_store(cookie_store.get()); |
- |
// Set up server bound cert service. |
if (!channel_id_service) { |
DCHECK(!lazy_params_->channel_id_path.empty()); |
@@ -535,10 +518,9 @@ void ProfileImplIOData::InitializeInternal( |
base::WorkerPool::GetTaskRunner(true)); |
} |
- set_channel_id_service(channel_id_service); |
- main_context->set_channel_id_service(channel_id_service); |
+ context_builder->SetCookieAndChannelIdStores( |
+ cookie_store.get(), make_scoped_ptr(channel_id_service)); |
- scoped_ptr<net::HttpCache> main_cache; |
{ |
// TODO(ttuttle): Remove ScopedTracker below once crbug.com/436671 is fixed. |
tracked_objects::ScopedTracker tracking_profile( |
@@ -550,17 +532,20 @@ void ProfileImplIOData::InitializeInternal( |
lazy_params_->cache_path, |
lazy_params_->cache_max_size, |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)); |
- main_cache = CreateMainHttpFactory(profile_params, main_backend); |
+ context_builder->set_http_transaction_factory_factory( |
+ new ProfileIOData::HttpTransactionFactoryDelegate(this, profile_params, |
+ main_backend)); |
} |
- main_http_factory_.reset(main_cache.release()); |
- main_context->set_http_transaction_factory(main_http_factory_.get()); |
- |
#if !defined(DISABLE_FTP_SUPPORT) |
+ // The host_resolver used here should be the same one used for the main |
+ // URLResourceContext. |
ftp_factory_.reset( |
new net::FtpNetworkLayer(io_thread_globals->host_resolver.get())); |
#endif // !defined(DISABLE_FTP_SUPPORT) |
+ chrome_network_delegate->set_predictor(predictor_.get()); |
+ |
scoped_ptr<net::URLRequestJobFactoryImpl> main_job_factory( |
new net::URLRequestJobFactoryImpl()); |
InstallProtocolHandlers(main_job_factory.get(), protocol_handlers); |
@@ -570,24 +555,48 @@ void ProfileImplIOData::InitializeInternal( |
request_interceptors.insert( |
request_interceptors.begin(), |
data_reduction_proxy_io_data()->CreateInterceptor().release()); |
- main_job_factory_ = SetUpJobFactoryDefaults( |
+ scoped_ptr<net::NetworkDelegate> network_delegate = |
+ data_reduction_proxy_io_data()->CreateNetworkDelegate( |
+ chrome_network_delegate.Pass(), true); |
+ |
+ context_builder->set_job_factory(SetUpJobFactoryDefaults( |
main_job_factory.Pass(), |
request_interceptors.Pass(), |
profile_params->protocol_handler_interceptor.Pass(), |
- main_context->network_delegate(), |
- ftp_factory_.get()); |
- main_context->set_job_factory(main_job_factory_.get()); |
- main_context->set_network_quality_estimator( |
+ network_delegate.get(), |
+ ftp_factory_.get()).Pass()); |
+ // TODO(wjmaclean): make this Pass(), not release(). |
+ context_builder->set_network_delegate(network_delegate.release()); |
+ context_builder->set_network_quality_estimator_unowned( |
io_thread_globals->network_quality_estimator.get()); |
#if defined(ENABLE_EXTENSIONS) |
+ // This call initializes the extensions URLRequestContext *independently* of |
+ // the, as-yet unbuilt, main URLRequestContext. If that ever changes, then |
+ // this should not be called in this function. |
InitializeExtensionsRequestContext(profile_params); |
#endif |
- // Setup SDCH for this profile. |
- sdch_manager_.reset(new net::SdchManager); |
- sdch_policy_.reset(new net::SdchOwner(sdch_manager_.get(), main_context)); |
- main_context->set_sdch_manager(sdch_manager_.get()); |
+ // Start setup of SDCH for this profile. |
+ context_builder->set_sdch_manager(new net::SdchManager); |
+} |
+ |
+void ProfileImplIOData::InitPostContextSetup( |
+ ChromeNetworkDelegate* chrome_network_delegate) const { |
+ net::URLRequestContext* main_context = main_request_context(); |
+ |
+ if (domain_reliability_monitor_) { |
+ domain_reliability::DomainReliabilityMonitor* monitor = |
+ domain_reliability_monitor_.get(); |
+ monitor->InitURLRequestContext(main_context); |
+ monitor->AddBakedInConfigs(); |
+ monitor->SetDiscardUploads(!GetMetricsEnabledStateOnIOThread()); |
+ chrome_network_delegate->set_domain_reliability_monitor(monitor); |
+ } |
+ |
+ // Finish setup of SDCH for this profile. |
+ sdch_policy_.reset( |
+ new net::SdchOwner(main_context->sdch_manager(), main_context)); |
if (ShouldUseSdchPersistence()) { |
sdch_policy_->EnablePersistentStorage(network_json_store_.get()); |
} |
@@ -598,6 +607,7 @@ void ProfileImplIOData::InitializeInternal( |
media_request_context_.reset(InitializeMediaRequestContext(main_context, |
details)); |
+ // lazy_params_ are last used in InitializeMediaRequestContext(). |
lazy_params_.reset(); |
} |
@@ -673,8 +683,9 @@ net::URLRequestContext* ProfileImplIOData::InitializeAppRequestContext( |
app_cache_max_size_, |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)); |
} |
+ DCHECK(main_context->storage()); |
net::HttpNetworkSession* main_network_session = |
- main_http_factory_->GetSession(); |
+ main_context->storage()->http_transaction_factory()->GetSession(); |
scoped_ptr<net::HttpCache> app_http_cache = |
CreateHttpFactory(main_network_session, app_backend); |
@@ -756,8 +767,9 @@ ProfileImplIOData::InitializeMediaRequestContext( |
cache_path, |
cache_max_size, |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)); |
+ DCHECK(original_context->storage()); |
net::HttpNetworkSession* main_network_session = |
- main_http_factory_->GetSession(); |
+ original_context->storage()->http_transaction_factory()->GetSession(); |
scoped_ptr<net::HttpCache> media_http_cache = |
CreateHttpFactory(main_network_session, media_backend); |