1// Copyright (c) 2011 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/** 6 * This view displays information on the proxy setup: 7 * 8 * - Shows the current proxy settings. 9 * - Has a button to reload these settings. 10 * - Shows the log entries for the most recent INIT_PROXY_RESOLVER source 11 * - Shows the list of proxy hostnames that are cached as "bad". 12 * - Has a button to clear the cached bad proxies. 13 * 14 * @constructor 15 */ 16function ProxyView(mainBoxId, 17 originalSettingsDivId, 18 effectiveSettingsDivId, 19 reloadSettingsButtonId, 20 badProxiesTbodyId, 21 clearBadProxiesButtonId, 22 proxyResolverLogPreId) { 23 DivView.call(this, mainBoxId); 24 25 this.latestProxySourceEntries_ = null; 26 this.latestProxySourceId_ = 0; 27 28 // Hook up the UI components. 29 this.originalSettingsDiv_ = document.getElementById(originalSettingsDivId); 30 this.effectiveSettingsDiv_ = 31 document.getElementById(effectiveSettingsDivId); 32 this.proxyResolverLogPre_ = document.getElementById(proxyResolverLogPreId); 33 this.badProxiesTbody_ = document.getElementById(badProxiesTbodyId); 34 35 var reloadSettingsButton = document.getElementById(reloadSettingsButtonId); 36 var clearBadProxiesButton = document.getElementById(clearBadProxiesButtonId); 37 38 clearBadProxiesButton.onclick = g_browser.sendClearBadProxies.bind(g_browser); 39 reloadSettingsButton.onclick = 40 g_browser.sendReloadProxySettings.bind(g_browser); 41 42 // Register to receive proxy information as it changes. 43 g_browser.addProxySettingsObserver(this); 44 g_browser.addBadProxiesObserver(this); 45 g_browser.addLogObserver(this); 46} 47 48inherits(ProxyView, DivView); 49 50ProxyView.prototype.onProxySettingsChanged = function(proxySettings) { 51 var original = proxySettings.original; 52 var effective = proxySettings.effective; 53 54 // Both |original| and |effective| are dictionaries describing the settings. 55 this.originalSettingsDiv_.innerHTML = '' 56 this.effectiveSettingsDiv_.innerHTML = '' 57 58 addTextNode(this.originalSettingsDiv_, proxySettingsToString(original)); 59 addTextNode(this.effectiveSettingsDiv_, proxySettingsToString(effective)); 60}; 61 62ProxyView.prototype.onBadProxiesChanged = function(badProxies) { 63 this.badProxiesTbody_.innerHTML = ''; 64 65 // Add a table row for each bad proxy entry. 66 for (var i = 0; i < badProxies.length; ++i) { 67 var entry = badProxies[i]; 68 var badUntilDate = g_browser.convertTimeTicksToDate(entry.bad_until); 69 70 var tr = addNode(this.badProxiesTbody_, 'tr'); 71 72 var nameCell = addNode(tr, 'td'); 73 var badUntilCell = addNode(tr, 'td'); 74 75 addTextNode(nameCell, entry.proxy_uri); 76 addTextNode(badUntilCell, badUntilDate.toLocaleString()); 77 } 78}; 79 80ProxyView.prototype.onLogEntryAdded = function(logEntry) { 81 if (logEntry.source.type != LogSourceType.INIT_PROXY_RESOLVER || 82 this.latestProxySourceId_ > logEntry.source.id) { 83 return; 84 } 85 86 if (logEntry.source.id > this.latestProxySourceId_) { 87 this.latestProxySourceId_ = logEntry.source.id; 88 this.latestProxySourceEntries_ = []; 89 } 90 91 this.latestProxySourceEntries_.push(logEntry); 92 this.proxyResolverLogPre_.innerHTML = ''; 93 addTextNode(this.proxyResolverLogPre_, 94 PrintSourceEntriesAsText(this.latestProxySourceEntries_)); 95}; 96 97/** 98 * Clears the display of and log entries for the last proxy lookup. 99 */ 100ProxyView.prototype.clearLog_ = function() { 101 this.latestProxySourceEntries_ = []; 102 // Prevents display of partial logs. 103 ++this.latestProxySourceId_; 104 105 this.proxyResolverLogPre_.innerHTML = ''; 106 addTextNode(this.proxyResolverLogPre_, 'Deleted.'); 107}; 108 109ProxyView.prototype.onLogEntriesDeleted = function(sourceIds) { 110 if (sourceIds.indexOf(this.latestProxySourceId_) != -1) 111 this.clearLog_(); 112}; 113 114ProxyView.prototype.onAllLogEntriesDeleted = function() { 115 this.clearLog_(); 116}; 117 118ProxyView.prototype.onSetIsViewingLogFile = function(isViewingLogFile) { 119}; 120 121