From 24c60019b7484d5b3caf86ffd2d6e4b7f4c4fea8 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 13 Jul 2016 12:05:57 +0900 Subject: [PATCH] Create AtomCertVerifier on IO thread --- atom/browser/api/atom_api_session.cc | 13 ++++++++++++- atom/browser/atom_browser_context.cc | 3 +-- atom/browser/atom_browser_context.h | 3 --- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/atom/browser/api/atom_api_session.cc b/atom/browser/api/atom_api_session.cc index c898f5f1b33f..87d42486d503 100644 --- a/atom/browser/api/atom_api_session.cc +++ b/atom/browser/api/atom_api_session.cc @@ -285,6 +285,14 @@ void SetProxyInIO(net::URLRequestContextGetter* getter, RunCallbackInUI(callback); } +void SetCertVerifyProcInIO( + const scoped_refptr& context_getter, + const AtomCertVerifier::VerifyProc& proc) { + auto request_context = context_getter->GetURLRequestContext(); + static_cast(request_context->cert_verifier())-> + SetVerifyProc(proc); +} + void ClearHostResolverCacheInIO( const scoped_refptr& context_getter, const base::Closure& callback) { @@ -434,7 +442,10 @@ void Session::SetCertVerifyProc(v8::Local val, return; } - browser_context_->cert_verifier()->SetVerifyProc(proc); + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, + base::Bind(&SetCertVerifyProcInIO, + make_scoped_refptr(browser_context_->GetRequestContext()), + proc)); } void Session::SetPermissionRequestHandler(v8::Local val, diff --git a/atom/browser/atom_browser_context.cc b/atom/browser/atom_browser_context.cc index 7b682543a09c..94cc3ee03d50 100644 --- a/atom/browser/atom_browser_context.cc +++ b/atom/browser/atom_browser_context.cc @@ -66,7 +66,6 @@ std::string RemoveWhitespace(const std::string& str) { AtomBrowserContext::AtomBrowserContext(const std::string& partition, bool in_memory) : brightray::BrowserContext(partition, in_memory), - cert_verifier_(new AtomCertVerifier), network_delegate_(new AtomNetworkDelegate) { // Construct user agent string. Browser* browser = Browser::Get(); @@ -174,7 +173,7 @@ content::PermissionManager* AtomBrowserContext::GetPermissionManager() { } std::unique_ptr AtomBrowserContext::CreateCertVerifier() { - return make_scoped_ptr(cert_verifier_); + return std::unique_ptr(new AtomCertVerifier); } net::SSLConfigService* AtomBrowserContext::CreateSSLConfigService() { diff --git a/atom/browser/atom_browser_context.h b/atom/browser/atom_browser_context.h index f793bc9870d6..732f1d045731 100644 --- a/atom/browser/atom_browser_context.h +++ b/atom/browser/atom_browser_context.h @@ -12,7 +12,6 @@ namespace atom { class AtomDownloadManagerDelegate; -class AtomCertVerifier; class AtomNetworkDelegate; class AtomPermissionManager; class WebViewManager; @@ -42,7 +41,6 @@ class AtomBrowserContext : public brightray::BrowserContext { // brightray::BrowserContext: void RegisterPrefs(PrefRegistrySimple* pref_registry) override; - AtomCertVerifier* cert_verifier() const { return cert_verifier_; } AtomNetworkDelegate* network_delegate() const { return network_delegate_; } private: @@ -52,7 +50,6 @@ class AtomBrowserContext : public brightray::BrowserContext { std::string user_agent_; // Managed by brightray::BrowserContext. - AtomCertVerifier* cert_verifier_; AtomNetworkDelegate* network_delegate_; DISALLOW_COPY_AND_ASSIGN(AtomBrowserContext);