// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * This view displays information on the proxy setup: * * - Shows the current proxy settings. * - Has a button to reload these settings. * - Shows the log entries for the most recent INIT_PROXY_RESOLVER source * - Shows the list of proxy hostnames that are cached as "bad". * - Has a button to clear the cached bad proxies. * * @constructor */ function ProxyView(mainBoxId, originalSettingsDivId, effectiveSettingsDivId, reloadSettingsButtonId, badProxiesTbodyId, clearBadProxiesButtonId, proxyResolverLogPreId) { DivView.call(this, mainBoxId); this.latestProxySourceEntries_ = null; this.latestProxySourceId_ = 0; // Hook up the UI components. this.originalSettingsDiv_ = document.getElementById(originalSettingsDivId); this.effectiveSettingsDiv_ = document.getElementById(effectiveSettingsDivId); this.proxyResolverLogPre_ = document.getElementById(proxyResolverLogPreId); this.badProxiesTbody_ = document.getElementById(badProxiesTbodyId); var reloadSettingsButton = document.getElementById(reloadSettingsButtonId); var clearBadProxiesButton = document.getElementById(clearBadProxiesButtonId); clearBadProxiesButton.onclick = g_browser.sendClearBadProxies.bind(g_browser); reloadSettingsButton.onclick = g_browser.sendReloadProxySettings.bind(g_browser); // Register to receive proxy information as it changes. g_browser.addProxySettingsObserver(this); g_browser.addBadProxiesObserver(this); g_browser.addLogObserver(this); } inherits(ProxyView, DivView); ProxyView.prototype.onProxySettingsChanged = function(proxySettings) { var original = proxySettings.original; var effective = proxySettings.effective; // Both |original| and |effective| are dictionaries describing the settings. this.originalSettingsDiv_.innerHTML = '' this.effectiveSettingsDiv_.innerHTML = '' addTextNode(this.originalSettingsDiv_, proxySettingsToString(original)); addTextNode(this.effectiveSettingsDiv_, proxySettingsToString(effective)); }; ProxyView.prototype.onBadProxiesChanged = function(badProxies) { this.badProxiesTbody_.innerHTML = ''; // Add a table row for each bad proxy entry. for (var i = 0; i < badProxies.length; ++i) { var entry = badProxies[i]; var badUntilDate = g_browser.convertTimeTicksToDate(entry.bad_until); var tr = addNode(this.badProxiesTbody_, 'tr'); var nameCell = addNode(tr, 'td'); var badUntilCell = addNode(tr, 'td'); addTextNode(nameCell, entry.proxy_uri); addTextNode(badUntilCell, badUntilDate.toLocaleString()); } }; ProxyView.prototype.onLogEntryAdded = function(logEntry) { if (logEntry.source.type != LogSourceType.INIT_PROXY_RESOLVER || this.latestProxySourceId_ > logEntry.source.id) { return; } if (logEntry.source.id > this.latestProxySourceId_) { this.latestProxySourceId_ = logEntry.source.id; this.latestProxySourceEntries_ = []; } this.latestProxySourceEntries_.push(logEntry); this.proxyResolverLogPre_.innerHTML = ''; addTextNode(this.proxyResolverLogPre_, PrintSourceEntriesAsText(this.latestProxySourceEntries_)); }; /** * Clears the display of and log entries for the last proxy lookup. */ ProxyView.prototype.clearLog_ = function() { this.latestProxySourceEntries_ = []; // Prevents display of partial logs. ++this.latestProxySourceId_; this.proxyResolverLogPre_.innerHTML = ''; addTextNode(this.proxyResolverLogPre_, 'Deleted.'); }; ProxyView.prototype.onLogEntriesDeleted = function(sourceIds) { if (sourceIds.indexOf(this.latestProxySourceId_) != -1) this.clearLog_(); }; ProxyView.prototype.onAllLogEntriesDeleted = function() { this.clearLog_(); }; ProxyView.prototype.onSetIsViewingLogFile = function(isViewingLogFile) { };