Skip to content

Commit e96d7a5

Browse files
authored
Merge pull request electron#6466 from electron/cert-verifier-io-thread
Create AtomCertVerifier on IO thread
2 parents 12d646a + e5ccb3f commit e96d7a5

File tree

5 files changed

+16
-18
lines changed

5 files changed

+16
-18
lines changed

atom/browser/api/atom_api_session.cc

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,14 @@ void SetProxyInIO(net::URLRequestContextGetter* getter,
285285
RunCallbackInUI(callback);
286286
}
287287

288+
void SetCertVerifyProcInIO(
289+
const scoped_refptr<net::URLRequestContextGetter>& context_getter,
290+
const AtomCertVerifier::VerifyProc& proc) {
291+
auto request_context = context_getter->GetURLRequestContext();
292+
static_cast<AtomCertVerifier*>(request_context->cert_verifier())->
293+
SetVerifyProc(proc);
294+
}
295+
288296
void ClearHostResolverCacheInIO(
289297
const scoped_refptr<net::URLRequestContextGetter>& context_getter,
290298
const base::Closure& callback) {
@@ -434,7 +442,10 @@ void Session::SetCertVerifyProc(v8::Local<v8::Value> val,
434442
return;
435443
}
436444

437-
browser_context_->cert_verifier()->SetVerifyProc(proc);
445+
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
446+
base::Bind(&SetCertVerifyProcInIO,
447+
make_scoped_refptr(browser_context_->GetRequestContext()),
448+
proc));
438449
}
439450

440451
void Session::SetPermissionRequestHandler(v8::Local<v8::Value> val,

atom/browser/atom_browser_context.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ std::string RemoveWhitespace(const std::string& str) {
6666
AtomBrowserContext::AtomBrowserContext(const std::string& partition,
6767
bool in_memory)
6868
: brightray::BrowserContext(partition, in_memory),
69-
cert_verifier_(new AtomCertVerifier),
7069
network_delegate_(new AtomNetworkDelegate) {
7170
// Construct user agent string.
7271
Browser* browser = Browser::Get();
@@ -174,7 +173,7 @@ content::PermissionManager* AtomBrowserContext::GetPermissionManager() {
174173
}
175174

176175
std::unique_ptr<net::CertVerifier> AtomBrowserContext::CreateCertVerifier() {
177-
return make_scoped_ptr(cert_verifier_);
176+
return std::unique_ptr<net::CertVerifier>(new AtomCertVerifier);
178177
}
179178

180179
net::SSLConfigService* AtomBrowserContext::CreateSSLConfigService() {

atom/browser/atom_browser_context.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
namespace atom {
1313

1414
class AtomDownloadManagerDelegate;
15-
class AtomCertVerifier;
1615
class AtomNetworkDelegate;
1716
class AtomPermissionManager;
1817
class WebViewManager;
@@ -42,7 +41,6 @@ class AtomBrowserContext : public brightray::BrowserContext {
4241
// brightray::BrowserContext:
4342
void RegisterPrefs(PrefRegistrySimple* pref_registry) override;
4443

45-
AtomCertVerifier* cert_verifier() const { return cert_verifier_; }
4644
AtomNetworkDelegate* network_delegate() const { return network_delegate_; }
4745

4846
private:
@@ -52,7 +50,6 @@ class AtomBrowserContext : public brightray::BrowserContext {
5250
std::string user_agent_;
5351

5452
// Managed by brightray::BrowserContext.
55-
AtomCertVerifier* cert_verifier_;
5653
AtomNetworkDelegate* network_delegate_;
5754

5855
DISALLOW_COPY_AND_ASSIGN(AtomBrowserContext);

atom/browser/net/atom_cert_verifier.cc

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ AtomCertVerifier::~AtomCertVerifier() {
3636
}
3737

3838
void AtomCertVerifier::SetVerifyProc(const VerifyProc& proc) {
39-
base::AutoLock auto_lock(lock_);
4039
verify_proc_ = proc;
4140
}
4241

@@ -52,20 +51,14 @@ int AtomCertVerifier::Verify(
5251
const net::BoundNetLog& net_log) {
5352
DCHECK_CURRENTLY_ON(BrowserThread::IO);
5453

55-
VerifyProc proc;
56-
{
57-
base::AutoLock auto_lock(lock_);
58-
proc = verify_proc_;
59-
}
60-
61-
if (proc.is_null())
54+
if (verify_proc_.is_null())
6255
return default_cert_verifier_->Verify(
6356
cert, hostname, ocsp_response, flags, crl_set, verify_result, callback,
6457
out_req, net_log);
6558

6659
BrowserThread::PostTask(
6760
BrowserThread::UI, FROM_HERE,
68-
base::Bind(proc, hostname, make_scoped_refptr(cert),
61+
base::Bind(verify_proc_, hostname, make_scoped_refptr(cert),
6962
base::Bind(OnResult, verify_result, callback)));
7063
return net::ERR_IO_PENDING;
7164
}

atom/browser/net/atom_cert_verifier.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
#ifndef ATOM_BROWSER_NET_ATOM_CERT_VERIFIER_H_
66
#define ATOM_BROWSER_NET_ATOM_CERT_VERIFIER_H_
77

8+
#include <memory>
89
#include <string>
910

10-
#include "base/memory/ref_counted.h"
11-
#include "base/synchronization/lock.h"
1211
#include "net/cert/cert_verifier.h"
1312

1413
namespace atom {
@@ -39,7 +38,6 @@ class AtomCertVerifier : public net::CertVerifier {
3938
bool SupportsOCSPStapling() override;
4039

4140
private:
42-
base::Lock lock_;
4341
VerifyProc verify_proc_;
4442
std::unique_ptr<net::CertVerifier> default_cert_verifier_;
4543

0 commit comments

Comments
 (0)