From 0644129fbe46580539423d21a004d2241e527732 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 10 Aug 2015 15:28:18 +0800 Subject: [PATCH] Pass net::URLRequestContextGetter in scoped_refptr --- atom/browser/api/atom_api_protocol.cc | 38 ++++++++++------------- atom/browser/api/atom_api_protocol.h | 8 +++-- atom/browser/api/atom_api_session.h | 8 ++--- atom/browser/net/adapter_request_job.cc | 2 +- atom/browser/net/adapter_request_job.h | 2 +- atom/browser/net/url_request_fetch_job.cc | 4 +-- atom/browser/net/url_request_fetch_job.h | 2 +- 7 files changed, 31 insertions(+), 33 deletions(-) diff --git a/atom/browser/api/atom_api_protocol.cc b/atom/browser/api/atom_api_protocol.cc index 1241a95a718f..fdc5ba422bd3 100644 --- a/atom/browser/api/atom_api_protocol.cc +++ b/atom/browser/api/atom_api_protocol.cc @@ -35,23 +35,6 @@ struct Converter { } }; -template<> -struct Converter { - static bool FromV8(v8::Isolate* isolate, v8::Local val, - net::URLRequestContextGetter** out) { - if (val->IsNull()) { - *out = nullptr; - return true; - } - - atom::api::Session* session; - if (!Converter::FromV8(isolate, val, &session)) - return false; - *out = session->browser_context()->GetRequestContext(); - return true; - } -}; - } // namespace mate namespace atom { @@ -141,16 +124,27 @@ class CustomProtocolRequestJob : public AdapterRequestJob { } else if (name == "RequestHttpJob") { GURL url; std::string method, referrer; - net::URLRequestContextGetter* getter = - registry_->browser_context()->GetRequestContext(); dict.Get("url", &url); dict.Get("method", &method); dict.Get("referrer", &referrer); - dict.Get("session", &getter); + + v8::Local value; + mate::Handle session; + scoped_refptr request_context_getter; + // "session" null -> pass nullptr; + // "session" a Session object -> use passed session. + // "session" undefined -> use current session; + if (dict.Get("session", &session)) + request_context_getter = + session->browser_context()->GetRequestContext(); + else if (dict.Get("session", &value) && value->IsNull()) + request_context_getter = nullptr; + else + request_context_getter = registry_->request_context_getter(); BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(&AdapterRequestJob::CreateHttpJobAndStart, GetWeakPtr(), - base::Unretained(getter), url, method, referrer)); + request_context_getter, url, method, referrer)); return; } } @@ -237,7 +231,7 @@ std::string ConvertErrorCode(int error_code) { } // namespace Protocol::Protocol(AtomBrowserContext* browser_context) - : browser_context_(browser_context), + : request_context_getter_(browser_context->GetRequestContext()), job_factory_(browser_context->job_factory()) { CHECK(job_factory_); } diff --git a/atom/browser/api/atom_api_protocol.h b/atom/browser/api/atom_api_protocol.h index b4d56018baf3..4dec17a74340 100644 --- a/atom/browser/api/atom_api_protocol.h +++ b/atom/browser/api/atom_api_protocol.h @@ -16,6 +16,7 @@ namespace net { class URLRequest; +class URLRequestContextGetter; } namespace atom { @@ -46,7 +47,9 @@ class Protocol : public mate::EventEmitter { JsProtocolHandler GetProtocolHandler(const std::string& scheme); - AtomBrowserContext* browser_context() const { return browser_context_; } + net::URLRequestContextGetter* request_context_getter() { + return request_context_getter_.get(); + } protected: explicit Protocol(AtomBrowserContext* browser_context); @@ -94,7 +97,8 @@ class Protocol : public mate::EventEmitter { const JsProtocolHandler& handler); int UninterceptProtocolInIO(const std::string& scheme); - AtomBrowserContext* browser_context_; + scoped_refptr request_context_getter_; + AtomURLRequestJobFactory* job_factory_; ProtocolHandlersMap protocol_handlers_; diff --git a/atom/browser/api/atom_api_session.h b/atom/browser/api/atom_api_session.h index bd12b7589914..b353c61c2109 100644 --- a/atom/browser/api/atom_api_session.h +++ b/atom/browser/api/atom_api_session.h @@ -13,14 +13,14 @@ class GURL; -namespace mate { -class Arguments; -} - namespace base { class FilePath; } +namespace mate { +class Arguments; +} + namespace atom { class AtomBrowserContext; diff --git a/atom/browser/net/adapter_request_job.cc b/atom/browser/net/adapter_request_job.cc index 5c41c6f65aac..ca7dcf2e566b 100644 --- a/atom/browser/net/adapter_request_job.cc +++ b/atom/browser/net/adapter_request_job.cc @@ -119,7 +119,7 @@ void AdapterRequestJob::CreateFileJobAndStart(const base::FilePath& path) { } void AdapterRequestJob::CreateHttpJobAndStart( - net::URLRequestContextGetter* request_context_getter, + scoped_refptr request_context_getter, const GURL& url, const std::string& method, const std::string& referrer) { diff --git a/atom/browser/net/adapter_request_job.h b/atom/browser/net/adapter_request_job.h index b1d28b1446c1..afb9d5f55d07 100644 --- a/atom/browser/net/adapter_request_job.h +++ b/atom/browser/net/adapter_request_job.h @@ -65,7 +65,7 @@ class AdapterRequestJob : public net::URLRequestJob { scoped_refptr data); void CreateFileJobAndStart(const base::FilePath& path); void CreateHttpJobAndStart( - net::URLRequestContextGetter* request_context_getter, + scoped_refptr request_context_getter, const GURL& url, const std::string& method, const std::string& referrer); diff --git a/atom/browser/net/url_request_fetch_job.cc b/atom/browser/net/url_request_fetch_job.cc index abad38d7f4d5..ee4c67b371ee 100644 --- a/atom/browser/net/url_request_fetch_job.cc +++ b/atom/browser/net/url_request_fetch_job.cc @@ -75,7 +75,7 @@ class ResponsePiper : public net::URLFetcherResponseWriter { } // namespace URLRequestFetchJob::URLRequestFetchJob( - net::URLRequestContextGetter* request_context_getter, + scoped_refptr request_context_getter, net::URLRequest* request, net::NetworkDelegate* network_delegate, const GURL& url, @@ -93,7 +93,7 @@ URLRequestFetchJob::URLRequestFetchJob( fetcher_.reset(net::URLFetcher::Create(url, request_type, this)); // Use request context if provided else create one. if (request_context_getter) - fetcher_->SetRequestContext(request_context_getter); + fetcher_->SetRequestContext(request_context_getter.get()); else fetcher_->SetRequestContext(GetRequestContext()); diff --git a/atom/browser/net/url_request_fetch_job.h b/atom/browser/net/url_request_fetch_job.h index 228af7904fe9..a14e8dd1aae3 100644 --- a/atom/browser/net/url_request_fetch_job.h +++ b/atom/browser/net/url_request_fetch_job.h @@ -18,7 +18,7 @@ class AtomBrowserContext; class URLRequestFetchJob : public net::URLRequestJob, public net::URLFetcherDelegate { public: - URLRequestFetchJob(net::URLRequestContextGetter* request_context_getter, + URLRequestFetchJob(scoped_refptr context_getter, net::URLRequest* request, net::NetworkDelegate* network_delegate, const GURL& url,