From d01aa5168637716037d311140a4c7ac166d362e8 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 13 Aug 2014 15:09:26 +0800 Subject: [PATCH 1/7] using content::BrowserThread --- brightray/browser/browser_context.cc | 18 ++++++++---------- .../browser/url_request_context_getter.cc | 14 +++++++------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 9628dc6b38..563ad286bd 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -25,6 +25,8 @@ #include "base/nix/xdg_util.h" #endif +using content::BrowserThread; + namespace brightray { class BrowserContext::ResourceContext : public content::ResourceContext { @@ -79,7 +81,7 @@ void BrowserContext::Initialize() { base::PrefServiceFactory prefs_factory; prefs_factory.SetUserPrefsFile(prefs_path, JsonPrefStore::GetTaskRunnerForFile( - prefs_path, content::BrowserThread::GetBlockingPool())); + prefs_path, BrowserThread::GetBlockingPool())); auto registry = make_scoped_refptr(new PrefRegistrySimple); RegisterInternalPrefs(registry); @@ -89,9 +91,9 @@ void BrowserContext::Initialize() { } BrowserContext::~BrowserContext() { - content::BrowserThread::DeleteSoon(content::BrowserThread::IO, - FROM_HERE, - resource_context_.release()); + BrowserThread::DeleteSoon(BrowserThread::IO, + FROM_HERE, + resource_context_.release()); } void BrowserContext::RegisterInternalPrefs(PrefRegistrySimple* registry) { @@ -102,14 +104,10 @@ net::URLRequestContextGetter* BrowserContext::CreateRequestContext( content::ProtocolHandlerMap* protocol_handlers, content::ProtocolHandlerScopedVector protocol_interceptors) { DCHECK(!url_request_getter_); - auto io_loop = content::BrowserThread::UnsafeGetMessageLoopForThread( - content::BrowserThread::IO); - auto file_loop = content::BrowserThread::UnsafeGetMessageLoopForThread( - content::BrowserThread::FILE); url_request_getter_ = new URLRequestContextGetter( GetPath(), - io_loop, - file_loop, + BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO), + BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::FILE), base::Bind(&BrowserContext::CreateNetworkDelegate, base::Unretained(this)), protocol_handlers, protocol_interceptors.Pass()); diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index 578f5a3047..700fe106f6 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -36,6 +36,8 @@ #include "net/url_request/url_request_job_factory_impl.h" #include "webkit/browser/quota/special_storage_policy.h" +using content::BrowserThread; + namespace brightray { URLRequestContextGetter::URLRequestContextGetter( @@ -51,7 +53,7 @@ URLRequestContextGetter::URLRequestContextGetter( network_delegate_factory_(network_delegate_factory), protocol_interceptors_(protocol_interceptors.Pass()) { // Must first be created on the UI thread. - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); std::swap(protocol_handlers_, *protocol_handlers); @@ -67,7 +69,7 @@ net::HostResolver* URLRequestContextGetter::host_resolver() { } net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); if (!url_request_context_.get()) { url_request_context_.reset(new net::URLRequestContext()); @@ -117,8 +119,7 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { net::CACHE_BACKEND_DEFAULT, cache_path, 0, - content::BrowserThread::GetMessageLoopProxyForThread( - content::BrowserThread::CACHE)); + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)); net::HttpNetworkSession::Params network_session_params; network_session_params.cert_verifier = @@ -163,7 +164,7 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { job_factory->SetProtocolHandler( content::kFileScheme, new net::FileProtocolHandler( - content::BrowserThread::GetBlockingPool()-> + BrowserThread::GetBlockingPool()-> GetTaskRunnerWithShutdownBehavior( base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))); @@ -187,8 +188,7 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { scoped_refptr URLRequestContextGetter::GetNetworkTaskRunner() const { - return content::BrowserThread::GetMessageLoopProxyForThread( - content::BrowserThread::IO); + return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO); } } // namespace brightray From 2d03c983e4f4b00f0160e0eb5f3fb2115225fe0e Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 13 Aug 2014 15:48:16 +0800 Subject: [PATCH 2/7] Give user a chance to create custom URLRequestJobFactory. --- brightray/browser/browser_context.cc | 8 ++++++++ brightray/browser/browser_context.h | 10 ++++++++++ brightray/browser/url_request_context_getter.cc | 10 ++++++++++ brightray/browser/url_request_context_getter.h | 6 ++++++ 4 files changed, 34 insertions(+) diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 563ad286bd..308e733d42 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -20,6 +20,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/resource_context.h" #include "content/public/browser/storage_partition.h" +#include "net/url_request/url_request_job_factory_impl.h" #if defined(OS_LINUX) #include "base/nix/xdg_util.h" @@ -109,6 +110,7 @@ net::URLRequestContextGetter* BrowserContext::CreateRequestContext( BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO), BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::FILE), base::Bind(&BrowserContext::CreateNetworkDelegate, base::Unretained(this)), + base::Bind(&BrowserContext::CreateURLRequestJobFactory, base::Unretained(this)), protocol_handlers, protocol_interceptors.Pass()); resource_context_->set_url_request_context_getter(url_request_getter_.get()); @@ -119,6 +121,12 @@ scoped_ptr BrowserContext::CreateNetworkDelegate() { return make_scoped_ptr(new NetworkDelegate).Pass(); } +scoped_ptr BrowserContext::CreateURLRequestJobFactory( + const content::ProtocolHandlerMap& protocol_handlers, + const content::ProtocolHandlerScopedVector& protocol_interceptors) { + return scoped_ptr(); +} + base::FilePath BrowserContext::GetPath() const { return path_; } diff --git a/brightray/browser/browser_context.h b/brightray/browser/browser_context.h index e59c72ab92..1caa216a7a 100644 --- a/brightray/browser/browser_context.h +++ b/brightray/browser/browser_context.h @@ -11,6 +11,10 @@ class PrefRegistrySimple; class PrefService; +namespace browser_context { +class URLRequestJobFactory; +} + namespace brightray { class DownloadManagerDelegate; @@ -38,6 +42,12 @@ class BrowserContext : public content::BrowserContext { // implementation. virtual scoped_ptr CreateNetworkDelegate(); + // Subclasses should override this to provide a custom URLRequestJobFactory + // implementation. + virtual scoped_ptr CreateURLRequestJobFactory( + const content::ProtocolHandlerMap& protocol_handlers, + const content::ProtocolHandlerScopedVector& protocol_interceptors); + virtual base::FilePath GetPath() const OVERRIDE; private: diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index 700fe106f6..80ae8a8e65 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -45,12 +45,14 @@ URLRequestContextGetter::URLRequestContextGetter( base::MessageLoop* io_loop, base::MessageLoop* file_loop, base::Callback(void)> network_delegate_factory, + URLRequestJobFactoryFactory job_factory_factory, content::ProtocolHandlerMap* protocol_handlers, content::ProtocolHandlerScopedVector protocol_interceptors) : base_path_(base_path), io_loop_(io_loop), file_loop_(file_loop), network_delegate_factory_(network_delegate_factory), + job_factory_factory_(job_factory_factory), protocol_interceptors_(protocol_interceptors.Pass()) { // Must first be created on the UI thread. DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); @@ -149,6 +151,14 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { network_session_params, main_backend); storage_->set_http_transaction_factory(main_cache); + // Give user a chance to create their own job factory. + scoped_ptr user_job_factory( + job_factory_factory_.Run(protocol_handlers_, protocol_interceptors_)); + if (user_job_factory) { + storage_->set_job_factory(user_job_factory.release()); + return url_request_context_.get(); + } + scoped_ptr job_factory( new net::URLRequestJobFactoryImpl()); for (auto it = protocol_handlers_.begin(), diff --git a/brightray/browser/url_request_context_getter.h b/brightray/browser/url_request_context_getter.h index ad09e2b409..3f3dfb1d7b 100644 --- a/brightray/browser/url_request_context_getter.h +++ b/brightray/browser/url_request_context_getter.h @@ -25,6 +25,10 @@ namespace brightray { class NetworkDelegate; +typedef base::Callback( + const content::ProtocolHandlerMap& protocol_handlers, + const content::ProtocolHandlerScopedVector& protocol_interceptors)> URLRequestJobFactoryFactory; + class URLRequestContextGetter : public net::URLRequestContextGetter { public: URLRequestContextGetter( @@ -32,6 +36,7 @@ class URLRequestContextGetter : public net::URLRequestContextGetter { base::MessageLoop* io_loop, base::MessageLoop* file_loop, base::Callback(void)>, + URLRequestJobFactoryFactory job_factory_factory, content::ProtocolHandlerMap* protocol_handlers, content::ProtocolHandlerScopedVector protocol_interceptors); virtual ~URLRequestContextGetter(); @@ -48,6 +53,7 @@ class URLRequestContextGetter : public net::URLRequestContextGetter { base::MessageLoop* file_loop_; base::Callback(void)> network_delegate_factory_; + URLRequestJobFactoryFactory job_factory_factory_; scoped_ptr proxy_config_service_; scoped_ptr network_delegate_; From 3f9f7782743c435b4c81b083ab0b08e3fd445b60 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 13 Aug 2014 16:05:22 +0800 Subject: [PATCH 3/7] Clean handlers when custom job factory is used. --- brightray/browser/url_request_context_getter.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index 80ae8a8e65..3786ccb7bb 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -156,6 +156,8 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { job_factory_factory_.Run(protocol_handlers_, protocol_interceptors_)); if (user_job_factory) { storage_->set_job_factory(user_job_factory.release()); + protocol_handlers_.clear(); + protocol_interceptors_.weak_clear(); return url_request_context_.get(); } From b95b621dfcb38ccd8c85c989f645a9d2ec5acd23 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 13 Aug 2014 16:09:32 +0800 Subject: [PATCH 4/7] Add url_request_context_getter getter for BrowserContext. --- brightray/browser/browser_context.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/brightray/browser/browser_context.h b/brightray/browser/browser_context.h index 1caa216a7a..328ca72cf1 100644 --- a/brightray/browser/browser_context.h +++ b/brightray/browser/browser_context.h @@ -5,6 +5,8 @@ #ifndef BRIGHTRAY_BROWSER_BROWSER_CONTEXT_H_ #define BRIGHTRAY_BROWSER_BROWSER_CONTEXT_H_ +#include "browser/url_request_context_getter.h" + #include "content/public/browser/browser_context.h" #include "content/public/browser/content_browser_client.h" @@ -19,7 +21,6 @@ namespace brightray { class DownloadManagerDelegate; class NetworkDelegate; -class URLRequestContextGetter; class BrowserContext : public content::BrowserContext { public: @@ -32,6 +33,10 @@ class BrowserContext : public content::BrowserContext { content::ProtocolHandlerMap* protocol_handlers, content::ProtocolHandlerScopedVector protocol_interceptors); + net::URLRequestContextGetter* url_request_context_getter() const { + return url_request_getter_.get(); + } + PrefService* prefs() { return prefs_.get(); } protected: From 604361f93d6ef3fd3e0507743d84ccd38784412d Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 13 Aug 2014 16:16:01 +0800 Subject: [PATCH 5/7] Pass ProtocolHandlerScopedVector by value. --- brightray/browser/browser_context.cc | 2 +- brightray/browser/browser_context.h | 2 +- brightray/browser/url_request_context_getter.cc | 2 +- brightray/browser/url_request_context_getter.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 308e733d42..0973211e08 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -123,7 +123,7 @@ scoped_ptr BrowserContext::CreateNetworkDelegate() { scoped_ptr BrowserContext::CreateURLRequestJobFactory( const content::ProtocolHandlerMap& protocol_handlers, - const content::ProtocolHandlerScopedVector& protocol_interceptors) { + content::ProtocolHandlerScopedVector protocol_interceptors) { return scoped_ptr(); } diff --git a/brightray/browser/browser_context.h b/brightray/browser/browser_context.h index 328ca72cf1..879bfd7f42 100644 --- a/brightray/browser/browser_context.h +++ b/brightray/browser/browser_context.h @@ -51,7 +51,7 @@ class BrowserContext : public content::BrowserContext { // implementation. virtual scoped_ptr CreateURLRequestJobFactory( const content::ProtocolHandlerMap& protocol_handlers, - const content::ProtocolHandlerScopedVector& protocol_interceptors); + content::ProtocolHandlerScopedVector protocol_interceptors); virtual base::FilePath GetPath() const OVERRIDE; diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index 3786ccb7bb..6a0a90b243 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -153,7 +153,7 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { // Give user a chance to create their own job factory. scoped_ptr user_job_factory( - job_factory_factory_.Run(protocol_handlers_, protocol_interceptors_)); + job_factory_factory_.Run(protocol_handlers_, protocol_interceptors_.Pass())); if (user_job_factory) { storage_->set_job_factory(user_job_factory.release()); protocol_handlers_.clear(); diff --git a/brightray/browser/url_request_context_getter.h b/brightray/browser/url_request_context_getter.h index 3f3dfb1d7b..e043beb4cf 100644 --- a/brightray/browser/url_request_context_getter.h +++ b/brightray/browser/url_request_context_getter.h @@ -27,7 +27,7 @@ class NetworkDelegate; typedef base::Callback( const content::ProtocolHandlerMap& protocol_handlers, - const content::ProtocolHandlerScopedVector& protocol_interceptors)> URLRequestJobFactoryFactory; + content::ProtocolHandlerScopedVector protocol_interceptors)> URLRequestJobFactoryFactory; class URLRequestContextGetter : public net::URLRequestContextGetter { public: From da3bafd490c9bc000d90237aa3fe3d046e86f0d6 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 13 Aug 2014 17:31:33 +0800 Subject: [PATCH 6/7] Pass parameter by pointers when creating job factory. 1. The caller needs to modify protocol_handlers. 2. We need to make sure protocol_handlers and interceptors are not touched if user doesn't create a job factory. --- brightray/browser/browser_context.cc | 4 ++-- brightray/browser/browser_context.h | 4 ++-- brightray/browser/url_request_context_getter.cc | 4 +--- brightray/browser/url_request_context_getter.h | 4 ++-- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 0973211e08..e9ee4046c2 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -122,8 +122,8 @@ scoped_ptr BrowserContext::CreateNetworkDelegate() { } scoped_ptr BrowserContext::CreateURLRequestJobFactory( - const content::ProtocolHandlerMap& protocol_handlers, - content::ProtocolHandlerScopedVector protocol_interceptors) { + content::ProtocolHandlerMap* protocol_handlers, + content::ProtocolHandlerScopedVector* protocol_interceptors) { return scoped_ptr(); } diff --git a/brightray/browser/browser_context.h b/brightray/browser/browser_context.h index 879bfd7f42..fb9c107ed1 100644 --- a/brightray/browser/browser_context.h +++ b/brightray/browser/browser_context.h @@ -50,8 +50,8 @@ class BrowserContext : public content::BrowserContext { // Subclasses should override this to provide a custom URLRequestJobFactory // implementation. virtual scoped_ptr CreateURLRequestJobFactory( - const content::ProtocolHandlerMap& protocol_handlers, - content::ProtocolHandlerScopedVector protocol_interceptors); + content::ProtocolHandlerMap* protocol_handlers, + content::ProtocolHandlerScopedVector* protocol_interceptors); virtual base::FilePath GetPath() const OVERRIDE; diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index 6a0a90b243..8c772c81dd 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -153,11 +153,9 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { // Give user a chance to create their own job factory. scoped_ptr user_job_factory( - job_factory_factory_.Run(protocol_handlers_, protocol_interceptors_.Pass())); + job_factory_factory_.Run(&protocol_handlers_, &protocol_interceptors_)); if (user_job_factory) { storage_->set_job_factory(user_job_factory.release()); - protocol_handlers_.clear(); - protocol_interceptors_.weak_clear(); return url_request_context_.get(); } diff --git a/brightray/browser/url_request_context_getter.h b/brightray/browser/url_request_context_getter.h index e043beb4cf..716b7e00b7 100644 --- a/brightray/browser/url_request_context_getter.h +++ b/brightray/browser/url_request_context_getter.h @@ -26,8 +26,8 @@ namespace brightray { class NetworkDelegate; typedef base::Callback( - const content::ProtocolHandlerMap& protocol_handlers, - content::ProtocolHandlerScopedVector protocol_interceptors)> URLRequestJobFactoryFactory; + content::ProtocolHandlerMap* protocol_handlers, + content::ProtocolHandlerScopedVector* protocol_interceptors)> URLRequestJobFactoryFactory; class URLRequestContextGetter : public net::URLRequestContextGetter { public: From b06970fda053710ee00985fd5f65c743bacbd606 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 13 Aug 2014 17:39:25 +0800 Subject: [PATCH 7/7] Remove unneeded headers and declarations. --- brightray/browser/browser_context.cc | 2 -- brightray/browser/browser_context.h | 4 ---- 2 files changed, 6 deletions(-) diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index e9ee4046c2..8a5e63e8c7 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -7,7 +7,6 @@ #include "browser/download_manager_delegate.h" #include "browser/inspectable_web_contents_impl.h" #include "browser/network_delegate.h" -#include "browser/url_request_context_getter.h" #include "common/application_info.h" #include "base/environment.h" @@ -20,7 +19,6 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/resource_context.h" #include "content/public/browser/storage_partition.h" -#include "net/url_request/url_request_job_factory_impl.h" #if defined(OS_LINUX) #include "base/nix/xdg_util.h" diff --git a/brightray/browser/browser_context.h b/brightray/browser/browser_context.h index fb9c107ed1..486a9eda90 100644 --- a/brightray/browser/browser_context.h +++ b/brightray/browser/browser_context.h @@ -13,10 +13,6 @@ class PrefRegistrySimple; class PrefService; -namespace browser_context { -class URLRequestJobFactory; -} - namespace brightray { class DownloadManagerDelegate;