From b47fae7393a8867bd543e76fde80bfff8682a6ec Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 18 Jun 2015 16:59:03 +0800 Subject: [PATCH] Make api::Protocol per-context --- atom/browser/api/atom_api_protocol.cc | 15 ++++++++++----- atom/browser/api/atom_api_protocol.h | 7 +++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/atom/browser/api/atom_api_protocol.cc b/atom/browser/api/atom_api_protocol.cc index 9bc2de4b42a9..b4ce2e327ba8 100644 --- a/atom/browser/api/atom_api_protocol.cc +++ b/atom/browser/api/atom_api_protocol.cc @@ -5,6 +5,7 @@ #include "atom/browser/api/atom_api_protocol.h" #include "atom/browser/atom_browser_context.h" +#include "atom/browser/atom_browser_main_parts.h" #include "atom/browser/net/adapter_request_job.h" #include "atom/browser/net/atom_url_request_job_factory.h" #include "atom/common/native_mate_converters/file_path_converter.h" @@ -190,8 +191,9 @@ class CustomProtocolHandler : public ProtocolHandler { } // namespace -Protocol::Protocol() - : job_factory_(AtomBrowserContext::Get()->job_factory()) { +Protocol::Protocol(AtomBrowserContext* browser_context) + : browser_context_(browser_context), + job_factory_(browser_context->job_factory()) { CHECK(job_factory_); } @@ -343,8 +345,9 @@ void Protocol::EmitEventInUI(const std::string& event, } // static -mate::Handle Protocol::Create(v8::Isolate* isolate) { - return CreateHandle(isolate, new Protocol); +mate::Handle Protocol::Create( + v8::Isolate* isolate, AtomBrowserContext* browser_context) { + return CreateHandle(isolate, new Protocol(browser_context)); } } // namespace api @@ -357,7 +360,9 @@ void Initialize(v8::Local exports, v8::Local unused, v8::Local context, void* priv) { v8::Isolate* isolate = context->GetIsolate(); mate::Dictionary dict(isolate, exports); - dict.Set("protocol", atom::api::Protocol::Create(isolate)); + auto browser_context = static_cast( + atom::AtomBrowserMainParts::Get()->browser_context()); + dict.Set("protocol", atom::api::Protocol::Create(isolate, browser_context)); } } // namespace diff --git a/atom/browser/api/atom_api_protocol.h b/atom/browser/api/atom_api_protocol.h index 34725cecc925..8d76008eb52c 100644 --- a/atom/browser/api/atom_api_protocol.h +++ b/atom/browser/api/atom_api_protocol.h @@ -18,6 +18,7 @@ class URLRequest; namespace atom { +class AtomBrowserContext; class AtomURLRequestJobFactory; namespace api { @@ -27,12 +28,13 @@ class Protocol : public mate::EventEmitter { typedef base::Callback(const net::URLRequest*)> JsProtocolHandler; - static mate::Handle Create(v8::Isolate* isolate); + static mate::Handle Create( + v8::Isolate* isolate, AtomBrowserContext* browser_context); JsProtocolHandler GetProtocolHandler(const std::string& scheme); protected: - Protocol(); + explicit Protocol(AtomBrowserContext* browser_context); // mate::Wrappable implementations: virtual mate::ObjectTemplateBuilder GetObjectTemplateBuilder( @@ -68,6 +70,7 @@ class Protocol : public mate::EventEmitter { // Do protocol.emit(event, parameter) under UI thread. void EmitEventInUI(const std::string& event, const std::string& parameter); + AtomBrowserContext* browser_context_; AtomURLRequestJobFactory* job_factory_; ProtocolHandlersMap protocol_handlers_;