OLD | NEW |
| (Empty) |
1 <!-- BEGIN AUTHORED CONTENT --> | |
2 <p id="classSummary"> | |
3 Use the <code>chrome.proxy</code> module to manage Chrome's | |
4 proxy settings. This module relies on the <a href="types.html#ChromeSetting"> | |
5 ChromeSetting prototype of the type API</a> for getting and setting the proxy | |
6 configuration. | |
7 </p> | |
8 <h2 id="manifest">Manifest</h2> | |
9 <p>You must declare the "proxy" permission | |
10 in the <a href="manifest.html">extension manifest</a> | |
11 to use the proxy settings API. | |
12 For example:</p> | |
13 <pre>{ | |
14 "name": "My extension", | |
15 ... | |
16 <b>"permissions": [ | |
17 "proxy" | |
18 ]</b>, | |
19 ... | |
20 }</pre> | |
21 <h2 id="description">Objects and properties</h2> | |
22 <p> | |
23 Proxy settings are defined in a | |
24 <a href="#type-proxy.ProxyConfig"><code>ProxyConfig</code></a> object. Depending
on | |
25 Chrome's proxy settings, the settings may contain | |
26 <a href="#type-proxy.ProxyRules"><code>ProxyRules</code></a> or a <a | |
27 href="#type-proxy.PacScript"><code>PacScript</code></a>. | |
28 </p> | |
29 <h3 id="proxy_modes">Proxy modes</h3> | |
30 <p> | |
31 A ProxyConfig object's <code>mode</code> attribute determines the overall | |
32 behavior of Chrome with regards to proxy usage. It can take the following | |
33 values: | |
34 <dl> | |
35 <dt><code>direct</code></dt> | |
36 <dd>In <code>direct</code> mode all connections are created directly, without | |
37 any proxy involved. This mode allows no further parameters in the | |
38 <code>ProxyConfig</code> object.</dd> | |
39 <dt><code>auto_detect</code></dt> | |
40 <dd>In <code>auto_detect</code> mode the proxy configuration is determined by | |
41 a PAC script that can be downloaded at | |
42 <a href="http://wpad/wpad.dat">http://wpad/wpad.dat</a>. | |
43 This mode allows no further parameters in the <code>ProxyConfig</code> | |
44 object.</dd> | |
45 <dt><code>pac_script</code></dt> | |
46 <dd>In <code>pac_script</code> mode the proxy configuration is determined by | |
47 a PAC script that is either retrieved from the URL specified in the | |
48 <a href="#type-proxy.PacScript"><code>PacScript</code></a> object or | |
49 taken literally from the <code>data</code> element specified in the | |
50 <a href="#type-proxy.PacScript"><code>PacScript</code></a> object. | |
51 Besides this, this mode allows no further parameters in the | |
52 <code>ProxyConfig</code> object.</dd> | |
53 <dt><code>fixed_servers</code></dt> | |
54 <dd>In <code>fixed_servers</code> mode the proxy configuration is codified in | |
55 a <a href="#type-proxy.ProxyRules><code>ProxyRules"><code>ProxyRules</code></a
> | |
56 object. Its structure is described in <a href="#proxy_rules">Proxy rules</a>. | |
57 Besides this, the <code>fixed_servers</code> mode allows no further parameters | |
58 in the <code>ProxyConfig</code> object.</dd> | |
59 <dt><code>system</code></dt> | |
60 <dd>In <code>system</code> mode the proxy configuration is taken from the | |
61 operating system. This mode allows no further parameters in the | |
62 <code>ProxyConfig</code> object. Note that the <code>system</code> mode is | |
63 different from setting no proxy configuration. In the latter case, Chrome | |
64 falls back to the system settings only if no command-line options influence | |
65 the proxy configuration.</dd> | |
66 </dl> | |
67 </p> | |
68 <h3 id="proxy_rules">Proxy rules</h3> | |
69 <p> | |
70 The <a href="#type-proxy.ProxyRules"><code>ProxyRules</code></a> object can cont
ain | |
71 either a <code>singleProxy</code> attribute or a subset of | |
72 <code>proxyForHttp</code>, <code>proxyForHttps</code>, <code>proxyForFtp</code>, | |
73 and <code>fallbackProxy</code>. | |
74 </p> | |
75 <p> | |
76 In the first case, HTTP, HTTPS and FTP traffic is proxied through the specified | |
77 proxy server. Other traffic is sent directly. In the latter case the behavior is | |
78 slightly more subtle: If a proxy server is configured for the HTTP, HTTPS or FTP | |
79 protocol, the respective traffic is proxied through the specified server. If no | |
80 such proxy server is specified or traffic uses a different protocol than HTTP, | |
81 HTTPS or FTP, the <code>fallbackProxy</code> is used. If no | |
82 <code>fallbackProxy</code> is specified, traffic is sent directly without a | |
83 proxy server. | |
84 </p> | |
85 <h3 id="proxy_server_objects">Proxy server objects</h3> | |
86 <p> | |
87 A proxy server is configured in a | |
88 <a href="#type-proxy.ProxyServer"><code>ProxyServer</code></a> object. The conne
ction | |
89 to the proxy server (defined by the <code>host</code> attribute) uses the | |
90 protocol defined in the <code>scheme</code> attribute. If no <code>scheme</code> | |
91 is specified, the proxy connection defaults to <code>http</code>. | |
92 </p> | |
93 <p> | |
94 If no <code>port</code> is defined in a | |
95 <a href="#type-proxy.ProxyServer"><code>ProxyServer</code></a> object, the port
is | |
96 derived from the scheme. The default ports are: | |
97 <table> | |
98 <tr><th>Scheme</th><th>Port</th></tr> | |
99 <tr><td>http</td><td>80</td></tr> | |
100 <tr><td>https</td><td>443</td></tr> | |
101 <tr><td>socks4</td><td>1080</td></tr> | |
102 <tr><td>socks5</td><td>1080</td></tr> | |
103 </table> | |
104 </p> | |
105 <h3 id="bypass_list">Bypass list</h3> | |
106 <p> | |
107 Individual servers may be excluded from being proxied with the | |
108 <code>bypassList</code>. This list may contain the following entries: | |
109 <dl> | |
110 <dt><code>[<em><scheme></em>://]<em><host-pattern></em>[:<em><p
ort></em>]</code></dt> | |
111 <dd>Match all hostnames that match the pattern <em><host-pattern></em>.<
br> | |
112 Examples: <code>"foobar.com", "*foobar.com", "*.foobar.com", "*foobar.com:99", | |
113 "https://x.*.y.com:99"</code></dd> | |
114 <dt><code>[<em><scheme></em>://]<em><ip-literal></em>[:<em><por
t></em>]</code></dt> | |
115 <dd>Match URLs that are IP address literals.<br> | |
116 Conceptually this is the similar to the first case, but with special cases | |
117 to handle IP literal canonicalization. For example, matching | |
118 on "[0:0:0::1]" is the same as matching on "[::1]" because | |
119 the IPv6 canonicalization is done internally.<br> | |
120 Examples: <code>"127.0.1", "[0:0::1]", "[::1]", "http://[::1]:99"</code></dd> | |
121 <dt><code><em><ip-literal></em>/<em><prefix-length-in-bits></em></
code></dt> | |
122 <dd>Match any URL containing an IP literal within the given range. The IP | |
123 range is specified using CIDR notation.<br> | |
124 Examples: <code>"192.168.1.1/16", "fefe:13::abc/33"</code></dd> | |
125 <dt><code><local></code></dt> | |
126 <dd>Match local addresses. An address is local if the host is "127.0.0.1", | |
127 "::1", or "localhost".<br> | |
128 Example: <code>"<local>"</code></dd> | |
129 </dl> | |
130 <h2 id="overview-examples">Examples</h2> | |
131 <p> | |
132 The following code sets a SOCKS 5 proxy for HTTP connections to all servers but | |
133 foobar.com and uses direct connections for all other protocols. The settings | |
134 apply to regular and incognito windows, as incognito windows inherit settings | |
135 from regular windows. Please also consult the <a | |
136 href="types.html#ChromeSetting">Types API</a> documentation. | |
137 </p> | |
138 <pre> | |
139 var config = { | |
140 mode: "fixed_servers", | |
141 rules: { | |
142 proxyForHttp: { | |
143 scheme: "socks5", | |
144 host: "1.2.3.4" | |
145 }, | |
146 bypassList: ["foobar.com"] | |
147 } | |
148 }; | |
149 chrome.proxy.settings.set( | |
150 {value: config, scope: 'regular'}, | |
151 function() {}); | |
152 </pre> | |
153 <p> | |
154 The following code sets a custom PAC script. | |
155 </p> | |
156 <pre> | |
157 var config = { | |
158 mode: "pac_script", | |
159 pacScript: { | |
160 data: "function FindProxyForURL(url, host) {\n" + | |
161 " if (host == 'foobar.com')\n" + | |
162 " return 'PROXY blackhole:80';\n" + | |
163 " return 'DIRECT';\n" + | |
164 "}" | |
165 } | |
166 }; | |
167 chrome.proxy.settings.set( | |
168 {value: config, scope: 'regular'}, | |
169 function() {}); | |
170 </pre> | |
171 <p> | |
172 The next snippet queries the currently effective proxy settings. The effective | |
173 proxy settings can be determined by another extension or by a policy. See the <a | |
174 href="types.html#ChromeSetting">Types API</a> documentation for details. | |
175 </p> | |
176 <pre> | |
177 chrome.proxy.settings.get( | |
178 {'incognito': false}, | |
179 function(config) {console.log(JSON.stringify(config));}); | |
180 </pre> | |
181 <p> | |
182 Note that the <code>value</code> object passed to <code>set()</code> is not | |
183 identical to the <code>value</code> object passed to callback function of | |
184 <code>get()</code>. The latter will contain a | |
185 <code>rules.proxyForHttp.port</code> element. | |
186 </p> | |
187 <!-- END AUTHORED CONTENT --> | |
OLD | NEW |