// 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) {
};