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><port></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><port></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, 'incognito': false}, 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, 'incognito': false}, 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 --> 263