From ea69e91e491150e8456c95b897c8f0e3a9555d09 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 24 Jun 2015 11:59:11 +0800 Subject: [PATCH] Move resolveProxy From app to session --- atom/browser/api/atom_api_app.cc | 47 ----------------------------- atom/browser/api/atom_api_app.h | 6 ---- atom/browser/api/atom_api_session.cc | 57 +++++++++++++++++++++++++++++++++++- atom/browser/api/atom_api_session.h | 8 +++++ 4 files changed, 64 insertions(+), 54 deletions(-) diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index 2c52a19..0c298f1 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -17,7 +17,6 @@ #include "atom/browser/atom_browser_main_parts.h" #include "atom/browser/browser.h" #include "atom/common/native_mate_converters/file_path_converter.h" -#include "atom/common/native_mate_converters/gurl_converter.h" #include "base/command_line.h" #include "base/environment.h" #include "base/files/file_path.h" @@ -26,10 +25,6 @@ #include "native_mate/callback.h" #include "native_mate/dictionary.h" #include "native_mate/object_template_builder.h" -#include "net/base/load_flags.h" -#include "net/proxy/proxy_service.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_getter.h" #if defined(OS_WIN) #include "base/strings/utf_string_conversions.h" @@ -95,43 +90,6 @@ int GetPathConstant(const std::string& name) { return -1; } -class ResolveProxyHelper { - public: - ResolveProxyHelper(const GURL& url, App::ResolveProxyCallback callback) - : callback_(callback) { - auto browser_context = AtomBrowserMainParts::Get()->browser_context(); - net::ProxyService* proxy_service = browser_context-> - url_request_context_getter()->GetURLRequestContext()->proxy_service(); - - // Start the request. - int result = proxy_service->ResolveProxy( - url, net::LOAD_NORMAL, &proxy_info_, - base::Bind(&ResolveProxyHelper::OnResolveProxyCompleted, - base::Unretained(this)), - &pac_req_, nullptr, net::BoundNetLog()); - - // Completed synchronously. - if (result != net::ERR_IO_PENDING) - OnResolveProxyCompleted(result); - } - - void OnResolveProxyCompleted(int result) { - std::string proxy; - if (result == net::OK) - proxy = proxy_info_.ToPacString(); - callback_.Run(proxy); - - delete this; - } - - private: - App::ResolveProxyCallback callback_; - net::ProxyInfo proxy_info_; - net::ProxyService::PacRequest* pac_req_; - - DISALLOW_COPY_AND_ASSIGN(ResolveProxyHelper); -}; - } // namespace App::App() { @@ -200,10 +158,6 @@ void App::SetPath(mate::Arguments* args, args->ThrowError("Failed to set path"); } -void App::ResolveProxy(const GURL& url, ResolveProxyCallback callback) { - new ResolveProxyHelper(url, callback); -} - void App::SetDesktopName(const std::string& desktop_name) { #if defined(OS_LINUX) scoped_ptr env(base::Environment::Create()); @@ -249,7 +203,6 @@ mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder( #endif .SetMethod("setPath", &App::SetPath) .SetMethod("getPath", &App::GetPath) - .SetMethod("resolveProxy", &App::ResolveProxy) .SetMethod("setDesktopName", &App::SetDesktopName) .SetMethod("setAppUserModelId", &App::SetAppUserModelId) .SetProperty("defaultSession", &App::DefaultSession); diff --git a/atom/browser/api/atom_api_app.h b/atom/browser/api/atom_api_app.h index 7808cfe..f304175 100644 --- a/atom/browser/api/atom_api_app.h +++ b/atom/browser/api/atom_api_app.h @@ -9,11 +9,8 @@ #include "atom/browser/api/event_emitter.h" #include "atom/browser/browser_observer.h" -#include "base/callback.h" #include "native_mate/handle.h" -class GURL; - namespace base { class FilePath; } @@ -29,8 +26,6 @@ namespace api { class App : public mate::EventEmitter, public BrowserObserver { public: - typedef base::Callback ResolveProxyCallback; - static mate::Handle Create(v8::Isolate* isolate); protected: @@ -59,7 +54,6 @@ class App : public mate::EventEmitter, const std::string& name, const base::FilePath& path); - void ResolveProxy(const GURL& url, ResolveProxyCallback callback); void SetDesktopName(const std::string& desktop_name); void SetAppUserModelId(const std::string& app_id); v8::Local DefaultSession(v8::Isolate* isolate); diff --git a/atom/browser/api/atom_api_session.cc b/atom/browser/api/atom_api_session.cc index 7bddee1..0ff2288 100644 --- a/atom/browser/api/atom_api_session.cc +++ b/atom/browser/api/atom_api_session.cc @@ -4,11 +4,17 @@ #include "atom/browser/api/atom_api_session.h" +#include + #include "atom/browser/api/atom_api_cookies.h" #include "atom/browser/atom_browser_context.h" +#include "atom/common/native_mate_converters/gurl_converter.h" #include "native_mate/callback.h" -#include "native_mate/dictionary.h" #include "native_mate/object_template_builder.h" +#include "net/base/load_flags.h" +#include "net/proxy/proxy_service.h" +#include "net/url_request/url_request_context.h" +#include "net/url_request/url_request_context_getter.h" #include "atom/common/node_includes.h" @@ -16,6 +22,50 @@ namespace atom { namespace api { +namespace { + +class ResolveProxyHelper { + public: + ResolveProxyHelper(AtomBrowserContext* browser_context, + const GURL& url, + Session::ResolveProxyCallback callback) + : callback_(callback) { + net::ProxyService* proxy_service = browser_context-> + url_request_context_getter()->GetURLRequestContext()->proxy_service(); + + // Start the request. + int result = proxy_service->ResolveProxy( + url, net::LOAD_NORMAL, &proxy_info_, + base::Bind(&ResolveProxyHelper::OnResolveProxyCompleted, + base::Unretained(this)), + &pac_req_, nullptr, net::BoundNetLog()); + + // Completed synchronously. + if (result != net::ERR_IO_PENDING) + OnResolveProxyCompleted(result); + } + + void OnResolveProxyCompleted(int result) { + std::string proxy; + if (result == net::OK) + proxy = proxy_info_.ToPacString(); + callback_.Run(proxy); + + delete this; + } + + private: + Session::ResolveProxyCallback callback_; + net::ProxyInfo proxy_info_; + net::ProxyService::PacRequest* pac_req_; + + DISALLOW_COPY_AND_ASSIGN(ResolveProxyHelper); +}; + + + +} // namespace + Session::Session(AtomBrowserContext* browser_context) : browser_context_(browser_context) { } @@ -23,6 +73,10 @@ Session::Session(AtomBrowserContext* browser_context) Session::~Session() { } +void Session::ResolveProxy(const GURL& url, ResolveProxyCallback callback) { + new ResolveProxyHelper(browser_context_, url, callback); +} + v8::Local Session::Cookies(v8::Isolate* isolate) { if (cookies_.IsEmpty()) { auto handle = atom::api::Cookies::Create(isolate, browser_context_); @@ -34,6 +88,7 @@ v8::Local Session::Cookies(v8::Isolate* isolate) { mate::ObjectTemplateBuilder Session::GetObjectTemplateBuilder( v8::Isolate* isolate) { return mate::ObjectTemplateBuilder(isolate) + .SetMethod("resolveProxy", &Session::ResolveProxy) .SetProperty("cookies", &Session::Cookies); } diff --git a/atom/browser/api/atom_api_session.h b/atom/browser/api/atom_api_session.h index bd12a38..6e2c0fc 100644 --- a/atom/browser/api/atom_api_session.h +++ b/atom/browser/api/atom_api_session.h @@ -5,9 +5,14 @@ #ifndef ATOM_BROWSER_API_ATOM_API_SESSION_H_ #define ATOM_BROWSER_API_ATOM_API_SESSION_H_ +#include + +#include "base/callback.h" #include "native_mate/handle.h" #include "native_mate/wrappable.h" +class GURL; + namespace atom { class AtomBrowserContext; @@ -16,6 +21,8 @@ namespace api { class Session: public mate::Wrappable { public: + using ResolveProxyCallback = base::Callback; + static mate::Handle Create(v8::Isolate* isolate, AtomBrowserContext* browser_context); @@ -28,6 +35,7 @@ class Session: public mate::Wrappable { v8::Isolate* isolate) override; private: + void ResolveProxy(const GURL& url, ResolveProxyCallback callback); v8::Local Cookies(v8::Isolate* isolate); v8::Global cookies_; -- 2.7.4