diff --git a/atom.gyp b/atom.gyp index 47bd744acf30..49e14cf11915 100644 --- a/atom.gyp +++ b/atom.gyp @@ -117,8 +117,6 @@ 'atom/browser/native_window_observer.h', 'atom/browser/net/adapter_request_job.cc', 'atom/browser/net/adapter_request_job.h', - 'atom/browser/net/atom_url_request_context_getter.cc', - 'atom/browser/net/atom_url_request_context_getter.h', 'atom/browser/net/atom_url_request_job_factory.cc', 'atom/browser/net/atom_url_request_job_factory.h', 'atom/browser/net/url_request_string_job.cc', diff --git a/atom/browser/api/atom_api_protocol.cc b/atom/browser/api/atom_api_protocol.cc index 24e7d32b2867..9f29ecbda314 100644 --- a/atom/browser/api/atom_api_protocol.cc +++ b/atom/browser/api/atom_api_protocol.cc @@ -7,7 +7,6 @@ #include "base/stl_util.h" #include "atom/browser/atom_browser_context.h" #include "atom/browser/net/adapter_request_job.h" -#include "atom/browser/net/atom_url_request_context_getter.h" #include "atom/browser/net/atom_url_request_job_factory.h" #include "atom/common/native_mate_converters/file_path_converter.h" #include "content/public/browser/browser_thread.h" @@ -152,8 +151,8 @@ class CustomProtocolHandler : public ProtocolHandler { } // namespace -Protocol::Protocol() : job_factory_( - AtomBrowserContext::Get()->url_request_context_getter()->job_factory()) { +Protocol::Protocol() + : job_factory_(AtomBrowserContext::Get()->job_factory()) { } Protocol::JsProtocolHandler Protocol::GetProtocolHandler( diff --git a/atom/browser/atom_access_token_store.cc b/atom/browser/atom_access_token_store.cc index af0f3c1b27db..653c37a00191 100644 --- a/atom/browser/atom_access_token_store.cc +++ b/atom/browser/atom_access_token_store.cc @@ -7,7 +7,6 @@ #include #include "atom/browser/atom_browser_context.h" -#include "atom/browser/net/atom_url_request_context_getter.h" #ifndef GOOGLEAPIS_API_KEY #define GOOGLEAPIS_API_KEY "AIzaSyAQfxPJiounkhOjODEO5ZieffeBv6yft2Q" diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index 024e8b3d0fca..dca8019877ba 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -9,7 +9,6 @@ #include "atom/browser/atom_browser_main_parts.h" #include "atom/browser/atom_resource_dispatcher_host_delegate.h" #include "atom/browser/native_window.h" -#include "atom/browser/net/atom_url_request_context_getter.h" #include "atom/browser/window_list.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" @@ -49,14 +48,6 @@ AtomBrowserClient::AtomBrowserClient() AtomBrowserClient::~AtomBrowserClient() { } -net::URLRequestContextGetter* AtomBrowserClient::CreateRequestContext( - content::BrowserContext* browser_context, - content::ProtocolHandlerMap* protocol_handlers, - content::ProtocolHandlerScopedVector protocol_interceptors) { - return static_cast(browser_context)-> - CreateRequestContext(protocol_handlers); -} - void AtomBrowserClient::ResourceDispatcherHostCreated() { resource_dispatcher_delegate_.reset(new AtomResourceDispatcherHostDelegate); content::ResourceDispatcherHost::Get()->SetDelegate( diff --git a/atom/browser/atom_browser_client.h b/atom/browser/atom_browser_client.h index 1016744ed3d9..9c2b2a98efc8 100644 --- a/atom/browser/atom_browser_client.h +++ b/atom/browser/atom_browser_client.h @@ -20,10 +20,6 @@ class AtomBrowserClient : public brightray::BrowserClient { protected: // content::ContentBrowserClient: - net::URLRequestContextGetter* CreateRequestContext( - content::BrowserContext* browser_context, - content::ProtocolHandlerMap* protocol_handlers, - content::ProtocolHandlerScopedVector protocol_interceptors) OVERRIDE; virtual void ResourceDispatcherHostCreated() OVERRIDE; virtual content::AccessTokenStore* CreateAccessTokenStore() OVERRIDE; virtual void OverrideWebkitPrefs(content::RenderViewHost* render_view_host, diff --git a/atom/browser/atom_browser_context.cc b/atom/browser/atom_browser_context.cc index 02e6f9793b29..295bfa4a33b8 100644 --- a/atom/browser/atom_browser_context.cc +++ b/atom/browser/atom_browser_context.cc @@ -5,72 +5,55 @@ #include "atom/browser/atom_browser_context.h" #include "atom/browser/atom_browser_main_parts.h" -#include "atom/browser/net/atom_url_request_context_getter.h" +#include "atom/browser/net/atom_url_request_job_factory.h" +#include "base/threading/sequenced_worker_pool.h" +#include "base/threading/worker_pool.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/resource_context.h" -#include "vendor/brightray/browser/network_delegate.h" - -namespace atom { +#include "content/public/common/url_constants.h" +#include "net/url_request/data_protocol_handler.h" +#include "net/url_request/file_protocol_handler.h" +#include "net/url_request/protocol_intercept_job_factory.h" using content::BrowserThread; -class AtomResourceContext : public content::ResourceContext { - public: - AtomResourceContext() : getter_(NULL) {} - - void set_url_request_context_getter(AtomURLRequestContextGetter* getter) { - getter_ = getter; - } - - protected: - virtual net::HostResolver* GetHostResolver() OVERRIDE { - DCHECK(getter_); - return getter_->host_resolver(); - } - - virtual net::URLRequestContext* GetRequestContext() OVERRIDE { - DCHECK(getter_); - return getter_->GetURLRequestContext(); - } - - virtual bool AllowMicAccess(const GURL& origin) OVERRIDE { - return true; - } - - virtual bool AllowCameraAccess(const GURL& origin) OVERRIDE { - return true; - } - - private: - AtomURLRequestContextGetter* getter_; - - DISALLOW_COPY_AND_ASSIGN(AtomResourceContext); -}; +namespace atom { AtomBrowserContext::AtomBrowserContext() - : resource_context_(new AtomResourceContext) { + : job_factory_(NULL) { } AtomBrowserContext::~AtomBrowserContext() { } -AtomURLRequestContextGetter* AtomBrowserContext::CreateRequestContext( - content::ProtocolHandlerMap* protocol_handlers) { - DCHECK(!url_request_getter_); - url_request_getter_ = new AtomURLRequestContextGetter( - GetPath(), - BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO), - BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::FILE), - base::Bind(&AtomBrowserContext::CreateNetworkDelegate, - base::Unretained(this)), - protocol_handlers); +scoped_ptr +AtomBrowserContext::CreateURLRequestJobFactory( + content::ProtocolHandlerMap* handlers, + content::ProtocolHandlerScopedVector* interceptors) { + job_factory_ = new AtomURLRequestJobFactory; + scoped_ptr job_factory(job_factory_); - resource_context_->set_url_request_context_getter(url_request_getter_.get()); - return url_request_getter_.get(); -} + for (content::ProtocolHandlerMap::iterator it = handlers->begin(); + it != handlers->end(); ++it) + job_factory->SetProtocolHandler(it->first, it->second.release()); + handlers->clear(); -content::ResourceContext* AtomBrowserContext::GetResourceContext() { - return resource_context_.get(); + job_factory->SetProtocolHandler( + content::kDataScheme, new net::DataProtocolHandler); + job_factory->SetProtocolHandler( + content::kFileScheme, new net::FileProtocolHandler( + BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior( + base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))); + + // Set up interceptors in the reverse order. + scoped_ptr top_job_factory = + job_factory.PassAs(); + content::ProtocolHandlerScopedVector::reverse_iterator it; + for (it = interceptors->rbegin(); it != interceptors->rend(); ++it) + top_job_factory.reset(new net::ProtocolInterceptJobFactory( + top_job_factory.Pass(), make_scoped_ptr(*it))); + interceptors->weak_clear(); + + return top_job_factory.Pass(); } // static diff --git a/atom/browser/atom_browser_context.h b/atom/browser/atom_browser_context.h index 025b5d15966e..b7979074b0eb 100644 --- a/atom/browser/atom_browser_context.h +++ b/atom/browser/atom_browser_context.h @@ -5,13 +5,11 @@ #ifndef ATOM_BROWSER_ATOM_BROWSER_CONTEXT_H_ #define ATOM_BROWSER_ATOM_BROWSER_CONTEXT_H_ -#include "base/memory/scoped_ptr.h" #include "brightray/browser/browser_context.h" namespace atom { -class AtomResourceContext; -class AtomURLRequestContextGetter; +class AtomURLRequestJobFactory; class AtomBrowserContext : public brightray::BrowserContext { public: @@ -21,22 +19,16 @@ class AtomBrowserContext : public brightray::BrowserContext { // Returns the browser context singleton. static AtomBrowserContext* Get(); - // Creates or returns the request context. - AtomURLRequestContextGetter* CreateRequestContext( - content::ProtocolHandlerMap*); - - AtomURLRequestContextGetter* url_request_context_getter() const { - DCHECK(url_request_getter_); - return url_request_getter_.get(); - } + AtomURLRequestJobFactory* job_factory() const { return job_factory_; } protected: - // content::BrowserContext implementations: - virtual content::ResourceContext* GetResourceContext() OVERRIDE; + // brightray::BrowserContext: + virtual scoped_ptr CreateURLRequestJobFactory( + content::ProtocolHandlerMap* handlers, + content::ProtocolHandlerScopedVector* interceptors) OVERRIDE; private: - scoped_ptr resource_context_; - scoped_refptr url_request_getter_; + AtomURLRequestJobFactory* job_factory_; // Weak reference. DISALLOW_COPY_AND_ASSIGN(AtomBrowserContext); }; diff --git a/atom/browser/net/atom_url_request_context_getter.cc b/atom/browser/net/atom_url_request_context_getter.cc deleted file mode 100644 index 346a05da77bf..000000000000 --- a/atom/browser/net/atom_url_request_context_getter.cc +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright (c) 2013 GitHub, Inc. All rights reserved. -// Use of this source code is governed by the MIT license that can be -// found in the LICENSE file. - -#include "atom/browser/net/atom_url_request_context_getter.h" - -#include - -#include "atom/browser/net/atom_url_request_job_factory.h" -#include "base/strings/string_util.h" -#include "base/threading/sequenced_worker_pool.h" -#include "base/threading/worker_pool.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/cookie_store_factory.h" -#include "content/public/common/url_constants.h" -#include "net/cert/cert_verifier.h" -#include "net/cookies/cookie_monster.h" -#include "net/http/http_auth_handler_factory.h" -#include "net/http/http_cache.h" -#include "net/http/http_server_properties_impl.h" -#include "net/proxy/dhcp_proxy_script_fetcher_factory.h" -#include "net/proxy/proxy_config_service.h" -#include "net/proxy/proxy_script_fetcher_impl.h" -#include "net/proxy/proxy_service.h" -#include "net/proxy/proxy_service_v8.h" -#include "net/ssl/default_server_bound_cert_store.h" -#include "net/ssl/server_bound_cert_service.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/static_http_user_agent_settings.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_storage.h" -#include "vendor/brightray/browser/network_delegate.h" -#include "webkit/browser/quota/special_storage_policy.h" - -namespace atom { - -using content::BrowserThread; - -AtomURLRequestContextGetter::AtomURLRequestContextGetter( - const base::FilePath& base_path, - base::MessageLoop* io_loop, - base::MessageLoop* file_loop, - base::Callback(void)> factory, - content::ProtocolHandlerMap* protocol_handlers) - : base_path_(base_path), - io_loop_(io_loop), - file_loop_(file_loop), - job_factory_(NULL), - network_delegate_factory_(factory) { - // Must first be created on the UI thread. - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - - std::swap(protocol_handlers_, *protocol_handlers); - - // We must create the proxy config service on the UI loop on Linux because it - // must synchronously run on the glib message loop. This will be passed to - // the URLRequestContextStorage on the IO thread in GetURLRequestContext(). - proxy_config_service_.reset( - net::ProxyService::CreateSystemProxyConfigService( - io_loop_->message_loop_proxy(), - file_loop_)); -} - -AtomURLRequestContextGetter::~AtomURLRequestContextGetter() { -} - -net::URLRequestContext* AtomURLRequestContextGetter::GetURLRequestContext() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - - base::AutoLock auto_lock(lock_); - if (!url_request_context_.get()) { - url_request_context_.reset(new net::URLRequestContext()); - network_delegate_ = network_delegate_factory_.Run().Pass(); - url_request_context_->set_network_delegate(network_delegate_.get()); - storage_.reset( - new net::URLRequestContextStorage(url_request_context_.get())); - auto cookie_config = content::CookieStoreConfig( - base_path_.Append(FILE_PATH_LITERAL("Cookies")), - content::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES, - nullptr, - nullptr); - storage_->set_cookie_store(content::CreateCookieStore(cookie_config)); - storage_->set_server_bound_cert_service(new net::ServerBoundCertService( - new net::DefaultServerBoundCertStore(NULL), - base::WorkerPool::GetTaskRunner(true))); - storage_->set_http_user_agent_settings( - new net::StaticHttpUserAgentSettings( - "en-us,en", base::EmptyString())); - - scoped_ptr host_resolver( - net::HostResolver::CreateDefaultResolver(NULL)); - net::DhcpProxyScriptFetcherFactory dhcp_factory; - - storage_->set_cert_verifier(net::CertVerifier::CreateDefault()); - storage_->set_transport_security_state(new net::TransportSecurityState); - storage_->set_proxy_service( - net::CreateProxyServiceUsingV8ProxyResolver( - proxy_config_service_.release(), - new net::ProxyScriptFetcherImpl(url_request_context_.get()), - dhcp_factory.Create(url_request_context_.get()), - host_resolver.get(), - NULL, - url_request_context_->network_delegate())); - storage_->set_ssl_config_service(new net::SSLConfigServiceDefaults); - storage_->set_http_auth_handler_factory( - net::HttpAuthHandlerFactory::CreateDefault(host_resolver.get())); - scoped_ptr server_properties( - new net::HttpServerPropertiesImpl); - storage_->set_http_server_properties(server_properties.Pass()); - - base::FilePath cache_path = base_path_.Append(FILE_PATH_LITERAL("Cache")); - net::HttpCache::DefaultBackend* main_backend = - new net::HttpCache::DefaultBackend( - net::DISK_CACHE, - net::CACHE_BACKEND_DEFAULT, - cache_path, - 0, - BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)); - - net::HttpNetworkSession::Params network_session_params; - network_session_params.cert_verifier = - url_request_context_->cert_verifier(); - network_session_params.transport_security_state = - url_request_context_->transport_security_state(); - network_session_params.server_bound_cert_service = - url_request_context_->server_bound_cert_service(); - network_session_params.proxy_service = - url_request_context_->proxy_service(); - network_session_params.ssl_config_service = - url_request_context_->ssl_config_service(); - network_session_params.http_auth_handler_factory = - url_request_context_->http_auth_handler_factory(); - network_session_params.network_delegate = - url_request_context_->network_delegate(); - network_session_params.http_server_properties = - url_request_context_->http_server_properties(); - network_session_params.ignore_certificate_errors = false; - - // Give |storage_| ownership at the end in case it's |mapped_host_resolver|. - storage_->set_host_resolver(host_resolver.Pass()); - network_session_params.host_resolver = - url_request_context_->host_resolver(); - - net::HttpCache* main_cache = new net::HttpCache( - network_session_params, main_backend); - storage_->set_http_transaction_factory(main_cache); - - DCHECK(!job_factory_); - job_factory_ = new AtomURLRequestJobFactory; - for (content::ProtocolHandlerMap::iterator it = protocol_handlers_.begin(); - it != protocol_handlers_.end(); - ++it) { - bool set_protocol = job_factory_->SetProtocolHandler( - it->first, - it->second.release()); - DCHECK(set_protocol); - } - protocol_handlers_.clear(); - - scoped_ptr file_protocol_handler( - new net::FileProtocolHandler( - content::BrowserThread::GetBlockingPool()-> - GetTaskRunnerWithShutdownBehavior( - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))); - job_factory_->SetProtocolHandler(content::kDataScheme, - new net::DataProtocolHandler); - job_factory_->SetProtocolHandler(content::kFileScheme, - file_protocol_handler.release()); - storage_->set_job_factory(job_factory_); - } - - return url_request_context_.get(); -} - -scoped_refptr - AtomURLRequestContextGetter::GetNetworkTaskRunner() const { - return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO); -} - -net::HostResolver* AtomURLRequestContextGetter::host_resolver() { - return url_request_context_->host_resolver(); -} - -} // namespace atom diff --git a/atom/browser/net/atom_url_request_context_getter.h b/atom/browser/net/atom_url_request_context_getter.h deleted file mode 100644 index a357afb27ff0..000000000000 --- a/atom/browser/net/atom_url_request_context_getter.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2013 GitHub, Inc. All rights reserved. -// Use of this source code is governed by the MIT license that can be -// found in the LICENSE file. - -#ifndef ATOM_BROWSER_NET_ATOM_URL_REQUEST_CONTEXT_GETTER_H_ -#define ATOM_BROWSER_NET_ATOM_URL_REQUEST_CONTEXT_GETTER_H_ - -#include "base/callback.h" -#include "base/files/file_path.h" -#include "base/memory/scoped_ptr.h" -#include "base/synchronization/lock.h" -#include "content/public/browser/content_browser_client.h" -#include "net/url_request/url_request_context_getter.h" - -namespace base { -class MessageLoop; -} - -namespace brightray { -class NetworkDelegate; -} - -namespace net { -class HostResolver; -class ProxyConfigService; -class URLRequestContextStorage; -} - -namespace atom { - -class AtomURLRequestJobFactory; - -class AtomURLRequestContextGetter : public net::URLRequestContextGetter { - public: - AtomURLRequestContextGetter( - const base::FilePath& base_path, - base::MessageLoop* io_loop, - base::MessageLoop* file_loop, - base::Callback(void)>, - content::ProtocolHandlerMap* protocol_handlers); - - // net::URLRequestContextGetter implementations: - virtual net::URLRequestContext* GetURLRequestContext() OVERRIDE; - virtual scoped_refptr - GetNetworkTaskRunner() const OVERRIDE; - - net::HostResolver* host_resolver(); - net::URLRequestContextStorage* storage() const { return storage_.get(); } - AtomURLRequestJobFactory* job_factory() const { return job_factory_; } - - protected: - virtual ~AtomURLRequestContextGetter(); - - private: - base::FilePath base_path_; - base::MessageLoop* io_loop_; - base::MessageLoop* file_loop_; - - AtomURLRequestJobFactory* job_factory_; - base::Callback(void)> - network_delegate_factory_; - - base::Lock lock_; - - scoped_ptr proxy_config_service_; - scoped_ptr network_delegate_; - scoped_ptr storage_; - scoped_ptr url_request_context_; - content::ProtocolHandlerMap protocol_handlers_; - - DISALLOW_COPY_AND_ASSIGN(AtomURLRequestContextGetter); -}; - -} // namespace atom - -#endif // ATOM_BROWSER_NET_ATOM_URL_REQUEST_CONTEXT_GETTER_H_ diff --git a/vendor/brightray b/vendor/brightray index c46e565a81c4..85c66fe32557 160000 --- a/vendor/brightray +++ b/vendor/brightray @@ -1 +1 @@ -Subproject commit c46e565a81c4878ec6b4d819986a651e08b0be98 +Subproject commit 85c66fe32557cb55ba4cc3370accd6f6c05fb06d