From dcaaeacfe385b3fce0c7a37413b19cc98feea5ab Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Fri, 23 Aug 2013 08:19:37 -0400 Subject: [PATCH 1/3] Fix assertions in Debug builds about using NetworkDelegate on the wrong thread We have to create it on the IO thread. --- brightray/browser/browser_context.cc | 2 +- brightray/browser/url_request_context_getter.cc | 5 +++-- brightray/browser/url_request_context_getter.h | 5 ++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 20b70470552..230a8243386 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -106,7 +106,7 @@ net::URLRequestContextGetter* BrowserContext::CreateRequestContext( GetPath(), io_loop, file_loop, - CreateNetworkDelegate().Pass(), + base::Bind(&BrowserContext::CreateNetworkDelegate, base::Unretained(this)), protocol_handlers); resource_context_->set_url_request_context_getter(url_request_getter_.get()); return url_request_getter_.get(); diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index b5596b8e05a..4324a931165 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -40,12 +40,12 @@ URLRequestContextGetter::URLRequestContextGetter( const base::FilePath& base_path, base::MessageLoop* io_loop, base::MessageLoop* file_loop, - scoped_ptr network_delegate, + base::Callback(void)> network_delegate_factory, content::ProtocolHandlerMap* protocol_handlers) : base_path_(base_path), io_loop_(io_loop), file_loop_(file_loop), - network_delegate_(network_delegate.Pass()) { + network_delegate_factory_(network_delegate_factory) { // Must first be created on the UI thread. DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); @@ -67,6 +67,7 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { 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())); diff --git a/brightray/browser/url_request_context_getter.h b/brightray/browser/url_request_context_getter.h index c9700250aad..7d3e174cd40 100644 --- a/brightray/browser/url_request_context_getter.h +++ b/brightray/browser/url_request_context_getter.h @@ -5,6 +5,7 @@ #ifndef BRIGHTRAY_BROWSER_URL_REQUEST_CONTEXT_GETTER_H_ #define BRIGHTRAY_BROWSER_URL_REQUEST_CONTEXT_GETTER_H_ +#include "base/callback.h" #include "base/files/file_path.h" #include "base/memory/scoped_ptr.h" #include "content/public/browser/content_browser_client.h" @@ -30,7 +31,7 @@ class URLRequestContextGetter : public net::URLRequestContextGetter { const base::FilePath& base_path, base::MessageLoop* io_loop, base::MessageLoop* file_loop, - scoped_ptr, + base::Callback(void)>, content::ProtocolHandlerMap*); virtual ~URLRequestContextGetter(); @@ -45,6 +46,8 @@ class URLRequestContextGetter : public net::URLRequestContextGetter { base::MessageLoop* io_loop_; base::MessageLoop* file_loop_; + base::Callback(void)> network_delegate_factory_; + scoped_ptr proxy_config_service_; scoped_ptr network_delegate_; scoped_ptr storage_; From c4935acbb1d236066f17cfba867cdd49d8e3f202 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Thu, 30 Jan 2014 09:01:23 -0500 Subject: [PATCH 2/3] Fix debug assertions about transport_security_state This code was added to content_shell in https://chromiumcodereview.appspot.com/16501002 and we never picked it up. --- brightray/browser/url_request_context_getter.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/brightray/browser/url_request_context_getter.cc b/brightray/browser/url_request_context_getter.cc index 4324a931165..4b26d7a9364 100644 --- a/brightray/browser/url_request_context_getter.cc +++ b/brightray/browser/url_request_context_getter.cc @@ -98,6 +98,7 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { url_request_context_->network_delegate())); storage_->set_cert_verifier(net::CertVerifier::CreateDefault()); + storage_->set_transport_security_state(new net::TransportSecurityState); storage_->set_ssl_config_service(new net::SSLConfigServiceDefaults); storage_->set_http_auth_handler_factory( net::HttpAuthHandlerFactory::CreateDefault(host_resolver.get())); @@ -118,6 +119,8 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { 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 = From e8de51a8dd6e6c8f89dfba8c5f4f80fc63f3e5b2 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Thu, 30 Jan 2014 09:03:00 -0500 Subject: [PATCH 3/3] Destroy ResourceContext on the IO thread This matches content_shell and fixes a debug assertion (and maybe even a crash). --- brightray/browser/browser_context.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 230a8243386..4970530d7bf 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -89,6 +89,9 @@ void BrowserContext::Initialize() { } BrowserContext::~BrowserContext() { + content::BrowserThread::DeleteSoon(content::BrowserThread::IO, + FROM_HERE, + resource_context_.release()); } void BrowserContext::RegisterInternalPrefs(PrefRegistrySimple* registry) {