diff --git a/atom/browser/api/atom_api_session.cc b/atom/browser/api/atom_api_session.cc index 8b73d61622ec..379d16ecf857 100644 --- a/atom/browser/api/atom_api_session.cc +++ b/atom/browser/api/atom_api_session.cc @@ -114,14 +114,27 @@ struct Converter { static bool FromV8(v8::Isolate* isolate, v8::Local val, net::ProxyConfig* out) { - std::string proxy; - if (!ConvertFromV8(isolate, val, &proxy)) - return false; - auto pac_url = GURL(proxy); - if (pac_url.is_valid()) { + mate::Dictionary options; + if (!ConvertFromV8(isolate, val, &options)) { + // Fallback to previous api (https://git.io/vuhjj). + std::string proxy; + if (!ConvertFromV8(isolate, val, &proxy)) + return false; + auto pac_url = GURL(proxy); + if (pac_url.is_valid()) { + out->set_pac_url(pac_url); + } else { + out->proxy_rules().ParseFromString(proxy); + } + return true; + } + + GURL pac_url; + std::string rules; + if (options.Get("pacScript", &pac_url)) { out->set_pac_url(pac_url); - } else { - out->proxy_rules().ParseFromString(proxy); + } else if (options.Get("proxyRules", &rules)) { + out->proxy_rules().ParseFromString(rules); } return true; } diff --git a/docs/api/session.md b/docs/api/session.md index 09fa61e2112e..41d27773f9a1 100644 --- a/docs/api/session.md +++ b/docs/api/session.md @@ -181,15 +181,16 @@ Clears the data of web storages. #### `ses.setProxy(config, callback)` -* `config` String +* `config` Object + * `pacScript` String - The URL associated with the PAC file. + * `proxyRules` String - Rules indicating which proxies to use. * `callback` Function - Called when operation is done. -If `config` is a PAC url, it is used directly otherwise -`config` is parsed based on the following rules indicating which -proxies to use for the session. +When `pacScript` and `proxyRules` are provided together, the `proxyRules` +option is ignored and `pacScript` configuration is applied. ``` -config = scheme-proxies[";"] +proxyRules = scheme-proxies[";"] scheme-proxies = ["="] url-scheme = "http" | "https" | "ftp" | "socks" proxy-uri-list = [","]