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

Side by Side Diff: chrome/browser/resources/settings/internet_page/network_summary.js

Issue 1100993002: Implement md-settings network lists. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview Polymer element for displaying a summary of network states 6 * @fileoverview Polymer element for displaying a summary of network states
7 * by type: Ethernet, WiFi, Cellular, WiMAX, and VPN. 7 * by type: Ethernet, WiFi, Cellular, WiMAX, and VPN.
8 */ 8 */
9 (function() {
10
11 /** @typedef {chrome.networkingPrivate.DeviceStateProperties} */
12 var DeviceStateProperties;
13
14 /** @typedef {chrome.networkingPrivate.NetworkStateProperties} */
15 var NetworkStateProperties;
16
17 /**
18 * @typedef {{
19 * Ethernet: (DeviceStateProperties|undefined),
20 * WiFi: (DeviceStateProperties|undefined),
21 * Cellular: (DeviceStateProperties|undefined),
22 * WiMAX: (DeviceStateProperties|undefined),
23 * VPN: (DeviceStateProperties|undefined)
24 * }}
25 */
26 var DeviceStateObject;
27
28 /**
29 * @typedef {{
30 * Ethernet: (CrOncDataElement|undefined),
31 * WiFi: (CrOncDataElement|undefined),
32 * Cellular: (CrOncDataElement|undefined),
33 * WiMAX: (CrOncDataElement|undefined),
34 * VPN: (CrOncDataElement|undefined)
35 * }}
36 */
37 var NetworkStateObject;
38
39 /**
40 * @typedef {{
41 * Ethernet: (Array<CrOncDataElement>|undefined),
42 * WiFi: (Array<CrOncDataElement>|undefined),
43 * Cellular: (Array<CrOncDataElement>|undefined),
44 * WiMAX: (Array<CrOncDataElement>|undefined),
45 * VPN: (Array<CrOncDataElement>|undefined)
46 * }}
47 */
48 var NetworkStateListObject;
49
50 /** @const {!Array<string>} */
51 var NETWORK_TYPES = ['Ethernet', 'WiFi', 'Cellular', 'WiMAX', 'VPN'];
52
9 Polymer('cr-network-summary', { 53 Polymer('cr-network-summary', {
10 publish: { 54 publish: {
11 /** 55 /**
56 * The device state for each network device type.
57 *
58 * @attribute deviceStates
59 * @type {?DeviceStateObject}
60 * @default null
61 */
62 deviceStates: null,
63
64 /**
12 * Network state data for each network type. 65 * Network state data for each network type.
13 * 66 *
14 * @attribute networkStates 67 * @attribute networkStates
15 * @type {{ 68 * @type {?NetworkStateObject}
16 * Ethernet: (CrOncDataElement|undefined), 69 * @default null
17 * WiFi: (CrOncDataElement|undefined),
18 * Cellular: (CrOncDataElement|undefined),
19 * WiMAX: (CrOncDataElement|undefined),
20 * VPN: (CrOncDataElement|undefined)
21 * }}
22 * @default {}
23 */ 70 */
24 networkStates: null, 71 networkStates: null,
72
73 /**
74 * List of network state data for each network type.
75 *
76 * @attribute networkStateLists
77 * @type {?NetworkStateListObject}
78 * @default null
79 */
80 networkStateLists: null,
25 }, 81 },
26 82
27 /** 83 /**
28 * Listener function for chrome.networkingPrivate.onNetworkListChanged event. 84 * Listener function for chrome.networkingPrivate.onNetworkListChanged event.
29 * @type {function(!Array<string>)} 85 * @type {?function(!Array<string>)}
30 * @private 86 * @private
31 */ 87 */
32 listChangedListener_: null, 88 networkListChangedListener_: null,
89
90 /**
91 * Listener function for chrome.networkingPrivate.onDeviceStateListChanged
92 * event.
93 * @type {?function(!Array<string>)}
94 * @private
95 */
96 deviceStateListChangedListener_: null,
33 97
34 /** 98 /**
35 * Listener function for chrome.networkingPrivate.onNetworksChanged event. 99 * Listener function for chrome.networkingPrivate.onNetworksChanged event.
36 * @type {function(!Array<string>)} 100 * @type {?function(!Array<string>)}
37 * @private 101 * @private
38 */ 102 */
39 networksChangedListener_: null, 103 networksChangedListener_: null,
40 104
41 /** 105 /**
42 * Dictionary of GUIDs identifying primary (active) networks for each type. 106 * Dictionary of GUIDs identifying primary (active) networks for each type.
43 * @type {Object} 107 * @type {?Object}
44 * @private 108 * @private
45 */ 109 */
46 networkIds_: {}, 110 networkIds_: null,
47 111
48 /** @override */ 112 /** @override */
49 created: function() { 113 created: function() {
114 this.deviceStates = {};
50 this.networkStates = {}; 115 this.networkStates = {};
116 this.networkStateLists = {};
117 this.networkIds_ = {};
51 }, 118 },
52 119
53 /** @override */ 120 /** @override */
54 attached: function() { 121 attached: function() {
55 this.getNetworks_(); 122 this.getNetworkLists_();
56 123
57 this.listChangedListener_ = this.onNetworkListChangedEvent_.bind(this); 124 this.networkListChangedListener_ =
125 this.onNetworkListChangedEvent_.bind(this);
58 chrome.networkingPrivate.onNetworkListChanged.addListener( 126 chrome.networkingPrivate.onNetworkListChanged.addListener(
59 this.listChangedListener_); 127 this.networkListChangedListener_);
128
129 this.deviceStateListChangedListener_ =
130 this.onDeviceStateListChangedEvent_.bind(this);
131 chrome.networkingPrivate.onDeviceStateListChanged.addListener(
132 this.deviceStateListChangedListener_);
60 133
61 this.networksChangedListener_ = this.onNetworksChangedEvent_.bind(this); 134 this.networksChangedListener_ = this.onNetworksChangedEvent_.bind(this);
62 chrome.networkingPrivate.onNetworksChanged.addListener( 135 chrome.networkingPrivate.onNetworksChanged.addListener(
63 this.networksChangedListener_); 136 this.networksChangedListener_);
64 }, 137 },
65 138
66 /** @override */ 139 /** @override */
67 detached: function() { 140 detached: function() {
68 chrome.networkingPrivate.onNetworkListChanged.removeListener( 141 chrome.networkingPrivate.onNetworkListChanged.removeListener(
69 this.listChangedListener_); 142 this.networkListChangedListener_);
143
144 chrome.networkingPrivate.onDeviceStateListChanged.removeListener(
145 this.deviceStateListChangedListener_);
70 146
71 chrome.networkingPrivate.onNetworksChanged.removeListener( 147 chrome.networkingPrivate.onNetworksChanged.removeListener(
72 this.networksChangedListener_); 148 this.networksChangedListener_);
73 }, 149 },
74 150
75 /** 151 /**
152 * Event triggered when the WiFi cr-network-summary-item is expanded.
153 * @param {!{detail: {expanded: boolean, type: string}}} event
76 * @private 154 * @private
77 */ 155 */
78 onNetworkListChangedEvent_: function() { 156 onWiFiExpanded_: function(event) {
79 this.getNetworks_(); 157 this.getNetworkStates_(); // Get the latest network states (only).
158 chrome.networkingPrivate.requestNetworkScan();
80 }, 159 },
81 160
82 /** 161 /**
162 * Event triggered when a cr-network-summary-item is selected.
163 * @param {!{detail: !CrOncDataElement}} event
164 * @private
165 */
166 onSelected_: function(event) {
167 var onc = event.detail;
168 if (onc.disconnected()) {
169 this.connectToNetwork_(onc);
170 return;
171 }
172 // TODO(stevenjb): Show details for connected or unconfigured networks.
173 },
174
175 /**
176 * Event triggered when the enabled state of a cr-network-summary-item is
177 * toggled.
178 * @param {!{detail: {enabled: boolean, type: string}}} event
179 * @private
180 */
181 onDeviceEnabledToggled_: function(event) {
182 if (event.detail.enabled)
183 chrome.networkingPrivate.enableNetworkType(event.detail.type);
184 else
185 chrome.networkingPrivate.disableNetworkType(event.detail.type);
186 },
187
188 /**
189 * networkingPrivate.onNetworkListChanged event callback.
190 * @private
191 */
192 onNetworkListChangedEvent_: function() { this.getNetworkLists_(); },
193
194 /**
195 * networkingPrivate.onDeviceStateListChanged event callback.
196 * @private
197 */
198 onDeviceStateListChangedEvent_: function() { this.getNetworkLists_(); },
199
200 /**
201 * networkingPrivate.onNetworksChanged event callback.
83 * @param {!Array<string>} networkIds The list of changed network GUIDs. 202 * @param {!Array<string>} networkIds The list of changed network GUIDs.
84 * @private 203 * @private
85 */ 204 */
86 onNetworksChangedEvent_: function(networkIds) { 205 onNetworksChangedEvent_: function(networkIds) {
87 networkIds.forEach(function(id) { 206 networkIds.forEach(function(id) {
88 if (id in this.networkIds_) { 207 if (id in this.networkIds_) {
89 chrome.networkingPrivate.getState(id, 208 chrome.networkingPrivate.getState(id,
90 this.getStateCallback_.bind(this)); 209 this.getStateCallback_.bind(this));
91 } 210 }
92 }, this); 211 }, this);
93 }, 212 },
94 213
95 /** @private */ 214 /**
96 getNetworks_: function() { 215 * Handles UI requests to connect to a network.
216 * TODO(stevenjb): Handle Cellular activation, etc.
217 * @param {!CrOncDataElement} state The network state.
218 * @private
219 */
220 connectToNetwork_: function(state) {
221 chrome.networkingPrivate.startConnect(state.data.GUID);
222 },
223
224 /**
225 * Requests the list of device states and network states from Chrome.
226 * Updates deviceStates, networkStates, and networkStateLists once the
227 * results are returned from Chrome.
228 * @private
229 */
230 getNetworkLists_: function() {
231 // First get the device states.
232 chrome.networkingPrivate.getDeviceStates(
233 function(states) {
234 this.getDeviceStatesCallback_(states);
235 // Second get the network states.
236 this.getNetworkStates_();
237 }.bind(this));
238 },
239
240 /**
241 * Requests the list of network states from Chrome. Updates networkStates and
242 * networkStateLists once the results are returned from Chrome.
243 * @private
244 */
245 getNetworkStates_: function() {
97 var filter = { 246 var filter = {
98 networkType: 'All', 247 networkType: 'All',
99 visible: true, 248 visible: true,
100 configured: false 249 configured: false
101 }; 250 };
102 chrome.networkingPrivate.getNetworks(filter, 251 chrome.networkingPrivate.getNetworks(
103 this.getNetworksCallback_.bind(this)); 252 filter, this.getNetworksCallback_.bind(this));
104 }, 253 },
105 254
106 /** 255 /**
107 * @param {!Array<!chrome.networkingPrivate.NetworkStateProperties>} states 256 * networkingPrivate.getDeviceStates callback.
108 * The state properties for all networks. 257 * @param {!Array<!DeviceStateProperties>} states The state properties for all
258 * available devices.
259 * @private
260 */
261 getDeviceStatesCallback_: function(states) {
262 /** @type {!DeviceStateObject} */ var newStates = {};
263 states.forEach(function(state) { newStates[state.Type] = state; });
264 this.deviceStates = newStates;
265 },
266
267 /**
268 * networkingPrivate.getNetworksState callback.
269 * @param {!Array<!NetworkStateProperties>} states The state properties for
270 * all visible networks.
109 * @private 271 * @private
110 */ 272 */
111 getNetworksCallback_: function(states) { 273 getNetworksCallback_: function(states) {
112 // Clear all active networks. 274 // Clear any current networks.
113 this.networkIds_ = {}; 275 this.networkIds_ = {};
114 276
115 // Get the first (active) state for each type. 277 // Get the first (active) state for each type.
116 var foundTypes = {}; 278 var foundTypes = {};
279 /** @type {!NetworkStateListObject} */ var oncNetworks = {
280 Ethernet: [],
281 WiFi: [],
282 Cellular: [],
283 WiMAX: [],
284 VPN: []
285 };
117 states.forEach(function(state) { 286 states.forEach(function(state) {
118 var type = state.Type; 287 var type = state.Type;
119 if (!foundTypes[type]) { 288 if (!foundTypes[type]) {
120 foundTypes[type] = true; 289 foundTypes[type] = true;
121 this.updateNetworkState_(type, state); 290 this.updateNetworkState_(type, state);
122 } 291 }
292 oncNetworks[type].push(CrOncDataElement.create(state));
123 }, this); 293 }, this);
124 294
125 // Set any types not found to null. TODO(stevenjb): Support types that are 295 // Set any types not found to a default value or null.
126 // disabled but available with no active network. 296 NETWORK_TYPES.forEach(function(type) {
127 var types = ['Ethernet', 'WiFi', 'Cellular', 'WiMAX', 'VPN']; 297 if (!foundTypes[type]) {
128 types.forEach(function(type) { 298 /** @type {NetworkStateProperties} */ var defaultState = null;
129 if (!foundTypes[type]) 299 if (this.deviceStates[type])
130 this.updateNetworkState_(type, null); 300 defaultState = { GUID: '', Type: 'WiFi' };
301 this.updateNetworkState_(type, defaultState);
302 }
131 }, this); 303 }, this);
304
305 // Set the network list for each type.
306 NETWORK_TYPES.forEach(function(type) {
307 this.networkStateLists[type] = oncNetworks[type];
308 }, this);
309
310 // Create a VPN entry in deviceStates if there are any VPN networks.
311 if (this.networkStateLists.VPN && this.networkStateLists.VPN.length > 0)
312 this.deviceStates.VPN = { Type: 'VPN', State: 'Enabled' };
132 }, 313 },
133 314
134 /** 315 /**
135 * @param {!chrome.networkingPrivate.NetworkStateProperties} state The state 316 * networkingPrivate.getState callback.
136 * properties for the network. 317 * @param {!NetworkStateProperties} state The network state properties.
137 * @private 318 * @private
138 */ 319 */
139 getStateCallback_: function(state) { 320 getStateCallback_: function(state) {
140 var id = state.GUID; 321 var id = state.GUID;
141 if (!this.networkIds_[id]) 322 if (!this.networkIds_[id])
142 return; 323 return;
143 this.updateNetworkState_(state.Type, state); 324 this.updateNetworkState_(state.Type, state);
144 }, 325 },
145 326
146 /** 327 /**
147 * Creates a CrOncDataElement from the network state (if not null) for 'type'. 328 * Creates a CrOncDataElement from the network state (if not null) for 'type'.
148 * Sets 'networkStates[type]' which will update the cr-network-list-item 329 * Sets 'networkStates[type]' which will update the cr-network-list-item
149 * associated with 'type'. 330 * associated with 'type'.
150 * @param {string} type The network type. 331 * @param {string} type The network type.
151 * @param {chrome.networkingPrivate.NetworkStateProperties} state The state 332 * @param {?NetworkStateProperties} state The state properties for the network
152 * properties for the network to associate with |type|. May be null if 333 * to associate with |type|. May be null if there are no networks matching
153 * there are no networks matching |type|. 334 * |type|.
154 * @private 335 * @private
155 */ 336 */
156 updateNetworkState_: function(type, state) { 337 updateNetworkState_: function(type, state) {
157 this.networkStates[type] = state ? CrOncDataElement.create(state) : null; 338 this.networkStates[type] = state ? CrOncDataElement.create(state) : null;
158 if (state) 339 if (state)
159 this.networkIds_[state.GUID] = true; 340 this.networkIds_[state.GUID] = true;
160 }, 341 },
161 }); 342 });
343 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698