Cleanup docs and code of setProxy
authorCheng Zhao <zcbenz@gmail.com>
Mon, 11 Jan 2016 14:45:34 +0000 (22:45 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 11 Jan 2016 14:45:34 +0000 (22:45 +0800)
atom/browser/api/atom_api_session.cc
docs/api/session.md

index 379d16e..f71b28c 100644 (file)
@@ -114,27 +114,25 @@ struct Converter<net::ProxyConfig> {
   static bool FromV8(v8::Isolate* isolate,
                      v8::Local<v8::Value> val,
                      net::ProxyConfig* out) {
+    std::string proxy_rules;
+    GURL pac_url;
     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;
+    // Fallback to previous API when passed String.
+    // https://git.io/vuhjj
+    if (ConvertFromV8(isolate, val, &proxy_rules)) {
+      pac_url = GURL(proxy_rules);  // Assume it is PAC script if it is URL.
+    } else if (ConvertFromV8(isolate, val, &options)) {
+      options.Get("pacScript", &pac_url);
+      options.Get("proxyRules", &proxy_rules);
+    } else {
+      return false;
     }
 
-    GURL pac_url;
-    std::string rules;
-    if (options.Get("pacScript", &pac_url)) {
+    // pacScript takes precedence over proxyRules.
+    if (!pac_url.is_empty() && pac_url.is_valid()) {
       out->set_pac_url(pac_url);
-    } else if (options.Get("proxyRules", &rules)) {
-      out->proxy_rules().ParseFromString(rules);
+    } else {
+      out->proxy_rules().ParseFromString(proxy_rules);
     }
     return true;
   }
index 41d2777..a8a55b5 100644 (file)
@@ -186,38 +186,35 @@ Clears the data of web storages.
   * `proxyRules` String - Rules indicating which proxies to use.
 * `callback` Function - Called when operation is done.
 
+Sets the proxy settings.
+
 When `pacScript` and `proxyRules` are provided together, the `proxyRules`
 option is ignored and `pacScript` configuration is applied.
 
+The `proxyRules` has to follow the rules bellow:
+
 ```
-proxyRules = scheme-proxies[";"<scheme-proxies>]
-scheme-proxies = [<url-scheme>"="]<proxy-uri-list>
-url-scheme = "http" | "https" | "ftp" | "socks"
-proxy-uri-list = <proxy-uri>[","<proxy-uri-list>]
-proxy-uri = [<proxy-scheme>"://"]<proxy-host>[":"<proxy-port>]
-
-  For example:
-       "http=foopy:80;ftp=foopy2"  -- use HTTP proxy "foopy:80" for http://
-                                      URLs, and HTTP proxy "foopy2:80" for
-                                      ftp:// URLs.
-       "foopy:80"                  -- use HTTP proxy "foopy:80" for all URLs.
-       "foopy:80,bar,direct://"    -- use HTTP proxy "foopy:80" for all URLs,
-                                      failing over to "bar" if "foopy:80" is
-                                      unavailable, and after that using no
-                                      proxy.
-       "socks4://foopy"            -- use SOCKS v4 proxy "foopy:1080" for all
-                                      URLs.
-       "http=foopy,socks5://bar.com -- use HTTP proxy "foopy" for http URLs,
-                                      and fail over to the SOCKS5 proxy
-                                      "bar.com" if "foopy" is unavailable.
-       "http=foopy,direct://       -- use HTTP proxy "foopy" for http URLs,
-                                      and use no proxy if "foopy" is
-                                      unavailable.
-       "http=foopy;socks=foopy2   --  use HTTP proxy "foopy" for http URLs,
-                                      and use socks4://foopy2 for all other
-                                      URLs.
+proxyRules = schemeProxies[";"<schemeProxies>]
+schemeProxies = [<urlScheme>"="]<proxyURIList>
+urlScheme = "http" | "https" | "ftp" | "socks"
+proxyURIList = <proxyURL>[","<proxyURIList>]
+proxyURL = [<proxyScheme>"://"]<proxyHost>[":"<proxyPort>]
 ```
 
+For example:
+* `http=foopy:80;ftp=foopy2` - Use HTTP proxy `foopy:80` for `http://` URLs, and
+  HTTP proxy `foopy2:80` for `ftp://` URLs.
+* `foopy:80` - Use HTTP proxy `foopy:80` for all URLs.
+* `foopy:80,bar,direct://` - Use HTTP proxy `foopy:80` for all URLs, failing
+  over to `bar` if `foopy:80` is unavailable, and after that using no proxy.
+* `socks4://foopy` - Use SOCKS v4 proxy `foopy:1080` for all URLs.
+* `http=foopy,socks5://bar.com` - Use HTTP proxy `foopy` for http URLs, and fail
+  over to the SOCKS5 proxy `bar.com` if `foopy` is unavailable.
+* `http=foopy,direct://` - Use HTTP proxy `foopy` for http URLs, and use no
+  proxy if `foopy` is unavailable.
+* `http=foopy;socks=foopy2` -  Use HTTP proxy `foopy` for http URLs, and use
+  `socks4://foopy2` for all other URLs.
+
 ### `ses.resolveProxy(url, callback)`
 
 * `url` URL