1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // This file contains common utilities to find chrome proxy related elements on
6 // a page and collect info from them.
9 var PROXY_VIEW_ID
= 'proxy-view-tab-content';
10 var PROXY_VIEW_EFFECTIVE_SETTINGS_ID
= 'proxy-view-effective-settings';
11 var PROXY_VIEW_BAD_PROXIES_ID
= 'proxy-view-bad-proxies-div';
12 var PROXY_VIEW_BAD_PROXIES_TBODY
= 'proxy-view-bad-proxies-tbody';
13 var PRXOY_SETTINGS_PREFIX
= 'Proxy server for HTTP: ['
14 var PROXY_SETTINGS_SIGNATURE
= 'proxy.googlezip.net:443, ' +
15 'compress.googlezip.net:80, direct://';
17 // Returns the effective proxy in an array from settings.
18 // An example of the settings is:
19 // "Proxy server for HTTP: [proxy.googlezip.net:443, " +
20 // "compress.googlezip.net:80, direct://]"
21 function getEffectiveProxies(doc
) {
22 var settings
= doc
.getElementById(PROXY_VIEW_EFFECTIVE_SETTINGS_ID
);
23 if (settings
&& settings
.innerHTML
&&
24 settings
.innerHTML
.indexOf(PRXOY_SETTINGS_PREFIX
) == 0) {
25 var left
= settings
.innerHTML
.indexOf('[');
26 var right
= settings
.innerHTML
.indexOf(']');
27 if (left
>= 0 && right
> left
) {
28 return settings
.innerHTML
.substring(left
+ 1, right
).split(/[ ,]+/);
34 // Returns an array of bad proxies. Each element is a bad proxy with
35 // attribute 'proxy' as the proxy name and attribute 'retry' as the
37 function getBadProxyList(doc
) {
38 var bad_proxies
= doc
.getElementById(PROXY_VIEW_BAD_PROXIES_ID
);
39 if (bad_proxies
.hasAttribute('style') &&
40 ('cssText' in bad_proxies
.style
) &&
41 bad_proxies
.style
.cssText
== 'display: none;') {
44 var tbody
= doc
.getElementById(PROXY_VIEW_BAD_PROXIES_TBODY
);
46 for (var r
= 0, n
= tbody
.rows
.length
; r
< n
; r
++) {
48 results
[r
].proxy
= tbody
.rows
[r
].cells
[0].innerHTML
;
49 timeSpan
= tbody
.rows
[r
].cells
[1].getElementsByTagName('span')[0];
50 if (timeSpan
.hasAttribute('title') && timeSpan
.title
.indexOf('t=') == 0) {
51 results
[r
].retry
= timeSpan
.title
.substr(2);
53 results
[r
].retry
= '-1';
59 function getChromeProxyInfo() {
60 if (!document
.getElementById(PROXY_VIEW_ID
)) {
64 info
.proxies
= getEffectiveProxies(document
);
65 info
.enabled
= (info
.proxies
.length
> 1 &&
66 info
.proxies
[info
.proxies
.length
- 1] == 'direct://' &&
67 info
.proxies
[info
.proxies
.length
- 2] != 'direct://');
68 info
.badProxies
= getBadProxyList(document
);
71 window
.__getChromeProxyInfo
= getChromeProxyInfo
;