Index: chromecast/shell/browser/url_request_context_factory.cc |
diff --git a/chromecast/shell/browser/url_request_context_factory.cc b/chromecast/shell/browser/url_request_context_factory.cc |
deleted file mode 100644 |
index 070185589f1b3b7040dcbc28725e2691b9f701f2..0000000000000000000000000000000000000000 |
--- a/chromecast/shell/browser/url_request_context_factory.cc |
+++ /dev/null |
@@ -1,415 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chromecast/shell/browser/url_request_context_factory.h" |
- |
-#include "base/command_line.h" |
-#include "base/files/file_path.h" |
-#include "base/macros.h" |
-#include "base/path_service.h" |
-#include "base/threading/worker_pool.h" |
-#include "chromecast/shell/browser/cast_http_user_agent_settings.h" |
-#include "chromecast/shell/browser/cast_network_delegate.h" |
-#include "content/public/browser/browser_context.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/cookie_store_factory.h" |
-#include "content/public/common/content_switches.h" |
-#include "content/public/common/url_constants.h" |
-#include "net/cert/cert_verifier.h" |
-#include "net/cookies/cookie_store.h" |
-#include "net/dns/host_resolver.h" |
-#include "net/http/http_auth_handler_factory.h" |
-#include "net/http/http_cache.h" |
-#include "net/http/http_network_layer.h" |
-#include "net/http/http_server_properties_impl.h" |
-#include "net/http/http_stream_factory.h" |
-#include "net/ocsp/nss_ocsp.h" |
-#include "net/proxy/proxy_service.h" |
-#include "net/socket/next_proto.h" |
-#include "net/ssl/channel_id_service.h" |
-#include "net/ssl/default_channel_id_store.h" |
-#include "net/ssl/ssl_config_service_defaults.h" |
-#include "net/url_request/data_protocol_handler.h" |
-#include "net/url_request/file_protocol_handler.h" |
-#include "net/url_request/url_request_context.h" |
-#include "net/url_request/url_request_context_getter.h" |
-#include "net/url_request/url_request_intercepting_job_factory.h" |
-#include "net/url_request/url_request_job_factory_impl.h" |
- |
-namespace chromecast { |
-namespace shell { |
- |
-namespace { |
- |
-const char kCookieStoreFile[] = "Cookies"; |
- |
-} // namespace |
- |
-// Private classes to expose URLRequestContextGetter that call back to the |
-// URLRequestContextFactory to create the URLRequestContext on demand. |
-// |
-// The URLRequestContextFactory::URLRequestContextGetter class is used for both |
-// the system and media URLRequestCotnexts. |
-class URLRequestContextFactory::URLRequestContextGetter |
- : public net::URLRequestContextGetter { |
- public: |
- URLRequestContextGetter(URLRequestContextFactory* factory, bool is_media) |
- : is_media_(is_media), |
- factory_(factory) { |
- } |
- |
- virtual net::URLRequestContext* GetURLRequestContext() override { |
- if (!request_context_) { |
- if (is_media_) { |
- request_context_.reset(factory_->CreateMediaRequestContext()); |
- } else { |
- request_context_.reset(factory_->CreateSystemRequestContext()); |
-#if defined(USE_NSS) |
- // Set request context used by NSS for Crl requests. |
- net::SetURLRequestContextForNSSHttpIO(request_context_.get()); |
-#endif // defined(USE_NSS) |
- } |
- } |
- return request_context_.get(); |
- } |
- |
- virtual scoped_refptr<base::SingleThreadTaskRunner> |
- GetNetworkTaskRunner() const override { |
- return content::BrowserThread::GetMessageLoopProxyForThread( |
- content::BrowserThread::IO); |
- } |
- |
- private: |
- virtual ~URLRequestContextGetter() {} |
- |
- const bool is_media_; |
- URLRequestContextFactory* const factory_; |
- scoped_ptr<net::URLRequestContext> request_context_; |
- |
- DISALLOW_COPY_AND_ASSIGN(URLRequestContextGetter); |
-}; |
- |
-// The URLRequestContextFactory::MainURLRequestContextGetter class is used for |
-// the main URLRequestContext. |
-class URLRequestContextFactory::MainURLRequestContextGetter |
- : public net::URLRequestContextGetter { |
- public: |
- MainURLRequestContextGetter( |
- URLRequestContextFactory* factory, |
- content::BrowserContext* browser_context, |
- content::ProtocolHandlerMap* protocol_handlers, |
- content::URLRequestInterceptorScopedVector request_interceptors) |
- : browser_context_(browser_context), |
- factory_(factory), |
- request_interceptors_(request_interceptors.Pass()) { |
- std::swap(protocol_handlers_, *protocol_handlers); |
- } |
- |
- virtual net::URLRequestContext* GetURLRequestContext() override { |
- if (!request_context_) { |
- request_context_.reset(factory_->CreateMainRequestContext( |
- browser_context_, &protocol_handlers_, request_interceptors_.Pass())); |
- protocol_handlers_.clear(); |
- } |
- return request_context_.get(); |
- } |
- |
- virtual scoped_refptr<base::SingleThreadTaskRunner> |
- GetNetworkTaskRunner() const override { |
- return content::BrowserThread::GetMessageLoopProxyForThread( |
- content::BrowserThread::IO); |
- } |
- |
- private: |
- virtual ~MainURLRequestContextGetter() {} |
- |
- content::BrowserContext* const browser_context_; |
- URLRequestContextFactory* const factory_; |
- content::ProtocolHandlerMap protocol_handlers_; |
- content::URLRequestInterceptorScopedVector request_interceptors_; |
- scoped_ptr<net::URLRequestContext> request_context_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MainURLRequestContextGetter); |
-}; |
- |
-URLRequestContextFactory::URLRequestContextFactory() |
- : app_network_delegate_(CastNetworkDelegate::Create()), |
- system_network_delegate_(CastNetworkDelegate::Create()), |
- system_dependencies_initialized_(false), |
- main_dependencies_initialized_(false), |
- media_dependencies_initialized_(false) { |
-} |
- |
-URLRequestContextFactory::~URLRequestContextFactory() { |
-} |
- |
-void URLRequestContextFactory::InitializeOnUIThread() { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- // Cast http user agent settings must be initialized in UI thread |
- // because it registers itself to pref notification observer which is not |
- // thread safe. |
- http_user_agent_settings_.reset(new CastHttpUserAgentSettings()); |
- |
- // Proxy config service should be initialized in UI thread, since |
- // ProxyConfigServiceDelegate on Android expects UI thread. |
- proxy_config_service_.reset(net::ProxyService::CreateSystemProxyConfigService( |
- content::BrowserThread::GetMessageLoopProxyForThread( |
- content::BrowserThread::IO), |
- content::BrowserThread::GetMessageLoopProxyForThread( |
- content::BrowserThread::FILE))); |
-} |
- |
-net::URLRequestContextGetter* URLRequestContextFactory::CreateMainGetter( |
- content::BrowserContext* browser_context, |
- content::ProtocolHandlerMap* protocol_handlers, |
- content::URLRequestInterceptorScopedVector request_interceptors) { |
- DCHECK(!main_getter_.get()) |
- << "Main URLRequestContextGetter already initialized"; |
- main_getter_ = new MainURLRequestContextGetter(this, |
- browser_context, |
- protocol_handlers, |
- request_interceptors.Pass()); |
- return main_getter_.get(); |
-} |
- |
-net::URLRequestContextGetter* URLRequestContextFactory::GetMainGetter() { |
- CHECK(main_getter_.get()); |
- return main_getter_.get(); |
-} |
- |
-net::URLRequestContextGetter* URLRequestContextFactory::GetSystemGetter() { |
- if (!system_getter_.get()) { |
- system_getter_ = new URLRequestContextGetter(this, false); |
- } |
- return system_getter_.get(); |
-} |
- |
-net::URLRequestContextGetter* URLRequestContextFactory::GetMediaGetter() { |
- if (!media_getter_.get()) { |
- media_getter_ = new URLRequestContextGetter(this, true); |
- } |
- return media_getter_.get(); |
-} |
- |
-void URLRequestContextFactory::InitializeSystemContextDependencies() { |
- if (system_dependencies_initialized_) |
- return; |
- |
- host_resolver_ = net::HostResolver::CreateDefaultResolver(NULL); |
- |
- // TODO(lcwu): http://crbug.com/392352. For performance and security reasons, |
- // a persistent (on-disk) HttpServerProperties and ChannelIDService might be |
- // desirable in the future. |
- channel_id_service_.reset( |
- new net::ChannelIDService(new net::DefaultChannelIDStore(NULL), |
- base::WorkerPool::GetTaskRunner(true))); |
- |
- cert_verifier_.reset(net::CertVerifier::CreateDefault()); |
- |
- ssl_config_service_ = new net::SSLConfigServiceDefaults; |
- |
- transport_security_state_.reset(new net::TransportSecurityState()); |
- http_auth_handler_factory_.reset( |
- net::HttpAuthHandlerFactory::CreateDefault(host_resolver_.get())); |
- |
- http_server_properties_.reset(new net::HttpServerPropertiesImpl); |
- |
- proxy_service_.reset(net::ProxyService::CreateUsingSystemProxyResolver( |
- proxy_config_service_.release(), 0, NULL)); |
- system_dependencies_initialized_ = true; |
-} |
- |
-void URLRequestContextFactory::InitializeMainContextDependencies( |
- net::HttpTransactionFactory* transaction_factory, |
- content::ProtocolHandlerMap* protocol_handlers, |
- content::URLRequestInterceptorScopedVector request_interceptors) { |
- if (main_dependencies_initialized_) |
- return; |
- |
- main_transaction_factory_.reset(transaction_factory); |
- scoped_ptr<net::URLRequestJobFactoryImpl> job_factory( |
- new net::URLRequestJobFactoryImpl()); |
- // Keep ProtocolHandlers added in sync with |
- // CastContentBrowserClient::IsHandledURL(). |
- bool set_protocol = false; |
- for (content::ProtocolHandlerMap::iterator it = protocol_handlers->begin(); |
- it != protocol_handlers->end(); |
- ++it) { |
- set_protocol = job_factory->SetProtocolHandler( |
- it->first, it->second.release()); |
- DCHECK(set_protocol); |
- } |
- set_protocol = job_factory->SetProtocolHandler( |
- url::kDataScheme, |
- new net::DataProtocolHandler); |
- DCHECK(set_protocol); |
-#if defined(OS_ANDROID) |
- set_protocol = job_factory->SetProtocolHandler( |
- url::kFileScheme, |
- new net::FileProtocolHandler( |
- content::BrowserThread::GetBlockingPool()-> |
- GetTaskRunnerWithShutdownBehavior( |
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))); |
- DCHECK(set_protocol); |
-#endif // defined(OS_ANDROID) |
- |
- // Set up interceptors in the reverse order. |
- scoped_ptr<net::URLRequestJobFactory> top_job_factory = |
- job_factory.PassAs<net::URLRequestJobFactory>(); |
- for (content::URLRequestInterceptorScopedVector::reverse_iterator i = |
- request_interceptors.rbegin(); |
- i != request_interceptors.rend(); |
- ++i) { |
- top_job_factory.reset(new net::URLRequestInterceptingJobFactory( |
- top_job_factory.Pass(), make_scoped_ptr(*i))); |
- } |
- request_interceptors.weak_clear(); |
- |
- main_job_factory_.reset(top_job_factory.release()); |
- |
- main_dependencies_initialized_ = true; |
-} |
- |
-void URLRequestContextFactory::InitializeMediaContextDependencies( |
- net::HttpTransactionFactory* transaction_factory) { |
- if (media_dependencies_initialized_) |
- return; |
- |
- media_transaction_factory_.reset(transaction_factory); |
- media_dependencies_initialized_ = true; |
-} |
- |
-void URLRequestContextFactory::PopulateNetworkSessionParams( |
- bool ignore_certificate_errors, |
- net::HttpNetworkSession::Params* params) { |
- params->host_resolver = host_resolver_.get(); |
- params->cert_verifier = cert_verifier_.get(); |
- params->channel_id_service = channel_id_service_.get(); |
- params->ssl_config_service = ssl_config_service_.get(); |
- params->transport_security_state = transport_security_state_.get(); |
- params->http_auth_handler_factory = http_auth_handler_factory_.get(); |
- params->http_server_properties = http_server_properties_->GetWeakPtr(); |
- params->ignore_certificate_errors = ignore_certificate_errors; |
- params->proxy_service = proxy_service_.get(); |
- |
- // TODO(lcwu): http://crbug.com/329681. Remove this once spdy is enabled |
- // by default at the content level. |
- params->next_protos = net::NextProtosSpdy31(); |
- params->use_alternate_protocols = true; |
-} |
- |
-net::URLRequestContext* URLRequestContextFactory::CreateSystemRequestContext() { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
- InitializeSystemContextDependencies(); |
- net::HttpNetworkSession::Params system_params; |
- PopulateNetworkSessionParams(false, &system_params); |
- system_transaction_factory_.reset(new net::HttpNetworkLayer( |
- new net::HttpNetworkSession(system_params))); |
- system_job_factory_.reset(new net::URLRequestJobFactoryImpl()); |
- |
- net::URLRequestContext* system_context = new net::URLRequestContext(); |
- system_context->set_host_resolver(host_resolver_.get()); |
- system_context->set_channel_id_service(channel_id_service_.get()); |
- system_context->set_cert_verifier(cert_verifier_.get()); |
- system_context->set_proxy_service(proxy_service_.get()); |
- system_context->set_ssl_config_service(ssl_config_service_.get()); |
- system_context->set_transport_security_state( |
- transport_security_state_.get()); |
- system_context->set_http_auth_handler_factory( |
- http_auth_handler_factory_.get()); |
- system_context->set_http_server_properties( |
- http_server_properties_->GetWeakPtr()); |
- system_context->set_http_transaction_factory( |
- system_transaction_factory_.get()); |
- system_context->set_http_user_agent_settings( |
- http_user_agent_settings_.get()); |
- system_context->set_job_factory(system_job_factory_.get()); |
- system_context->set_cookie_store( |
- content::CreateCookieStore(content::CookieStoreConfig())); |
- system_context->set_network_delegate(system_network_delegate_.get()); |
- return system_context; |
-} |
- |
-net::URLRequestContext* URLRequestContextFactory::CreateMediaRequestContext() { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
- DCHECK(main_getter_.get()) |
- << "Getting MediaRequestContext before MainRequestContext"; |
- net::URLRequestContext* main_context = main_getter_->GetURLRequestContext(); |
- |
- // Set non caching backend. |
- net::HttpNetworkSession* main_session = |
- main_transaction_factory_->GetSession(); |
- InitializeMediaContextDependencies( |
- new net::HttpNetworkLayer(main_session)); |
- |
- net::URLRequestContext* media_context = new net::URLRequestContext(); |
- media_context->CopyFrom(main_context); |
- media_context->set_http_transaction_factory( |
- media_transaction_factory_.get()); |
- return media_context; |
-} |
- |
-net::URLRequestContext* URLRequestContextFactory::CreateMainRequestContext( |
- content::BrowserContext* browser_context, |
- content::ProtocolHandlerMap* protocol_handlers, |
- content::URLRequestInterceptorScopedVector request_interceptors) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
- InitializeSystemContextDependencies(); |
- |
- net::HttpCache::BackendFactory* main_backend = |
- net::HttpCache::DefaultBackend::InMemory(16 * 1024 * 1024); |
- |
- bool ignore_certificate_errors = false; |
- CommandLine* cmd_line = CommandLine::ForCurrentProcess(); |
- if (cmd_line->HasSwitch(switches::kIgnoreCertificateErrors)) { |
- ignore_certificate_errors = true; |
- } |
- net::HttpNetworkSession::Params network_session_params; |
- PopulateNetworkSessionParams(ignore_certificate_errors, |
- &network_session_params); |
- InitializeMainContextDependencies( |
- new net::HttpCache(network_session_params, main_backend), |
- protocol_handlers, |
- request_interceptors.Pass()); |
- |
- content::CookieStoreConfig cookie_config( |
- browser_context->GetPath().Append(kCookieStoreFile), |
- content::CookieStoreConfig::PERSISTANT_SESSION_COOKIES, |
- NULL, NULL); |
- cookie_config.background_task_runner = |
- scoped_refptr<base::SequencedTaskRunner>(); |
- scoped_refptr<net::CookieStore> cookie_store = |
- content::CreateCookieStore(cookie_config); |
- |
- net::URLRequestContext* main_context = new net::URLRequestContext(); |
- main_context->set_host_resolver(host_resolver_.get()); |
- main_context->set_channel_id_service(channel_id_service_.get()); |
- main_context->set_cert_verifier(cert_verifier_.get()); |
- main_context->set_proxy_service(proxy_service_.get()); |
- main_context->set_ssl_config_service(ssl_config_service_.get()); |
- main_context->set_transport_security_state(transport_security_state_.get()); |
- main_context->set_http_auth_handler_factory( |
- http_auth_handler_factory_.get()); |
- main_context->set_http_server_properties( |
- http_server_properties_->GetWeakPtr()); |
- main_context->set_cookie_store(cookie_store.get()); |
- main_context->set_http_user_agent_settings( |
- http_user_agent_settings_.get()); |
- |
- main_context->set_http_transaction_factory( |
- main_transaction_factory_.get()); |
- main_context->set_job_factory(main_job_factory_.get()); |
- main_context->set_network_delegate(app_network_delegate_.get()); |
- return main_context; |
-} |
- |
-void URLRequestContextFactory::InitializeNetworkDelegates() { |
- app_network_delegate_->Initialize(false); |
- LOG(INFO) << "Initialized app network delegate."; |
- system_network_delegate_->Initialize(false); |
- LOG(INFO) << "Initialized system network delegate."; |
-} |
- |
-} // namespace shell |
-} // namespace chromecast |