Chromium Code Reviews| Index: chrome/browser/resources/settings/internet_page/network_summary.js |
| diff --git a/chrome/browser/resources/settings/internet_page/network_summary.js b/chrome/browser/resources/settings/internet_page/network_summary.js |
| index 34a4b9a30c209d605fc76408bb1a3797f7f84609..3ddfc415fe44a3d7f61c24ffe7b769e345ee4021 100644 |
| --- a/chrome/browser/resources/settings/internet_page/network_summary.js |
| +++ b/chrome/browser/resources/settings/internet_page/network_summary.js |
| @@ -6,57 +6,130 @@ |
| * @fileoverview Polymer element for displaying a summary of network states |
| * by type: Ethernet, WiFi, Cellular, WiMAX, and VPN. |
| */ |
| +(function() { |
| + |
| +/** @typedef {chrome.networkingPrivate.DeviceStateProperties} */ |
| +var DeviceStateProperties; |
| + |
| +/** @typedef {chrome.networkingPrivate.NetworkStateProperties} */ |
| +var NetworkStateProperties; |
| + |
| +/** |
| + * @typedef {{ |
| + * Ethernet: (DeviceStateProperties|undefined), |
| + * WiFi: (DeviceStateProperties|undefined), |
| + * Cellular: (DeviceStateProperties|undefined), |
| + * WiMAX: (DeviceStateProperties|undefined), |
| + * VPN: (DeviceStateProperties|undefined) |
| + * }} |
| + */ |
| +var DeviceStateObject; |
| + |
| +/** |
| + * @typedef {{ |
| + * Ethernet: (CrOncDataElement|undefined), |
| + * WiFi: (CrOncDataElement|undefined), |
| + * Cellular: (CrOncDataElement|undefined), |
| + * WiMAX: (CrOncDataElement|undefined), |
| + * VPN: (CrOncDataElement|undefined) |
| + * }} |
| + */ |
| +var NetworkStateObject; |
| + |
| +/** |
| + * @typedef {{ |
| + * Ethernet: (Array<CrOncDataElement>|undefined), |
| + * WiFi: (Array<CrOncDataElement>|undefined), |
| + * Cellular: (Array<CrOncDataElement>|undefined), |
| + * WiMAX: (Array<CrOncDataElement>|undefined), |
| + * VPN: (Array<CrOncDataElement>|undefined) |
| + * }} |
| + */ |
| +var NetworkStateListObject; |
| + |
| +/** @const {!Array<string>} */ var |
| + NETWORK_TYPES = ['Ethernet', 'WiFi', 'Cellular', 'WiMAX', 'VPN']; |
| + |
| Polymer('cr-network-summary', { |
| publish: { |
| /** |
| + * The device state for each network device type. |
| + * |
| + * @attribute deviceStates |
| + * @type {?DeviceStateObject} |
| + * @default null |
| + */ |
| + deviceStates: null, |
| + |
| + /** |
| * Network state data for each network type. |
| * |
| * @attribute networkStates |
| - * @type {{ |
| - * Ethernet: (CrOncDataElement|undefined), |
| - * WiFi: (CrOncDataElement|undefined), |
| - * Cellular: (CrOncDataElement|undefined), |
| - * WiMAX: (CrOncDataElement|undefined), |
| - * VPN: (CrOncDataElement|undefined) |
| - * }} |
| - * @default {} |
| + * @type {?NetworkStateObject} |
| + * @default null |
| */ |
| networkStates: null, |
| + |
| + /** |
| + * List of network state data for each network type. |
| + * |
| + * @attribute networkStateLists |
| + * @type {?NetworkStateListObject} |
| + * @default null |
| + */ |
| + networkStateLists: null, |
| }, |
| /** |
| * Listener function for chrome.networkingPrivate.onNetworkListChanged event. |
| - * @type {function(!Array<string>)} |
| + * @type {?function(!Array<string>)} |
| + * @private |
| + */ |
| + networkListChangedListener_: null, |
| + |
| + /** |
| + * Listener function for chrome.networkingPrivate.onDeviceStateListChanged |
| + * event. |
| + * @type {?function(!Array<string>)} |
| * @private |
| */ |
| - listChangedListener_: null, |
| + deviceStateListChangedListener_: null, |
| /** |
| * Listener function for chrome.networkingPrivate.onNetworksChanged event. |
| - * @type {function(!Array<string>)} |
| + * @type {?function(!Array<string>)} |
| * @private |
| */ |
| networksChangedListener_: null, |
| /** |
| * Dictionary of GUIDs identifying primary (active) networks for each type. |
| - * @type {Object} |
| + * @type {?Object} |
| * @private |
| */ |
| - networkIds_: {}, |
| + networkIds_: null, |
| /** @override */ |
| created: function() { |
| + this.deviceStates = {}; |
| this.networkStates = {}; |
| + this.networkStateLists = {}; |
| + this.networkIds_ = {}; |
| }, |
| /** @override */ |
| attached: function() { |
| - this.getNetworks_(); |
| + this.getNetworkLists_(); |
| - this.listChangedListener_ = this.onNetworkListChangedEvent_.bind(this); |
| + this.networkListChangedListener_ = |
| + this.onNetworkListChangedEvent_.bind(this); |
| chrome.networkingPrivate.onNetworkListChanged.addListener( |
| - this.listChangedListener_); |
| + this.networkListChangedListener_); |
| + |
| + this.deviceStateListChangedListener_ = |
| + this.onDeviceStateListChangedEvent_.bind(this); |
| + chrome.networkingPrivate.onDeviceStateListChanged.addListener( |
| + this.deviceStateListChangedListener_); |
| this.networksChangedListener_ = this.onNetworksChangedEvent_.bind(this); |
| chrome.networkingPrivate.onNetworksChanged.addListener( |
| @@ -66,21 +139,74 @@ Polymer('cr-network-summary', { |
| /** @override */ |
| detached: function() { |
| chrome.networkingPrivate.onNetworkListChanged.removeListener( |
| - this.listChangedListener_); |
| + this.networkListChangedListener_); |
| + |
| + chrome.networkingPrivate.onDeviceStateListChanged.removeListener( |
| + this.deviceStateListChangedListener_); |
| chrome.networkingPrivate.onNetworksChanged.removeListener( |
| this.networksChangedListener_); |
| }, |
| /** |
| + * @param {string} deviceState The state of the device. |
| + * @return {boolean} Whether or not an item for the device type is visible. |
| * @private |
| */ |
| - onNetworkListChangedEvent_: function() { |
| - this.getNetworks_(); |
| + itemIsVisible_: function(deviceState) { return !!deviceState; }, |
| + |
| + /** |
| + * Event triggered when the WiFi cr-network-summary-item is expanded. |
| + * @param {!{detail: {expanded: boolean, type: string}}} event |
| + * @private |
| + */ |
| + onWiFiExpanded_: function(event) { |
| + this.getNetworkStates_(); // Get the latest network states (only). |
| + chrome.networkingPrivate.requestNetworkScan(); |
| + }, |
| + |
| + /** |
| + * Event triggered when a cr-network-summary-item is selected. |
| + * @param {!{detail: !CrOncDataElement}} event |
| + * @private |
| + */ |
| + onSelected_: function(event) { |
| + var onc = event.detail; |
| + if (onc.disconnected()) { |
| + this.connectToNetwork_(onc); |
| + return; |
| + } |
| + // TODO(stevenjb): Show details for connected or unconfigured networks. |
| }, |
| /** |
| - * @param {!Array<string>} networkIds The list of changed network GUIDs. |
| + * Event triggered when the enabled state of a cr-network-summary-item is |
| + * toggled. |
| + * @param {!{detail: {enabled: boolean, type: string}}} event |
| + * @private |
| + */ |
| + onToggleEnabled_: function(event) { |
| + if (event.detail.enabled) |
| + chrome.networkingPrivate.enableNetworkType(event.detail.type); |
| + else |
| + chrome.networkingPrivate.disableNetworkType(event.detail.type); |
| + }, |
| + |
| + /** |
| + * networkingPrivate.onNetworkListChanged event callback. |
| + * @private |
| + */ |
| + onNetworkListChangedEvent_: function() { this.getNetworkLists_(); }, |
| + |
| + /** |
| + * networkingPrivate.onDeviceStateListChanged event callback. |
| + * @private |
| + */ |
| + onDeviceStateListChangedEvent_: function() { this.getNetworkLists_(); }, |
| + |
| + /** |
| + * networkingPrivate.onNetworksChanged event callback. |
| + * @param {Array<string>} networkIds The list of changed network GUIDs. |
| * @private |
| */ |
| onNetworksChangedEvent_: function(networkIds) { |
| @@ -92,48 +218,106 @@ Polymer('cr-network-summary', { |
| }, this); |
| }, |
| - /** @private */ |
| - getNetworks_: function() { |
| + /** |
| + * Handles UI requests to connect to a network. |
| + * TODO(stevenjb): Handle Cellular activation, etc. |
| + * @param {!CrOncDataElement} state The network state. |
| + * @private |
| + */ |
| + connectToNetwork_: function(state) { |
| + chrome.networkingPrivate.startConnect(state.data.GUID); |
| + }, |
| + |
| + /** |
| + * Requests the list of device states and network states from Chrome. |
| + * Updates deviceStates, networkStates, and networkStateLists once the |
| + * results are returned from Chrome. |
| + * @private |
| + */ |
| + getNetworkLists_: function() { |
| + // First get the device states. |
| + chrome.networkingPrivate.getDeviceStates( |
| + function(states) { |
| + this.getDeviceStatesCallback_(states); |
| + // Second get the network states. |
| + this.getNetworkStates_(); |
| + }.bind(this)); |
| + }, |
| + |
| + /** |
| + * Requests the list of network states from Chrome. Updates networkStates, and |
|
michaelpg
2015/04/24 19:35:37
Remove the comma, so it's clear the callback does
stevenjb
2015/04/24 21:18:09
Done.
|
| + * networkStateLists once the results are returned from Chrome. |
| + * @private |
| + */ |
| + getNetworkStates_: function() { |
| var filter = { |
| networkType: 'All', |
| visible: true, |
| configured: false |
| }; |
| - chrome.networkingPrivate.getNetworks(filter, |
| - this.getNetworksCallback_.bind(this)); |
| + chrome.networkingPrivate.getNetworks( |
| + filter, this.getNetworksCallback_.bind(this)); |
|
michaelpg
2015/04/24 19:35:37
nit 4 spaces
stevenjb
2015/04/24 21:18:09
Done.
|
| + }, |
| + |
| + /** |
| + * networkingPrivate.getDeviceStates callback. |
| + * @param {!Array<!DeviceStateProperties>} states The state properties for all |
| + * available devices. |
| + * @private |
| + */ |
| + getDeviceStatesCallback_: function(states) { |
| + states.forEach(function(state) { |
| + this.deviceStates[state.Type] = state; |
| + }, this); |
| }, |
| /** |
| - * @param {!Array<!chrome.networkingPrivate.NetworkStateProperties>} states |
| - * The state properties for all networks. |
| + * networkingPrivate.getNetworksState callback. |
| + * @param {!Array<!NetworkStateProperties>} states The state properties for |
| + * all visible networks. |
| * @private |
| */ |
| getNetworksCallback_: function(states) { |
| - // Clear all active networks. |
| + // Clear any current networks. |
| this.networkIds_ = {}; |
| // Get the first (active) state for each type. |
| var foundTypes = {}; |
| + /** @type {!NetworkStateListObject} */ var oncNetworks = { |
| + Ethernet: [], |
| + WiFi: [], |
| + Cellular: [], |
| + WiMAX: [], |
| + VPN: [] |
| + }; |
| states.forEach(function(state) { |
| var type = state.Type; |
| if (!foundTypes[type]) { |
| foundTypes[type] = true; |
| this.updateNetworkState_(type, state); |
| } |
| + oncNetworks[type].push(CrOncDataElement.create(state)); |
| }, this); |
| - // Set any types not found to null. TODO(stevenjb): Support types that are |
| - // disabled but available with no active network. |
| - var types = ['Ethernet', 'WiFi', 'Cellular', 'WiMAX', 'VPN']; |
| - types.forEach(function(type) { |
| + // Set any types not found to null. |
| + NETWORK_TYPES.forEach(function(type) { |
| if (!foundTypes[type]) |
| this.updateNetworkState_(type, null); |
| }, this); |
| + |
| + // Set the network list for each type. |
| + NETWORK_TYPES.forEach(function(type) { |
| + this.networkStateLists[type] = oncNetworks[type]; |
| + }, this); |
| + |
| + // Create a VPN entry in deviceStates if there are any VPN networks. |
| + if (this.networkStateLists.VPN && this.networkStateLists.VPN.length > 0) |
| + this.deviceStates.VPN = { Type: 'VPN', State: 'Enabled' }; |
| }, |
| /** |
| - * @param {!chrome.networkingPrivate.NetworkStateProperties} state The state |
| - * properties for the network. |
| + * networkingPrivate.getState callback. |
| + * @param {!NetworkStateProperties} state The network state properties. |
| * @private |
| */ |
| getStateCallback_: function(state) { |
| @@ -148,9 +332,9 @@ Polymer('cr-network-summary', { |
| * Sets 'networkStates[type]' which will update the cr-network-list-item |
| * associated with 'type'. |
| * @param {string} type The network type. |
| - * @param {chrome.networkingPrivate.NetworkStateProperties} state The state |
| - * properties for the network to associate with |type|. May be null if |
| - * there are no networks matching |type|. |
| + * @param {?NetworkStateProperties} state The state properties for the network |
| + * to associate with |type|. May be null if there are no networks matching |
| + * |type|. |
| * @private |
| */ |
| updateNetworkState_: function(type, state) { |
| @@ -159,3 +343,4 @@ Polymer('cr-network-summary', { |
| this.networkIds_[state.GUID] = true; |
| }, |
| }); |
| +})(); |