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

Unified Diff: chrome/browser/resources/chromeos/diagnostics/main.js

Issue 10825291: Diagnostics UI: more UI implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase @ 151975. Created 8 years, 4 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/chromeos/diagnostics/main.js
diff --git a/chrome/browser/resources/chromeos/diagnostics/main.js b/chrome/browser/resources/chromeos/diagnostics/main.js
index d39ca3c880c6b791f9975975e5f05a58aaece3ec..89c1736112015d86427450cfa0eb1659f39da672 100644
--- a/chrome/browser/resources/chromeos/diagnostics/main.js
+++ b/chrome/browser/resources/chromeos/diagnostics/main.js
@@ -2,38 +2,239 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-/**
- * Updates the Connectivity Status section.
- * @param {String} connStatus Dictionary containing connectivity status.
- */
-function updateConnectivityStatus(connStatus) {
- var deviceTypes = ['wlan0', 'wwan0', 'eth0', 'eth1'];
- var deviceNames = ['Wi-Fi', '3G', 'Ethernet0', 'Ethernet1'];
- for (var i = 0; i < deviceTypes.length; i++) {
- var deviceName = deviceNames[i];
- var nameElement = document.createElement('h2');
- nameElement.appendChild(document.createTextNode(deviceName));
- $('connectivity-status').appendChild(nameElement);
-
- var deviceType = deviceTypes[i];
- var deviceStatus = connStatus[deviceType];
- var statusMessage;
- if (!deviceStatus) {
- statusMessage = 'Device not found.';
- } else if (!deviceStatus.flags ||
- deviceStatus.flags.indexOf('up') == -1) {
- statusMessage = 'Device disabled.';
- } else if (!deviceStatus.ipv4) {
- statusMessage = 'IPv4 address unavailable.';
- } else {
- statusMessage = 'IPv4 address: ' + deviceStatus.ipv4.addrs;
+var localStrings = new LocalStrings();
+
+cr.define('diag', function() {
+ /**
+ * Encapsulated handling of the diagnostics page.
+ */
+ function DiagPage() {}
+
+ cr.addSingletonGetter(DiagPage);
+
+ /*
+ * Remove all children nodes for an element.
+ * @param {element} parent of the elements to be removed.
+ */
+ function removeChildren(element) {
+ element.textContent = '';
+ }
+
+ /**
+ * List of network adapter types.
+ */
+ DiagPage.AdapterType = [
+ {adapter: 'wlan0', name: localStrings.getString('wlan0')},
+ {adapter: 'eth0', name: localStrings.getString('eth0')},
+ {adapter: 'eth1', name: localStrings.getString('eth1')},
+ {adapter: 'wwan0', name: localStrings.getString('wwan0')},
+ ];
+
+ /**
+ * List of network adapter status.
+ * The numeric value assigned to each status reflects how healthy the network
+ * adapter is.
+ *
+ * @enum {int}
+ */
+ DiagPage.AdapterStatus = {
+ NOT_FOUND: 0,
+ DISABLED: 1,
+ NO_IP: 2,
+ VALID_IP: 3
+ };
+
+ /**
+ * Image elements for icons.
+ */
+ DiagPage.FailIconElement = document.createElement('img');
+ DiagPage.TickIconElement = document.createElement('img');
+ DiagPage.FailIconElement.setAttribute('src', 'fail.png');
+ DiagPage.TickIconElement.setAttribute('src', 'tick.png');
+
+ DiagPage.prototype = {
+ /**
+ * Perform initial setup.
+ */
+ initialize: function() {
+ // Initialize member variables.
+ this.activeAdapter_ = -1;
+ this.adapterStatus_ = new Array();
+
+ // Attempt to update.
+ chrome.send('pageLoaded');
+ },
+
+ /**
+ * Updates the connectivity status with netif information.
+ * @param {String} netifStatus Dictionary of network adapter status.
+ */
+ setNetifStatus_: function(netifStatus) {
+ // Hide the "loading" message.
+ $('loading').hidden = true;
+
+ // Update netif state.
+ for (var i = 0; i < DiagPage.AdapterType.length; i++) {
+ var adapterType = DiagPage.AdapterType[i];
+ var status = netifStatus[adapterType.adapter];
+ if (!status)
+ this.adapterStatus_[i] = DiagPage.AdapterStatus.NOT_FOUND;
+ else if (!status.flags || status.flags.indexOf('up') == -1)
+ this.adapterStatus_[i] = DiagPage.AdapterStatus.DISABLED;
+ else if (!status.ipv4)
+ this.adapterStatus_[i] = DiagPage.AdapterStatus.NO_IP;
+ else
+ this.adapterStatus_[i] = DiagPage.AdapterStatus.VALID_IP;
+ }
+
+ // Update UI
+ this.updateAdapterSelection_();
+ this.updateConnectivityStatus_();
+ },
+
+ /**
+ * Gets the HTML radio input element id for a network adapter.
+ * @private
+ */
+ getAdapterElementId_: function(adapter) {
+ return 'adapter-' + DiagPage.AdapterType[adapter].adapter;
+ },
+
+ /**
+ * Gets the most active adapter based on their status.
+ * @private
+ */
+ getActiveAdapter_: function() {
+ var activeAdapter = -1;
+ var activeAdapterStatus = DiagPage.AdapterStatus.NOT_FOUND;
+ for (var i = 0; i < DiagPage.AdapterType.length; i++) {
+ var status = this.adapterStatus_[i];
+ if (status == DiagPage.AdapterStatus.NOT_FOUND)
+ continue;
+ if (activeAdapter == -1 || status > activeAdapterStatus) {
+ activeAdapter = i;
+ activeAdapterStatus = status;
+ }
+ }
+ return activeAdapter;
+ },
+
+ /**
+ * Update the adapter selection section.
+ * @private
+ */
+ updateAdapterSelection_: function() {
+ // Determine active adapter.
+ if (this.activeAdapter_ == -1)
+ this.activeAdapter_ = this.getActiveAdapter_();
+ // Create HTML radio input elements.
+ var adapterSelectionElement = $('adapter-selection');
+ removeChildren(adapterSelectionElement);
+ for (var i = 0; i < DiagPage.AdapterType.length; i++) {
+ if (this.adapterStatus_[i] == DiagPage.AdapterStatus.NOT_FOUND)
+ continue;
+ var radioElement = document.createElement('input');
+ var elementId = this.getAdapterElementId_(i);
+ radioElement.setAttribute('type', 'radio');
+ radioElement.setAttribute('name', 'adapter');
+ radioElement.setAttribute('id', elementId);
+ if (i == this.activeAdapter_)
+ radioElement.setAttribute('checked', 'true');
+ radioElement.onclick = function(adapter) {
+ this.activeAdapter_ = adapter;
+ this.updateConnectivityStatus_();
+ }.bind(this, i);
+ var labelElement = document.createElement('label');
+ labelElement.setAttribute('for', elementId);
+ labelElement.appendChild(radioElement);
+ labelElement.appendChild(
+ document.createTextNode(DiagPage.AdapterType[i].name));
+ adapterSelectionElement.appendChild(labelElement);
+ adapterSelectionElement.appendChild(document.createElement('br'));
+ }
+ },
+
+ /**
+ * Update the connectivity status for the specified network interface.
+ * @private
+ */
+ updateConnectivityStatus_: function() {
+ var adapter = this.activeAdapter_;
+ var status = this.adapterStatus_[adapter];
+ var name = DiagPage.AdapterType[adapter].name;
+
+ // Status messages for individual tests.
+ var connectivityStatusElement = $('connectivity-status');
+ var testStatusElements = new Array();
+ removeChildren(connectivityStatusElement);
+ for (var i = 0; i < 3; i++) {
+ testStatusElements[i] = document.createElement('div');
+ connectivityStatusElement.appendChild(testStatusElements[i]);
+ }
+ testStatusElements[0].innerHTML =
+ localStrings.getStringF('testing-hardware', name);
+ testStatusElements[1].innerHTML =
+ localStrings.getString('testing-connection-to-router');
+ testStatusElements[2].innerHTML =
+ localStrings.getString('testing-connection-to-internet');
+
+ // Error and recommendation messages may be inserted in test status
+ // elements.
+ var errorElement = document.createElement('div');
+ var recommendationElement = document.createElement('div');
+ errorElement.className = 'test-error';
+ recommendationElement.className = 'recommendation';
+ testStatusElements[0].className = 'test-performed';
+ if (status == DiagPage.AdapterStatus.DISABLED) {
+ errorElement.appendChild(DiagPage.FailIconElement.cloneNode());
+ errorElement.appendChild(document.createTextNode(
+ localStrings.getStringF('adapter-disabled', name)));
+ recommendationElement.innerHTML =
+ localStrings.getStringF('enable-adapter', name);
+ connectivityStatusElement.insertBefore(errorElement,
+ testStatusElements[1]);
+ connectivityStatusElement.insertBefore(recommendationElement,
+ testStatusElements[1]);
+ testStatusElements[1].className = 'test-pending';
+ testStatusElements[2].className = 'test-pending';
+ } else {
+ testStatusElements[0].appendChild(DiagPage.TickIconElement.cloneNode());
+ testStatusElements[1].className = 'test-performed';
+ if (status == DiagPage.AdapterStatus.NO_IP) {
+ errorElement.appendChild(DiagPage.FailIconElement.cloneNode());
+ errorElement.appendChild(document.createTextNode(
+ localStrings.getStringF('adapter-no-ip', name)));
+ recommendationElement.innerHTML =
+ localStrings.getStringF('fix-connection-to-router');
+ connectivityStatusElement.insertBefore(errorElement,
+ testStatusElements[2]);
+ connectivityStatusElement.insertBefore(recommendationElement,
+ testStatusElements[2]);
+ testStatusElements[2].className = 'test-pending';
+ } else {
+ testStatusElements[1].appendChild(
+ DiagPage.TickIconElement.cloneNode());
+ testStatusElements[2].className = 'test-performed';
+ testStatusElements[2].appendChild(
+ DiagPage.TickIconElement.cloneNode());
+ }
+ }
}
- var statusElement = document.createElement('p');
- statusElement.appendChild(document.createTextNode(statusMessage));
- $('connectivity-status').appendChild(statusElement);
+ };
+
+ DiagPage.setNetifStatus = function(netifStatus) {
+ DiagPage.getInstance().setNetifStatus_(netifStatus);
}
-}
+ // Export
+ return {
+ DiagPage: DiagPage
+ };
+});
+
+/**
+ * Initialize the DiagPage upon DOM content loaded.
+ */
document.addEventListener('DOMContentLoaded', function() {
- chrome.send('pageLoaded');
+ diag.DiagPage.getInstance().initialize();
});

Powered by Google App Engine
This is Rietveld 408576698