| 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 |