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 fc465a72334d80212a6694fb14bc45d768fa3e95..a4f4e2d5546749887ff7e6d5b38588d870cc44d7 100644 |
--- a/chrome/browser/profiles/profile_impl_io_data.cc |
+++ b/chrome/browser/profiles/profile_impl_io_data.cc |
@@ -54,11 +54,16 @@ |
#include "extensions/common/constants.h" |
#include "net/base/cache_type.h" |
#include "net/base/sdch_manager.h" |
+#include "net/cert/cert_policy_enforcer.h" |
+#include "net/cert/cert_verifier.h" |
+#include "net/cert/multi_log_ct_verifier.h" |
+#include "net/dns/host_resolver.h" |
#include "net/ftp/ftp_network_layer.h" |
#include "net/http/http_cache.h" |
#include "net/http/http_server_properties_manager.h" |
#include "net/sdch/sdch_owner.h" |
#include "net/ssl/channel_id_service.h" |
+#include "net/ssl/ssl_config_service_defaults.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" |
@@ -664,10 +669,42 @@ net::URLRequestContext* ProfileImplIOData::InitializeAppRequestContext( |
app_cache_max_size_, |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)); |
} |
- net::HttpNetworkSession* main_network_session = |
- main_http_factory_->GetSession(); |
+ |
+ // Clone network session parameters from the main HttpNetworkSession, then |
+ // create a unique HttpNetworkSession. Below we create isolated versions of |
+ // the state elements necessary to get a completely isolated socket pool for |
+ // the app. |
+ net::HttpNetworkSession::Params params = |
+ main_http_factory_->GetSession()->params(); |
+ |
+ // Create isolated HostResolver. Assume it's ok to re-use the net_log |
+ // from the main_context. |
+ context->SetHostResolver( |
+ net::HostResolver::CreateDefaultResolver(main_context->net_log())); |
+ params.host_resolver = context->host_resolver(); |
+ params.client_socket_factory = nullptr; // Force creation of new sockets. |
+ context->SetCertVerifier(make_scoped_ptr(net::CertVerifier::CreateDefault())); |
+ params.cert_verifier = context->cert_verifier(); |
+ context->SetChannelIDService(make_scoped_ptr( |
+ new net::ChannelIDService(new net::DefaultChannelIDStore(nullptr), |
+ base::WorkerPool::GetTaskRunner(true)))); |
+ params.channel_id_service = context->channel_id_service(); |
+ context->SetTransportSecurityState( |
+ make_scoped_ptr(new net::TransportSecurityState)); |
+ params.transport_security_state = context->transport_security_state(); |
+ context->SetCertTransparencyVerifier( |
+ make_scoped_ptr(new net::MultiLogCTVerifier())); |
+ params.cert_transparency_verifier = context->cert_transparency_verifier(); |
+ context->SetCertPolicyEnforcer(make_scoped_ptr(new net::CertPolicyEnforcer)); |
+ params.cert_policy_enforcer = context->cert_policy_enforcer(); |
+ context->SetSSLConfigService(new net::SSLConfigServiceDefaults); |
+ params.ssl_config_service = context->ssl_config_service(); |
+ |
+ // Create new, isolated-state HttpNetworkSession. |
+ net::HttpNetworkSession* new_network_session = |
+ new net::HttpNetworkSession(params); |
scoped_ptr<net::HttpCache> app_http_cache = |
- CreateHttpFactory(main_network_session, app_backend); |
+ CreateHttpFactory(new_network_session, app_backend); |
scoped_refptr<net::CookieStore> cookie_store = NULL; |
if (partition_descriptor.in_memory) { |