| 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();
|
| });
|
|
|