OLD | NEW |
| (Empty) |
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. | |
4 | |
5 // This file contains common utilities to find chrome proxy related elements on | |
6 // a page and collect info from them. | |
7 | |
8 (function() { | |
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://'; | |
16 | |
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(/[ ,]+/); | |
29 } | |
30 } | |
31 return []; | |
32 } | |
33 | |
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 | |
36 // next retry time. | |
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;') { | |
42 return null; | |
43 } | |
44 var tbody = doc.getElementById(PROXY_VIEW_BAD_PROXIES_TBODY); | |
45 results = []; | |
46 for (var r = 0, n = tbody.rows.length; r < n; r++) { | |
47 results[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); | |
52 } else { | |
53 results[r].retry = '-1'; | |
54 } | |
55 } | |
56 return results; | |
57 } | |
58 | |
59 function getChromeProxyInfo() { | |
60 if (!document.getElementById(PROXY_VIEW_ID)) { | |
61 return null; | |
62 } | |
63 info = {}; | |
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); | |
69 return info; | |
70 }; | |
71 window.__getChromeProxyInfo = getChromeProxyInfo; | |
72 })(); | |
OLD | NEW |