From 97c90d31d3866fa2fc44bd2f56d5de9e6203ffd8 Mon Sep 17 00:00:00 2001 From: Robo Date: Wed, 22 Jul 2015 21:54:12 +0530 Subject: [PATCH] get jsprotocolhandler in IO thread --- atom/browser/api/atom_api_protocol.cc | 13 +++++++++---- atom/browser/net/adapter_request_job.cc | 6 +----- atom/browser/net/adapter_request_job.h | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/atom/browser/api/atom_api_protocol.cc b/atom/browser/api/atom_api_protocol.cc index d7af5880279..53aef95b765 100644 --- a/atom/browser/api/atom_api_protocol.cc +++ b/atom/browser/api/atom_api_protocol.cc @@ -80,16 +80,13 @@ class CustomProtocolRequestJob : public AdapterRequestJob { registry_(registry) { } - // AdapterRequestJob: - void GetJobTypeInUI() override { + void GetJobTypeInUI(const Protocol::JsProtocolHandler& callback) { DCHECK_CURRENTLY_ON(BrowserThread::UI); v8::Locker locker(registry_->isolate()); v8::HandleScope handle_scope(registry_->isolate()); // Call the JS handler. - Protocol::JsProtocolHandler callback = - registry_->GetProtocolHandler(request()->url().scheme()); v8::Local result = callback.Run(request()); // Determine the type of the job we are going to create. @@ -172,6 +169,14 @@ class CustomProtocolRequestJob : public AdapterRequestJob { GetWeakPtr(), net::ERR_NOT_IMPLEMENTED)); } + // AdapterRequestJob: + void GetJobType() override { + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, + base::Bind(&CustomProtocolRequestJob::GetJobTypeInUI, + base::Unretained(this), + registry_->GetProtocolHandler(request()->url().scheme()))); + } + private: Protocol* registry_; // Weak, the Protocol class is expected to live forever. }; diff --git a/atom/browser/net/adapter_request_job.cc b/atom/browser/net/adapter_request_job.cc index 2be25b65751..5c41c6f65aa 100644 --- a/atom/browser/net/adapter_request_job.cc +++ b/atom/browser/net/adapter_request_job.cc @@ -27,11 +27,7 @@ AdapterRequestJob::AdapterRequestJob(ProtocolHandler* protocol_handler, void AdapterRequestJob::Start() { DCHECK(!real_job_.get()); - content::BrowserThread::PostTask( - content::BrowserThread::UI, - FROM_HERE, - base::Bind(&AdapterRequestJob::GetJobTypeInUI, - weak_factory_.GetWeakPtr())); + GetJobType(); } void AdapterRequestJob::Kill() { diff --git a/atom/browser/net/adapter_request_job.h b/atom/browser/net/adapter_request_job.h index bca549a2eef..b1d28b1446c 100644 --- a/atom/browser/net/adapter_request_job.h +++ b/atom/browser/net/adapter_request_job.h @@ -54,7 +54,7 @@ class AdapterRequestJob : public net::URLRequestJob { ProtocolHandler* default_protocol_handler() { return protocol_handler_; } // Override this function to determine which job should be started. - virtual void GetJobTypeInUI() = 0; + virtual void GetJobType() = 0; void CreateErrorJobAndStart(int error_code); void CreateStringJobAndStart(const std::string& mime_type,