Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2659)

Unified Diff: chrome/browser/resources/net_internals/main.js

Issue 1607004: Add the proxy information to the new net internals page. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Max the URL work in presence of '#' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/net_internals/main.js
===================================================================
--- chrome/browser/resources/net_internals/main.js (revision 43515)
+++ chrome/browser/resources/net_internals/main.js (working copy)
@@ -11,9 +11,17 @@
var LogSourceType = null;
/**
+ * Object to communicate between the renderer and the browser.
+ * @type {!BrowserBridge}
+ */
+var g_browser = null;
+
+/**
* Main entry point. called once the page has loaded.
*/
function onLoaded() {
+ g_browser = new BrowserBridge();
+
// Create the view which displays requests lists, and lets you select, filter
// and delete them.
var requestsView = new RequestsView('requestsListTableBody',
@@ -35,13 +43,20 @@
"actionBox",
"splitterBox");
+ // Create a view which will display info on the proxy setup.
+ var proxyView = new ProxyView("proxyTabContent",
+ "proxyCurrentConfig",
+ "proxyReloadSettings",
+ "badProxiesTableBody",
+ "clearBadProxies");
+
// Create a view which lets you tab between the different sub-views.
var categoryTabSwitcher =
new TabSwitcherView(new DivView('categoryTabHandles'));
// Populate the main tabs.
categoryTabSwitcher.addTab('requestsTab', requestsView);
- categoryTabSwitcher.addTab('proxyTab', new DivView('proxyTabContent'));
+ categoryTabSwitcher.addTab('proxyTab', proxyView);
categoryTabSwitcher.addTab('dnsTab', new DivView('dnsTabContent'));
categoryTabSwitcher.addTab('socketsTab', new DivView('socketsTabContent'));
categoryTabSwitcher.addTab('httpCacheTab',
@@ -57,55 +72,180 @@
windowView.resetGeometry();
// Tell the browser that we are ready to start receiving log events.
- notifyApplicationReady();
+ g_browser.sendReady();
}
+/**
+ * This class provides a "bridge" for communicating between the javascript and
+ * the browser.
+ *
+ * @constructor
+ */
+function BrowserBridge() {
+ // List of observers for various bits of browser state.
+ this.logObservers_ = [];
+ this.proxySettingsObservers_ = [];
+ this.badProxiesObservers_ = [];
+
+ // Map from observer method name (i.e. 'onProxySettingsChanged', 'onBadProxiesChanged')
+ // to the previously received data for that type. Used to tell if the data has
+ // actually changed since we last polled it.
+ this.prevPollData_ = {};
+}
+
+/**
+ * Delay in milliseconds between polling of certain browser information.
+ */
+BrowserBridge.POLL_INTERVAL_MS = 5000;
+
//------------------------------------------------------------------------------
// Messages sent to the browser
//------------------------------------------------------------------------------
-function notifyApplicationReady() {
+BrowserBridge.prototype.sendReady = function() {
chrome.send('notifyReady');
-}
+ // Some of the data we are interested is not currently exposed as a stream,
+ // so we will poll the browser to find out when it changes and then notify
+ // the observers.
+ window.setInterval(
+ this.doPolling_.bind(this), BrowserBridge.POLL_INTERVAL_MS);
+};
+
+BrowserBridge.prototype.sendGetProxySettings = function() {
+ // The browser will call receivedProxySettings on completion.
+ chrome.send('getProxySettings');
+};
+
+BrowserBridge.prototype.sendReloadProxySettings = function() {
+ chrome.send('reloadProxySettings');
+};
+
+BrowserBridge.prototype.sendGetBadProxies = function() {
+ // The browser will call receivedBadProxies on completion.
+ chrome.send('getBadProxies');
+};
+
+BrowserBridge.prototype.sendClearBadProxies = function() {
+ chrome.send('clearBadProxies');
+};
+
//------------------------------------------------------------------------------
// Messages received from the browser
//------------------------------------------------------------------------------
-function onLogEntryAdded(logEntry) {
- LogDataProvider.broadcast(logEntry);
-}
+BrowserBridge.prototype.receivedLogEntry = function(logEntry) {
+ for (var i = 0; i < this.logObservers_.length; ++i)
+ this.logObservers_[i].onLogEntryAdded(logEntry);
+};
-function setLogEventTypeConstants(constantsMap) {
+BrowserBridge.prototype.receivedLogEventTypeConstants = function(constantsMap) {
LogEventType = constantsMap;
-}
+};
-function setLogEventPhaseConstants(constantsMap) {
+BrowserBridge.prototype.receivedLogEventPhaseConstants = function(constantsMap) {
LogEventPhase = constantsMap;
-}
+};
-function setLogSourceTypeConstants(constantsMap) {
+BrowserBridge.prototype.receivedLogSourceTypeConstants = function(constantsMap) {
LogSourceType = constantsMap;
-}
+};
-function setLogEntryTypeConstants(constantsMap) {
+BrowserBridge.prototype.receivedLogEntryTypeConstants = function(constantsMap) {
LogEntryType = constantsMap;
-}
+};
+BrowserBridge.prototype.receivedTimeTickOffset = function(timeTickOffset) {
+ this.timeTickOffset_ = timeTickOffset;
+};
+
+BrowserBridge.prototype.receivedProxySettings = function(proxySettings) {
+ this.dispatchToObserversFromPoll_(
+ this.proxySettingsObservers_, 'onProxySettingsChanged', proxySettings);
+};
+
+BrowserBridge.prototype.receivedBadProxies = function(badProxies) {
+ this.dispatchToObserversFromPoll_(
+ this.badProxiesObservers_, 'onBadProxiesChanged', badProxies);
+};
+
//------------------------------------------------------------------------------
-// LogDataProvider
-//------------------------------------------------------------------------------
-var LogDataProvider = {}
+/**
+ * Adds a listener of log entries. |observer| will be called back when new log
+ * data arrives, through:
+ *
+ * observer.onLogEntryAdded(logEntry)
+ */
+BrowserBridge.prototype.addLogObserver = function(observer) {
+ this.logObservers_.push(observer);
+};
-LogDataProvider.observers_ = [];
+/**
+ * Adds a listener of the proxy settings. |observer| will be called back when
+ * data is received, through:
+ *
+ * observer.onProxySettingsChanged(proxySettings)
+ *
+ * |proxySettings| is a formatted string describing the settings.
+ * TODO(eroman): send a dictionary instead.
+ */
+BrowserBridge.prototype.addProxySettingsObserver = function(observer) {
+ this.proxySettingsObservers_.push(observer);
+};
-LogDataProvider.broadcast = function(logEntry) {
- for (var i = 0; i < this.observers_.length; ++i) {
- this.observers_[i].onLogEntryAdded(logEntry);
- }
+/**
+ * Adds a listener of the proxy settings. |observer| will be called back when
+ * data is received, through:
+ *
+ * observer.onBadProxiesChanged(badProxies)
+ *
+ * |badProxies| is an array, where each entry has the property:
+ * badProxies[i].proxy_uri: String identify the proxy.
+ * badProxies[i].bad_until: The time when the proxy stops being considered
+ * bad. Note the time is in time ticks.
+ */
+BrowserBridge.prototype.addBadProxiesObsever = function(observer) {
+ this.badProxiesObservers_.push(observer);
};
-LogDataProvider.addObserver = function(observer) {
- this.observers_.push(observer);
+/**
+ * The browser gives us times in terms of "time ticks" in milliseconds.
+ * This function converts the tick count to a Date() object.
+ *
+ * @param {String} timeTicks.
+ * @returns {Date} The time that |timeTicks| represents.
+ */
+BrowserBridge.prototype.convertTimeTicksToDate = function(timeTicks) {
+ // Note that the subtraction by 0 is to cast to a number (probably a float
+ // since the numbers are big).
+ var timeStampMs = (this.timeTickOffset_ - 0) + (timeTicks - 0);
+ var d = new Date();
+ d.setTime(timeStampMs);
+ return d;
};
+
+BrowserBridge.prototype.doPolling_ = function() {
+ this.sendGetProxySettings();
+ this.sendGetBadProxies();
+};
+
+/**
+ * Helper function to handle calling all the observers, but ONLY if the data has
+ * actually changed since last time. This is used for data we received from
+ * browser on a poll loop.
+ */
+BrowserBridge.prototype.dispatchToObserversFromPoll_ = function(
+ observerList, method, data) {
+ var prevData = this.prevPollData_[method];
+
+ // If the data hasn't changed since last time, no need to notify observers.
+ if (prevData && JSON.stringify(prevData) == JSON.stringify(data))
+ return;
+
+ this.prevPollData_[method] = data;
+
+ // Ok, notify the observers of the change.
+ for (var i = 0; i < observerList.length; ++i)
+ observerList[i][method](data);
+};
« no previous file with comments | « chrome/browser/resources/net_internals/main.css ('k') | chrome/browser/resources/net_internals/proxyview.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698