| OLD | NEW |
| (Empty) |
| 1 <div id="pageData-name" class="pageData">Proxy Settings</div> | |
| 2 | |
| 3 <!-- BEGIN AUTHORED CONTENT --> | |
| 4 <p id="classSummary"> | |
| 5 Use the <code>chrome.experimental.proxysettings</code> module to manage Chrome's | |
| 6 proxy settings. This module is still experimental. For information on how to use | |
| 7 experimental APIs, see the <a href="experimental.html">chrome.experimental.* | |
| 8 APIs</a> page. | |
| 9 </p> | |
| 10 | |
| 11 <h2 id="manifest">Manifest</h2> | |
| 12 <p>You must declare the "proxy" permission | |
| 13 in the <a href="manifest.html">extension manifest</a> | |
| 14 to use the proxy settings API. | |
| 15 For example:</p> | |
| 16 <pre>{ | |
| 17 "name": "My extension", | |
| 18 ... | |
| 19 <b>"permissions": [ | |
| 20 "experimental", "proxy" | |
| 21 ]</b>, | |
| 22 ... | |
| 23 }</pre> | |
| 24 | |
| 25 <h2 id="description">Objects and properties</h2> | |
| 26 | |
| 27 <p> | |
| 28 Proxy settings are defined in a | |
| 29 <a href="#type-ProxyConfig"><code>ProxyConfig</code></a> object. Depending on | |
| 30 Chrome's proxy settings, the settings may contain | |
| 31 <a href="#type-ProxyRules"><code>ProxyRules</code></a> or a <a | |
| 32 href="#type-PacScript"><code>PacScript</code></a>. | |
| 33 </p> | |
| 34 | |
| 35 <h3 id="proxy_modes">Proxy modes</h3> | |
| 36 | |
| 37 <p> | |
| 38 A ProxyConfig object's <code>mode</code> attribute determines the overall | |
| 39 behavior of Chrome with regards to proxy usage. It can take the following | |
| 40 values: | |
| 41 <dl> | |
| 42 <dt><code>direct</code></dt> | |
| 43 <dd>In <code>direct</code> mode all connections are created directly, without | |
| 44 any proxy involved. This mode allows no further parameters in the | |
| 45 <code>ProxyConfig</code> object.</dd> | |
| 46 | |
| 47 <dt><code>auto_detect</code></dt> | |
| 48 <dd>In <code>auto_detect</code> mode the proxy configuration is determined by | |
| 49 a PAC script that can be downloaded at | |
| 50 <a href="http://wpad/wpad.dat">http://wpad/wpad.dat</a>. | |
| 51 This mode allows no further parameters in the <code>ProxyConfig</code> | |
| 52 object.</dd> | |
| 53 | |
| 54 <dt><code>pac_script</code></dt> | |
| 55 <dd>In <code>pac_script</code> mode the proxy configuration is determined by | |
| 56 a PAC script that is either retrieved from the URL specified in the | |
| 57 <a href="#type-PacScript"><code>PacScript</code></a> object or | |
| 58 taken literally from the <code>data</code> element specified in the | |
| 59 <a href="#type-PacScript"><code>PacScript</code></a> object. | |
| 60 Besides this, this mode allows no further parameters in the | |
| 61 <code>ProxyConfig</code> object.</dd> | |
| 62 | |
| 63 <dt><code>fixed_servers</code></dt> | |
| 64 <dd>In <code>fixed_servers</code> mode the proxy configuration is codified in | |
| 65 a <a href="#type-ProxyRules><code>ProxyRules"><code>ProxyRules</code></a> | |
| 66 object. Its structure is described in <a href="#proxy_rules">Proxy rules</a>. | |
| 67 Besides this, the <code>fixed_servers</code> mode allows no further parameters | |
| 68 in the <code>ProxyConfig</code> object.</dd> | |
| 69 | |
| 70 <dt><code>system</code></dt> | |
| 71 <dd>In <code>system</code> mode the proxy configuration is taken from the | |
| 72 operating system. This mode allows no further parameters in the | |
| 73 <code>ProxyConfig</code> object. Note that the <code>system</code> mode is | |
| 74 different from setting no proxy configuration. In the latter case, Chrome | |
| 75 falls back to the system settings only if no command-line options influence | |
| 76 the proxy configuration.</dd> | |
| 77 </dl> | |
| 78 </p> | |
| 79 | |
| 80 <h3 id="proxy_rules">Proxy rules</h3> | |
| 81 | |
| 82 <p> | |
| 83 The <a href="#type-ProxyRules"><code>ProxyRules</code></a> object can contain | |
| 84 either a <code>singleProxy</code> attribute or a subset of | |
| 85 <code>proxyForHttp</code>, <code>proxyForHttps</code>, <code>proxyForFtp</code>, | |
| 86 and <code>fallbackProxy</code>. | |
| 87 </p> | |
| 88 | |
| 89 <p> | |
| 90 In the first case, HTTP, HTTPS and FTP traffic is proxied through the specified | |
| 91 proxy server. Other traffic is sent directly. In the latter case the behavior is | |
| 92 slightly more subtle: If a proxy server is configured for the HTTP, HTTPS or FTP | |
| 93 protocol, the respective traffic is proxied through the specified server. If no | |
| 94 such proxy server is specified or traffic uses a different protocol than HTTP, | |
| 95 HTTPS or FTP, the <code>fallbackProxy</code> is used. If no | |
| 96 <code>fallbackProxy</code> is specified, traffic is sent directly without a | |
| 97 proxy server. | |
| 98 </p> | |
| 99 | |
| 100 <h3 id="proxy_server_objects">Proxy server objects</h3> | |
| 101 | |
| 102 <p> | |
| 103 A proxy server is configured in a | |
| 104 <a href="#type-ProxyServer"><code>ProxyServer</code></a> object. The connection | |
| 105 to the proxy server (defined by the <code>host</code> attribute) uses the | |
| 106 protocol defined in the <code>scheme</code> attribute. If no <code>scheme</code> | |
| 107 is specified, the proxy connection defaults to <code>http</code>. | |
| 108 </p> | |
| 109 | |
| 110 <p> | |
| 111 If no <code>port</code> is defined in a | |
| 112 <a href="#type-ProxyServer"><code>ProxyServer</code></a> object, the port is | |
| 113 derived from the scheme. The default ports are: | |
| 114 <table> | |
| 115 <tr><th>Scheme</th><th>Port</th></tr> | |
| 116 <tr><td>http</td><td>80</td></tr> | |
| 117 <tr><td>https</td><td>443</td></tr> | |
| 118 <tr><td>socks4</td><td>1080</td></tr> | |
| 119 <tr><td>socks5</td><td>1080</td></tr> | |
| 120 </table> | |
| 121 </p> | |
| 122 | |
| 123 <h3 id="bypass_list">Bypass list</h3> | |
| 124 | |
| 125 <p> | |
| 126 Individual servers may be excluded from being proxied with the | |
| 127 <code>bypassList</code>. This list may contain the following entries: | |
| 128 <dl> | |
| 129 <dt><code>[<em><scheme></em>://]<em><host-pattern></em>[:<em><p
ort></em>]</code></dt> | |
| 130 <dd>Match all hostnames that match the pattern <em><host-pattern></em>.<
br> | |
| 131 Examples: <code>"foobar.com", "*foobar.com", "*.foobar.com", "*foobar.com:99", | |
| 132 "https://x.*.y.com:99"</code></dd> | |
| 133 | |
| 134 <dt><code>[<em><scheme></em>://]<em><ip-literal></em>[:<em><por
t></em>]</code></dt> | |
| 135 <dd>Match URLs that are IP address literals.<br> | |
| 136 Conceptually this is the similar to the first case, but with special cases | |
| 137 to handle IP literal canonicalization. For example, matching | |
| 138 on "[0:0:0::1]" is the same as matching on "[::1]" because | |
| 139 the IPv6 canonicalization is done internally.<br> | |
| 140 Examples: <code>"127.0.1", "[0:0::1]", "[::1]", "http://[::1]:99"</code></dd> | |
| 141 | |
| 142 <dt><code><em><ip-literal></em>/<em><prefix-length-in-bits></em></
code></dt> | |
| 143 <dd>Match any URL containing an IP literal within the given range. The IP | |
| 144 range is specified using CIDR notation.<br> | |
| 145 Examples: <code>"192.168.1.1/16", "fefe:13::abc/33"</code></dd> | |
| 146 | |
| 147 <dt><code><local></code></dt> | |
| 148 <dd>Match local addresses. An address is local if the host is "127.0.0.1", | |
| 149 "::1", or "localhost".<br> | |
| 150 Example: <code>"<local>"</code></dd> | |
| 151 </dl> | |
| 152 | |
| 153 | |
| 154 <h2 id="precedence">Precedence</h2> | |
| 155 | |
| 156 <p> | |
| 157 Chrome manages settings on different layers. The following list describes the | |
| 158 layers that may influence the effective proxy settings, in increasing order of | |
| 159 precedence. | |
| 160 <ol> | |
| 161 <li>System settings provided by the operating system</li> | |
| 162 <li>Command line parameters</li> | |
| 163 <li>Preferences set by extensions</li> | |
| 164 <li>Policies</li> | |
| 165 </ol> | |
| 166 </p> | |
| 167 | |
| 168 <p> | |
| 169 As the list implies, policies might overrule any changes that you specify with | |
| 170 the proxy settings API. | |
| 171 </p> | |
| 172 | |
| 173 <p> | |
| 174 Chrome allows using different proxy settings for regular windows and incognito | |
| 175 windows. The following example illustrates the behavior. Assume that no policy | |
| 176 overrides the proxy settings and that an extension can set proxy settings for | |
| 177 regular windows <b>(R)</b> and proxy settings for incognito windows <b>(I)</b>. | |
| 178 </p> | |
| 179 | |
| 180 <p> | |
| 181 <ul> | |
| 182 <li>If only <b>(R)</b> is set, these settings are effective for both regular | |
| 183 and incognito windows.</li> | |
| 184 <li>If only <b>(I)</b> is set, these settings are effective for only incognito | |
| 185 windows. Regular windows use the proxy settings determined by the lower layers | |
| 186 (command-line options and system settings).</li> | |
| 187 <li>If both <b>(R)</b> and <b>(I)</b> are set, the respective settings are | |
| 188 used for regular and incognito windows.</li> | |
| 189 </ul> | |
| 190 </p> | |
| 191 | |
| 192 <p> | |
| 193 If two extensions want to set proxy settings, the extension installed last takes | |
| 194 precedence over the other extensions. If the extension installed last sets only | |
| 195 <b>(I)</b>, the settings of regular windows can be defined by more recently | |
| 196 installed extensions. | |
| 197 </p> | |
| 198 | |
| 199 | |
| 200 | |
| 201 <h2 id="overview-examples">Examples</h2> | |
| 202 | |
| 203 <p> | |
| 204 The following code sets a SOCKS 5 proxy for HTTP connections to all servers but | |
| 205 foobar.com and uses direct connections for all other protocols. The settings | |
| 206 apply to regular and incognito windows. | |
| 207 </p> | |
| 208 | |
| 209 <pre> | |
| 210 var config = { | |
| 211 mode: "fixed_servers", | |
| 212 rules: { | |
| 213 httpProxy: { | |
| 214 scheme: "socks5", | |
| 215 host: "1.2.3.4" | |
| 216 }, | |
| 217 bypassList: ["foobar.com"] | |
| 218 } | |
| 219 }; | |
| 220 chrome.experimental.proxy.settings.set( | |
| 221 {value: config, scope: 'regular'}, | |
| 222 function() {}); | |
| 223 </pre> | |
| 224 | |
| 225 <p> | |
| 226 The following code sets a custom pac script. | |
| 227 </p> | |
| 228 | |
| 229 <pre> | |
| 230 var config = { | |
| 231 mode: "pac_script", | |
| 232 pacScript: { | |
| 233 data: "function FindProxyForURL(url, host) {\n" + | |
| 234 " if (host == 'foobar.com')\n" + | |
| 235 " return 'PROXY blackhole:80';\n" + | |
| 236 " return 'DIRECT';\n" + | |
| 237 "}" | |
| 238 } | |
| 239 }; | |
| 240 chrome.experimental.proxy.settings.set( | |
| 241 {value: config, scope: 'regular'}, | |
| 242 function() {}); | |
| 243 </pre> | |
| 244 | |
| 245 <p> | |
| 246 The next snippet queries the current proxy settings. | |
| 247 </p> | |
| 248 | |
| 249 <pre> | |
| 250 chrome.experimental.proxy.settings.get( | |
| 251 {'incognito': false}, | |
| 252 function(config) {console.log(JSON.stringify(config));}); | |
| 253 </pre> | |
| 254 | |
| 255 <p> | |
| 256 Note that the <code>value</code> object passed to <code>set()</code> is not | |
| 257 identical to the <code>value</code> object passed to callback function of | |
| 258 <code>get()</code>. The latter will contain a <code>rules.httpProxy.port</code> | |
| 259 element. | |
| 260 </p> | |
| 261 | |
| 262 <!-- END AUTHORED CONTENT --> | |
| OLD | NEW |