OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 cr.define('options.internet', function() { | |
6 var OptionsPage = options.OptionsPage; | |
7 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; | |
8 /** @const */ var IPAddressField = options.internet.IPAddressField; | |
9 | |
10 /** | |
11 * Network settings constants. These enums must match their C++ | |
12 * counterparts. | |
13 */ | |
14 function Constants() {} | |
15 | |
16 // Network types: | |
17 Constants.TYPE_UNKNOWN = 0; | |
18 Constants.TYPE_ETHERNET = 1; | |
19 Constants.TYPE_WIFI = 2; | |
20 Constants.TYPE_WIMAX = 3; | |
21 Constants.TYPE_BLUETOOTH = 4; | |
22 Constants.TYPE_CELLULAR = 5; | |
23 Constants.TYPE_VPN = 6; | |
24 | |
25 /* | |
26 * Helper function to set hidden attribute for elements matching a selector. | |
27 * @param {string} selector CSS selector for extracting a list of elements. | |
28 * @param {bool} hidden New hidden value. | |
29 */ | |
30 function updateHidden(selector, hidden) { | |
31 var elements = cr.doc.querySelectorAll(selector); | |
32 for (var i = 0, el; el = elements[i]; i++) { | |
33 el.hidden = hidden; | |
34 } | |
35 } | |
36 | |
37 /** | |
38 * Monitor pref change of given element. | |
39 * @param {Element} el Target element. | |
40 */ | |
41 function observePrefsUI(el) { | |
42 Preferences.getInstance().addEventListener(el.pref, handlePrefUpdate); | |
43 } | |
44 | |
45 /** | |
46 * UI pref change handler. | |
47 * @param {Event} e The update event. | |
48 */ | |
49 function handlePrefUpdate(e) { | |
50 DetailsInternetPage.getInstance().updateControls(); | |
51 } | |
52 | |
53 ///////////////////////////////////////////////////////////////////////////// | |
54 // DetailsInternetPage class: | |
55 | |
56 /** | |
57 * Encapsulated handling of ChromeOS internet details overlay page. | |
58 * @constructor | |
59 */ | |
60 function DetailsInternetPage() { | |
61 OptionsPage.call(this, | |
62 'detailsInternetPage', | |
63 null, | |
64 'details-internet-page'); | |
65 } | |
66 | |
67 cr.addSingletonGetter(DetailsInternetPage); | |
68 | |
69 DetailsInternetPage.prototype = { | |
70 __proto__: OptionsPage.prototype, | |
71 | |
72 /** | |
73 * Indicates if the list of proxy exceptions has been initialized. | |
74 * @type {boolean} | |
75 */ | |
76 proxyListInitialized_: false, | |
77 | |
78 /** | |
79 * Initializes DetailsInternetPage page. | |
80 * Calls base class implementation to starts preference initialization. | |
81 */ | |
82 initializePage: function() { | |
83 OptionsPage.prototype.initializePage.call(this); | |
84 options.internet.CellularPlanElement.decorate($('plan-list')); | |
85 var params = parseQueryParams(window.location); | |
86 this.initializePageContents_(params); | |
87 this.showNetworkDetails_(params); | |
88 }, | |
89 | |
90 /** | |
91 * Auto-activates the network details dialog if network information | |
92 * is included in the URL. | |
93 */ | |
94 showNetworkDetails_: function(params) { | |
95 var servicePath = params.servicePath; | |
96 var networkType = params.networkType; | |
97 if (!servicePath || !servicePath.length || | |
98 !networkType || !networkType.length) | |
99 return; | |
100 chrome.send('networkCommand', | |
101 [networkType, servicePath, 'options']); | |
102 }, | |
103 | |
104 /** | |
105 * Initializes the contents of the page. | |
106 */ | |
107 initializePageContents_: function(params) { | |
108 $('details-internet-dismiss').addEventListener('click', function(event) { | |
109 DetailsInternetPage.setDetails(); | |
110 }); | |
111 | |
112 $('details-internet-login').addEventListener('click', function(event) { | |
113 DetailsInternetPage.setDetails(); | |
114 DetailsInternetPage.loginFromDetails(); | |
115 }); | |
116 | |
117 $('details-internet-disconnect').addEventListener('click', | |
118 function(event) { | |
119 DetailsInternetPage.setDetails(); | |
120 DetailsInternetPage.disconnectNetwork(); | |
121 }); | |
122 | |
123 $('activate-details').addEventListener('click', function(event) { | |
124 DetailsInternetPage.activateFromDetails(); | |
125 }); | |
126 | |
127 $('buyplan-details').addEventListener('click', function(event) { | |
128 var data = $('connection-state').data; | |
129 chrome.send('buyDataPlan', [String(data.servicePath)]); | |
130 OptionsPage.closeOverlay(); | |
131 }); | |
132 | |
133 $('view-account-details').addEventListener('click', function(event) { | |
134 chrome.send('showMorePlanInfo'); | |
135 OptionsPage.closeOverlay(); | |
136 }); | |
137 | |
138 $('cellular-apn-use-default').addEventListener('click', function(event) { | |
139 var data = $('connection-state').data; | |
140 var apnSelector = $('select-apn'); | |
141 | |
142 if (data.userApnIndex != -1) { | |
143 apnSelector.remove(data.userApnIndex); | |
144 data.userApnIndex = -1; | |
145 } | |
146 | |
147 if (data.providerApnList.value.length > 0) { | |
148 var iApn = 0; | |
149 data.apn.apn = data.providerApnList.value[iApn].apn; | |
150 data.apn.username = data.providerApnList.value[iApn].username; | |
151 data.apn.password = data.providerApnList.value[iApn].password; | |
152 chrome.send('setApn', [String(data.servicePath), | |
153 String(data.apn.apn), | |
154 String(data.apn.username), | |
155 String(data.apn.password)]); | |
156 apnSelector.selectedIndex = iApn; | |
157 data.selectedApn = iApn; | |
158 } else { | |
159 data.apn.apn = ''; | |
160 data.apn.username = ''; | |
161 data.apn.password = ''; | |
162 apnSelector.selectedIndex = -1; | |
163 data.selectedApn = -1; | |
164 } | |
165 updateHidden('.apn-list-view', false); | |
166 updateHidden('.apn-details-view', true); | |
167 }); | |
168 | |
169 $('cellular-apn-set').addEventListener('click', function(event) { | |
170 if ($('cellular-apn').value == '') | |
171 return; | |
172 | |
173 var data = $('connection-state').data; | |
174 var apnSelector = $('select-apn'); | |
175 | |
176 data.apn.apn = String($('cellular-apn').value); | |
177 data.apn.username = String($('cellular-apn-username').value); | |
178 data.apn.password = String($('cellular-apn-password').value); | |
179 chrome.send('setApn', [String(data.servicePath), | |
180 String(data.apn.apn), | |
181 String(data.apn.username), | |
182 String(data.apn.password)]); | |
183 | |
184 if (data.userApnIndex != -1) { | |
185 apnSelector.remove(data.userApnIndex); | |
186 data.userApnIndex = -1; | |
187 } | |
188 | |
189 var option = document.createElement('option'); | |
190 option.textContent = data.apn.apn; | |
191 option.value = -1; | |
192 option.selected = true; | |
193 apnSelector.add(option, apnSelector[apnSelector.length - 1]); | |
194 data.userApnIndex = apnSelector.length - 2; | |
195 data.selectedApn = data.userApnIndex; | |
196 | |
197 updateHidden('.apn-list-view', false); | |
198 updateHidden('.apn-details-view', true); | |
199 }); | |
200 | |
201 $('cellular-apn-cancel').addEventListener('click', function(event) { | |
202 $('select-apn').selectedIndex = $('connection-state').data.selectedApn; | |
203 updateHidden('.apn-list-view', false); | |
204 updateHidden('.apn-details-view', true); | |
205 }); | |
206 | |
207 $('select-apn').addEventListener('change', function(event) { | |
208 var data = $('connection-state').data; | |
209 var apnSelector = $('select-apn'); | |
210 if (apnSelector[apnSelector.selectedIndex].value != -1) { | |
211 var apnList = data.providerApnList.value; | |
212 chrome.send('setApn', [String(data.servicePath), | |
213 String(apnList[apnSelector.selectedIndex].apn), | |
214 String(apnList[apnSelector.selectedIndex].username), | |
215 String(apnList[apnSelector.selectedIndex].password) | |
216 ]); | |
217 data.selectedApn = apnSelector.selectedIndex; | |
218 } else if (apnSelector.selectedIndex == data.userApnIndex) { | |
219 chrome.send('setApn', [String(data.servicePath), | |
220 String(data.apn.apn), | |
221 String(data.apn.username), | |
222 String(data.apn.password)]); | |
223 data.selectedApn = apnSelector.selectedIndex; | |
224 } else { | |
225 $('cellular-apn').value = data.apn.apn; | |
226 $('cellular-apn-username').value = data.apn.username; | |
227 $('cellular-apn-password').value = data.apn.password; | |
228 | |
229 updateHidden('.apn-list-view', true); | |
230 updateHidden('.apn-details-view', false); | |
231 } | |
232 }); | |
233 | |
234 $('sim-card-lock-enabled').addEventListener('click', function(event) { | |
235 var newValue = $('sim-card-lock-enabled').checked; | |
236 // Leave value as is because user needs to enter PIN code first. | |
237 // When PIN will be entered and value changed, | |
238 // we'll update UI to reflect that change. | |
239 $('sim-card-lock-enabled').checked = !newValue; | |
240 chrome.send('setSimCardLock', [newValue]); | |
241 }); | |
242 $('change-pin').addEventListener('click', function(event) { | |
243 chrome.send('changePin'); | |
244 }); | |
245 | |
246 // Proxy | |
247 options.proxyexceptions.ProxyExceptions.decorate($('ignored-host-list')); | |
248 $('remove-host').addEventListener('click', | |
249 this.handleRemoveProxyExceptions_); | |
250 $('add-host').addEventListener('click', this.handleAddProxyException_); | |
251 $('direct-proxy').addEventListener('click', this.disableManualProxy_); | |
252 $('manual-proxy').addEventListener('click', this.enableManualProxy_); | |
253 $('auto-proxy').addEventListener('click', this.disableManualProxy_); | |
254 $('proxy-all-protocols').addEventListener('click', | |
255 this.toggleSingleProxy_); | |
256 | |
257 observePrefsUI($('direct-proxy')); | |
258 observePrefsUI($('manual-proxy')); | |
259 observePrefsUI($('auto-proxy')); | |
260 observePrefsUI($('proxy-all-protocols')); | |
261 | |
262 $('ip-automatic-configuration-checkbox').addEventListener('click', | |
263 this.handleIpAutoConfig_); | |
264 $('automatic-dns-radio').addEventListener('click', | |
265 this.handleNameServerTypeChange_); | |
266 $('google-dns-radio').addEventListener('click', | |
267 this.handleNameServerTypeChange_); | |
268 $('user-dns-radio').addEventListener('click', | |
269 this.handleNameServerTypeChange_); | |
270 }, | |
271 | |
272 /** | |
273 * Handler for "add" event fired from userNameEdit. | |
274 * @param {Event} e Add event fired from userNameEdit. | |
275 * @private | |
276 */ | |
277 handleAddProxyException_: function(e) { | |
278 var exception = $('new-host').value; | |
279 $('new-host').value = ''; | |
280 | |
281 exception = exception.trim(); | |
282 if (exception) | |
283 $('ignored-host-list').addException(exception); | |
284 }, | |
285 | |
286 /** | |
287 * Handler for when the remove button is clicked | |
288 * @param {Event} e The click event. | |
289 * @private | |
290 */ | |
291 handleRemoveProxyExceptions_: function(e) { | |
292 var selectedItems = $('ignored-host-list').selectedItems; | |
293 for (var x = 0; x < selectedItems.length; x++) { | |
294 $('ignored-host-list').removeException(selectedItems[x]); | |
295 } | |
296 }, | |
297 | |
298 /** | |
299 * Handler for when the IP automatic configuration checkbox is clicked. | |
300 * @param {Event} e The click event. | |
301 * @private | |
302 */ | |
303 handleIpAutoConfig_: function(e) { | |
304 var checked = $('ip-automatic-configuration-checkbox').checked; | |
305 var fields = [$('ip-address'), $('ip-netmask'), $('ip-gateway')]; | |
306 for (var i = 0; i < fields.length; ++i) { | |
307 fields[i].editable = !checked; | |
308 if (checked) { | |
309 var model = fields[i].model; | |
310 model.value = model.automatic; | |
311 fields[i].model = model; | |
312 } | |
313 } | |
314 if (!checked) | |
315 $('ip-address').focus(); | |
316 }, | |
317 | |
318 /** | |
319 * Handler for when the name server selection changes. | |
320 * @param {Event} e The click event. | |
321 * @private | |
322 */ | |
323 handleNameServerTypeChange_: function(event) { | |
324 var type = event.target.value; | |
325 DetailsInternetPage.updateNameServerDisplay(type); | |
326 }, | |
327 | |
328 /** | |
329 * Update details page controls. | |
330 * @private | |
331 */ | |
332 updateControls: function() { | |
333 // Only show ipconfig section if network is connected OR if nothing on | |
334 // this device is connected. This is so that you can fix the ip configs | |
335 // if you can't connect to any network. | |
336 // TODO(chocobo): Once ipconfig is moved to flimflam service objects, | |
337 // we need to redo this logic to allow configuration of all networks. | |
338 $('ipconfig-section').hidden = !this.connected && this.deviceConnected; | |
339 $('ipconfig-dns-section').hidden = | |
340 !this.connected && this.deviceConnected; | |
341 | |
342 // Network type related. | |
343 updateHidden('#details-internet-page .cellular-details', !this.cellular); | |
344 updateHidden('#details-internet-page .wifi-details', !this.wireless); | |
345 updateHidden('#details-internet-page .wimax-details', !this.wimax); | |
346 updateHidden('#details-internet-page .vpn-details', !this.vpn); | |
347 updateHidden('#details-internet-page .proxy-details', !this.showProxy); | |
348 /* Network information merged into the Wifi tab for wireless networks | |
349 unless the option is set for enabling a static IP configuration. */ | |
350 updateHidden('#details-internet-page .network-details', | |
351 (this.wireless && !this.showStaticIPConfig) || this.vpn); | |
352 updateHidden('#details-internet-page .wifi-network-setting', | |
353 this.showStaticIPConfig); | |
354 | |
355 // Cell plan related. | |
356 $('plan-list').hidden = this.cellplanloading; | |
357 updateHidden('#details-internet-page .no-plan-info', | |
358 !this.cellular || this.cellplanloading || this.hascellplan); | |
359 updateHidden('#details-internet-page .plan-loading-info', | |
360 !this.cellular || this.nocellplan || this.hascellplan); | |
361 updateHidden('#details-internet-page .plan-details-info', | |
362 !this.cellular || this.nocellplan || this.cellplanloading); | |
363 updateHidden('#details-internet-page .gsm-only', | |
364 !this.cellular || !this.gsm); | |
365 updateHidden('#details-internet-page .cdma-only', | |
366 !this.cellular || this.gsm); | |
367 updateHidden('#details-internet-page .apn-list-view', | |
368 !this.cellular || !this.gsm); | |
369 updateHidden('#details-internet-page .apn-details-view', true); | |
370 | |
371 // Wifi - Password and shared. | |
372 updateHidden('#details-internet-page #password-details', | |
373 !this.wireless || !this.password); | |
374 updateHidden('#details-internet-page #wifi-shared-network', | |
375 !this.shared); | |
376 updateHidden('#details-internet-page #prefer-network', | |
377 !this.showPreferred); | |
378 | |
379 // WiMAX. | |
380 updateHidden('#details-internet-page #wimax-shared-network', | |
381 !this.shared); | |
382 | |
383 // Proxy | |
384 this.updateProxyBannerVisibility_(); | |
385 this.toggleSingleProxy_(); | |
386 if ($('manual-proxy').checked) | |
387 this.enableManualProxy_(); | |
388 else | |
389 this.disableManualProxy_(); | |
390 if (!this.proxyListInitialized_ && this.visible) { | |
391 this.proxyListInitialized_ = true; | |
392 $('ignored-host-list').redraw(); | |
393 } | |
394 }, | |
395 | |
396 /** | |
397 * Updates info banner visibility state. This function shows the banner | |
398 * if proxy is managed or shared-proxies is off for shared network. | |
399 * @private | |
400 */ | |
401 updateProxyBannerVisibility_: function() { | |
402 var bannerDiv = $('info-banner'); | |
403 // Show banner and determine its message if necessary. | |
404 var controlledBy = $('direct-proxy').controlledBy; | |
405 if (!controlledBy || controlledBy == '') { | |
406 bannerDiv.hidden = true; | |
407 } else { | |
408 bannerDiv.hidden = false; | |
409 // controlledBy must match strings loaded in proxy_handler.cc and | |
410 // set in proxy_cros_settings_provider.cc. | |
411 $('banner-text').textContent = loadTimeData.getString(controlledBy); | |
412 } | |
413 }, | |
414 | |
415 /** | |
416 * Handler for when the user clicks on the checkbox to allow a | |
417 * single proxy usage. | |
418 * @private | |
419 * @param {Event} e Click Event. | |
420 */ | |
421 toggleSingleProxy_: function(e) { | |
422 if ($('proxy-all-protocols').checked) { | |
423 $('multi-proxy').hidden = true; | |
424 $('single-proxy').hidden = false; | |
425 } else { | |
426 $('multi-proxy').hidden = false; | |
427 $('single-proxy').hidden = true; | |
428 } | |
429 }, | |
430 | |
431 /** | |
432 * Handler for selecting a radio button that will disable the manual | |
433 * controls. | |
434 * @private | |
435 * @param {Event} e Click event. | |
436 */ | |
437 disableManualProxy_: function(e) { | |
438 $('advanced-config').hidden = true; | |
439 $('proxy-all-protocols').disabled = true; | |
440 $('proxy-host-name').disabled = true; | |
441 $('proxy-host-port').disabled = true; | |
442 $('proxy-host-single-name').disabled = true; | |
443 $('proxy-host-single-port').disabled = true; | |
444 $('secure-proxy-host-name').disabled = true; | |
445 $('secure-proxy-port').disabled = true; | |
446 $('ftp-proxy').disabled = true; | |
447 $('ftp-proxy-port').disabled = true; | |
448 $('socks-host').disabled = true; | |
449 $('socks-port').disabled = true; | |
450 $('proxy-config').disabled = $('auto-proxy').disabled || | |
451 !$('auto-proxy').checked; | |
452 }, | |
453 | |
454 /** | |
455 * Handler for selecting a radio button that will enable the manual | |
456 * controls. | |
457 * @private | |
458 * @param {Event} e Click event. | |
459 */ | |
460 enableManualProxy_: function(e) { | |
461 $('advanced-config').hidden = false; | |
462 $('ignored-host-list').redraw(); | |
463 var all_disabled = $('manual-proxy').disabled; | |
464 $('new-host').disabled = all_disabled; | |
465 $('remove-host').disabled = all_disabled; | |
466 $('add-host').disabled = all_disabled; | |
467 $('proxy-all-protocols').disabled = all_disabled; | |
468 $('proxy-host-name').disabled = all_disabled; | |
469 $('proxy-host-port').disabled = all_disabled; | |
470 $('proxy-host-single-name').disabled = all_disabled; | |
471 $('proxy-host-single-port').disabled = all_disabled; | |
472 $('secure-proxy-host-name').disabled = all_disabled; | |
473 $('secure-proxy-port').disabled = all_disabled; | |
474 $('ftp-proxy').disabled = all_disabled; | |
475 $('ftp-proxy-port').disabled = all_disabled; | |
476 $('socks-host').disabled = all_disabled; | |
477 $('socks-port').disabled = all_disabled; | |
478 $('proxy-config').disabled = true; | |
479 }, | |
480 }; | |
481 | |
482 /** | |
483 * Performs minimal initialization of the InternetDetails dialog in | |
484 * preparation for showing proxy-setttings. | |
485 */ | |
486 DetailsInternetPage.initializeProxySettings = function() { | |
487 var detailsPage = DetailsInternetPage.getInstance(); | |
488 detailsPage.initializePageContents_(); | |
489 }; | |
490 | |
491 /** | |
492 * Displays the InternetDetails dialog with only the proxy settings visible. | |
493 */ | |
494 DetailsInternetPage.showProxySettings = function() { | |
495 var detailsPage = DetailsInternetPage.getInstance(); | |
496 $('network-details-header').hidden = true; | |
497 $('buyplan-details').hidden = true; | |
498 $('activate-details').hidden = true; | |
499 $('view-account-details').hidden = true; | |
500 detailsPage.cellular = false; | |
501 detailsPage.wireless = false; | |
502 detailsPage.vpn = false; | |
503 detailsPage.showProxy = true; | |
504 updateHidden('#internet-tab', true); | |
505 updateHidden('#details-tab-strip', true); | |
506 updateHidden('#details-internet-page .action-area', true); | |
507 detailsPage.updateControls(); | |
508 detailsPage.visible = true; | |
509 }; | |
510 | |
511 DetailsInternetPage.updateCellularPlans = function(data) { | |
512 var detailsPage = DetailsInternetPage.getInstance(); | |
513 detailsPage.cellplanloading = false; | |
514 if (data.plans && data.plans.length) { | |
515 detailsPage.nocellplan = false; | |
516 detailsPage.hascellplan = true; | |
517 $('plan-list').load(data.plans); | |
518 } else { | |
519 detailsPage.nocellplan = true; | |
520 detailsPage.hascellplan = false; | |
521 } | |
522 | |
523 detailsPage.hasactiveplan = !data.needsPlan; | |
524 detailsPage.activated = data.activated; | |
525 if (!data.activated) | |
526 $('details-internet-login').hidden = true; | |
527 | |
528 $('buyplan-details').hidden = !data.showBuyButton; | |
529 $('activate-details').hidden = !data.showActivateButton; | |
530 $('view-account-details').hidden = !data.showViewAccountButton; | |
531 }; | |
532 | |
533 DetailsInternetPage.updateSecurityTab = function(requirePin) { | |
534 $('sim-card-lock-enabled').checked = requirePin; | |
535 $('change-pin').hidden = !requirePin; | |
536 }; | |
537 | |
538 | |
539 DetailsInternetPage.loginFromDetails = function() { | |
540 var data = $('connection-state').data; | |
541 var servicePath = data.servicePath; | |
542 chrome.send('networkCommand', [String(data.type), | |
543 servicePath, | |
544 'connect']); | |
545 OptionsPage.closeOverlay(); | |
546 }; | |
547 | |
548 DetailsInternetPage.disconnectNetwork = function() { | |
549 var data = $('connection-state').data; | |
550 var servicePath = data.servicePath; | |
551 chrome.send('networkCommand', [String(data.type), | |
552 servicePath, | |
553 'disconnect']); | |
554 OptionsPage.closeOverlay(); | |
555 }; | |
556 | |
557 DetailsInternetPage.activateFromDetails = function() { | |
558 var data = $('connection-state').data; | |
559 var servicePath = data.servicePath; | |
560 if (data.type == Constants.TYPE_CELLULAR) { | |
561 chrome.send('networkCommand', [String(data.type), | |
562 String(servicePath), | |
563 'activate']); | |
564 } | |
565 OptionsPage.closeOverlay(); | |
566 }; | |
567 | |
568 DetailsInternetPage.setDetails = function() { | |
569 var data = $('connection-state').data; | |
570 var servicePath = data.servicePath; | |
571 if (data.type == Constants.TYPE_WIFI) { | |
572 chrome.send('setPreferNetwork', | |
573 [String(servicePath), | |
574 $('prefer-network-wifi').checked ? 'true' : 'false']); | |
575 chrome.send('setAutoConnect', | |
576 [String(servicePath), | |
577 $('auto-connect-network-wifi').checked ? 'true' : 'false']); | |
578 } else if (data.type == Constants.TYPE_WIMAX) { | |
579 chrome.send('setAutoConnect', | |
580 [String(servicePath), | |
581 $('auto-connect-network-wimax').checked ? 'true' : 'false']); | |
582 } else if (data.type == Constants.TYPE_CELLULAR) { | |
583 chrome.send('setAutoConnect', | |
584 [String(servicePath), | |
585 $('auto-connect-network-cellular').checked ? 'true' : | |
586 'false']); | |
587 } | |
588 | |
589 var nameServerTypes = ['automatic', 'google', 'user']; | |
590 var nameServerType = 'automatic'; | |
591 for (var i = 0; i < nameServerTypes.length; ++i) { | |
592 if ($(nameServerTypes[i] + '-dns-radio').checked) { | |
593 nameServerType = nameServerTypes[i]; | |
594 break; | |
595 } | |
596 } | |
597 | |
598 // Skip any empty values. | |
599 var userNameServers = []; | |
600 for (var i = 1; i <= 4; ++i) { | |
601 var nameServerField = $('ipconfig-dns' + i); | |
602 if (nameServerField && nameServerField.model && | |
603 nameServerField.model.value) { | |
604 userNameServers.push(nameServerField.model.value); | |
605 } | |
606 } | |
607 | |
608 userNameServers = userNameServers.join(','); | |
609 | |
610 chrome.send('setIPConfig', | |
611 [servicePath, | |
612 Boolean($('ip-automatic-configuration-checkbox').checked), | |
613 $('ip-address').model.value || '', | |
614 $('ip-netmask').model.value || '', | |
615 $('ip-gateway').model.value || '', | |
616 nameServerType, | |
617 userNameServers]); | |
618 OptionsPage.closeOverlay(); | |
619 }; | |
620 | |
621 DetailsInternetPage.updateNameServerDisplay = function(type) { | |
622 var editable = type == 'user'; | |
623 var fields = [$('ipconfig-dns1'), $('ipconfig-dns2'), | |
624 $('ipconfig-dns3'), $('ipconfig-dns4')]; | |
625 for (var i = 0; i < fields.length; ++i) { | |
626 fields[i].editable = editable; | |
627 } | |
628 if (editable) | |
629 $('ipconfig-dns1').focus(); | |
630 | |
631 var automaticDns = $('automatic-dns-display'); | |
632 var googleDns = $('google-dns-display'); | |
633 var userDns = $('user-dns-settings'); | |
634 switch (type) { | |
635 case 'automatic': | |
636 automaticDns.setAttribute('selected', ''); | |
637 googleDns.removeAttribute('selected'); | |
638 userDns.removeAttribute('selected'); | |
639 break; | |
640 case 'google': | |
641 automaticDns.removeAttribute('selected'); | |
642 googleDns.setAttribute('selected', ''); | |
643 userDns.removeAttribute('selected'); | |
644 break; | |
645 case 'user': | |
646 automaticDns.removeAttribute('selected'); | |
647 googleDns.removeAttribute('selected'); | |
648 userDns.setAttribute('selected', ''); | |
649 break; | |
650 } | |
651 }; | |
652 | |
653 DetailsInternetPage.showDetailedInfo = function(data) { | |
654 var detailsPage = DetailsInternetPage.getInstance(); | |
655 | |
656 // Populate header | |
657 $('network-details-title').textContent = data.networkName; | |
658 var statusKey = data.connected ? 'networkConnected' : | |
659 'networkNotConnected'; | |
660 $('network-details-subtitle-status').textContent = | |
661 loadTimeData.getString(statusKey); | |
662 var typeKey = null; | |
663 switch (data.type) { | |
664 case Constants.TYPE_ETHERNET: | |
665 typeKey = 'ethernetTitle'; | |
666 break; | |
667 case Constants.TYPE_WIFI: | |
668 typeKey = 'wifiTitle'; | |
669 break; | |
670 case Constants.TYPE_WIMAX: | |
671 typeKey = 'wimaxTitle'; | |
672 break; | |
673 case Constants.TYPE_CELLULAR: | |
674 typeKey = 'cellularTitle'; | |
675 break; | |
676 case Constants.TYPE_VPN: | |
677 typeKey = 'vpnTitle'; | |
678 break; | |
679 } | |
680 var typeLabel = $('network-details-subtitle-type'); | |
681 var typeSeparator = $('network-details-subtitle-separator'); | |
682 if (typeKey) { | |
683 typeLabel.textContent = loadTimeData.getString(typeKey); | |
684 typeLabel.hidden = false; | |
685 typeSeparator.hidden = false; | |
686 } else { | |
687 typeLabel.hidden = true; | |
688 typeSeparator.hidden = true; | |
689 } | |
690 | |
691 // TODO(chocobo): Is this hack to cache the data here reasonable? | |
692 // TODO(kevers): Find more appropriate place to cache data. | |
693 $('connection-state').data = data; | |
694 | |
695 $('buyplan-details').hidden = true; | |
696 $('activate-details').hidden = true; | |
697 $('view-account-details').hidden = true; | |
698 $('details-internet-login').hidden = data.connected; | |
699 if (data.type == Constants.TYPE_ETHERNET) | |
700 $('details-internet-disconnect').hidden = true; | |
701 else | |
702 $('details-internet-disconnect').hidden = !data.connected; | |
703 | |
704 detailsPage.deviceConnected = data.deviceConnected; | |
705 detailsPage.connecting = data.connecting; | |
706 detailsPage.connected = data.connected; | |
707 detailsPage.showProxy = data.showProxy; | |
708 detailsPage.showStaticIPConfig = data.showStaticIPConfig; | |
709 $('connection-state').textContent = data.connectionState; | |
710 | |
711 var ipAutoConfig = data.ipAutoConfig ? 'automatic' : 'user'; | |
712 $('ip-automatic-configuration-checkbox').checked = data.ipAutoConfig; | |
713 var inetAddress = {autoConfig: ipAutoConfig}; | |
714 var inetNetmask = {autoConfig: ipAutoConfig}; | |
715 var inetGateway = {autoConfig: ipAutoConfig}; | |
716 | |
717 if (data.ipconfig.value) { | |
718 inetAddress.automatic = data.ipconfig.value.address; | |
719 inetAddress.value = data.ipconfig.value.address; | |
720 inetNetmask.automatic = data.ipconfig.value.netmask; | |
721 inetNetmask.value = data.ipconfig.value.netmask; | |
722 inetGateway.automatic = data.ipconfig.value.gateway; | |
723 inetGateway.value = data.ipconfig.value.gateway; | |
724 } | |
725 | |
726 // Override the "automatic" values with the real saved DHCP values, | |
727 // if they are set. | |
728 if (data.savedIP.address) { | |
729 inetAddress.automatic = data.savedIP.address; | |
730 inetAddress.value = data.savedIP.address; | |
731 } | |
732 if (data.savedIP.netmask) { | |
733 inetNetmask.automatic = data.savedIP.netmask; | |
734 inetNetmask.value = data.savedIP.netmask; | |
735 } | |
736 if (data.savedIP.gateway) { | |
737 inetGateway.automatic = data.savedIP.gateway; | |
738 inetGateway.value = data.savedIP.gateway; | |
739 } | |
740 | |
741 if (ipAutoConfig == 'user') { | |
742 if (data.staticIP.value.address) { | |
743 inetAddress.value = data.staticIP.value.address; | |
744 inetAddress.user = data.staticIP.value.address; | |
745 } | |
746 if (data.staticIP.value.netmask) { | |
747 inetNetmask.value = data.staticIP.value.netmask; | |
748 inetNetmask.user = data.staticIP.value.netmask; | |
749 } | |
750 if (data.staticIP.value.gateway) { | |
751 inetGateway.value = data.staticIP.value.gateway; | |
752 inetGateway.user = data.staticIP.value.gateway; | |
753 } | |
754 } | |
755 | |
756 var configureAddressField = function(field, model) { | |
757 IPAddressField.decorate(field); | |
758 field.model = model; | |
759 field.editable = model.autoConfig == 'user'; | |
760 }; | |
761 | |
762 configureAddressField($('ip-address'), inetAddress); | |
763 configureAddressField($('ip-netmask'), inetNetmask); | |
764 configureAddressField($('ip-gateway'), inetGateway); | |
765 | |
766 var inetNameServers = ''; | |
767 if (data.ipconfig.value && data.ipconfig.value.nameServers) { | |
768 inetNameServers = data.ipconfig.value.nameServers; | |
769 $('automatic-dns-display').textContent = inetNameServers; | |
770 } | |
771 | |
772 if (data.savedIP && data.savedIP.nameServers) | |
773 $('automatic-dns-display').textContent = data.savedIP.nameServers; | |
774 | |
775 if (data.nameServersGoogle) | |
776 $('google-dns-display').textContent = data.nameServersGoogle; | |
777 | |
778 var nameServersUser = []; | |
779 if (data.staticIP.value.nameServers) | |
780 nameServersUser = data.staticIP.value.nameServers.split(','); | |
781 | |
782 var nameServerModels = []; | |
783 for (var i = 0; i < 4; ++i) | |
784 nameServerModels.push({value: nameServersUser[i] || ''}); | |
785 | |
786 $(data.nameServerType + '-dns-radio').checked = true; | |
787 configureAddressField($('ipconfig-dns1'), nameServerModels[0]); | |
788 configureAddressField($('ipconfig-dns2'), nameServerModels[1]); | |
789 configureAddressField($('ipconfig-dns3'), nameServerModels[2]); | |
790 configureAddressField($('ipconfig-dns4'), nameServerModels[3]); | |
791 | |
792 DetailsInternetPage.updateNameServerDisplay(data.nameServerType); | |
793 | |
794 if (data.hardwareAddress) { | |
795 $('hardware-address').textContent = data.hardwareAddress; | |
796 $('hardware-address-row').style.display = 'table-row'; | |
797 } else { | |
798 // This is most likely a device without a hardware address. | |
799 $('hardware-address-row').style.display = 'none'; | |
800 } | |
801 if (data.type == Constants.TYPE_WIFI) { | |
802 OptionsPage.showTab($('wifi-network-nav-tab')); | |
803 detailsPage.wireless = true; | |
804 detailsPage.vpn = false; | |
805 detailsPage.ethernet = false; | |
806 detailsPage.cellular = false; | |
807 detailsPage.gsm = false; | |
808 detailsPage.wimax = false; | |
809 detailsPage.shared = data.shared; | |
810 $('wifi-connection-state').textContent = data.connectionState; | |
811 $('wifi-ssid').textContent = data.ssid; | |
812 if (data.bssid && data.bssid.length > 0) { | |
813 $('wifi-bssid').textContent = data.bssid; | |
814 $('wifi-bssid-entry').hidden = false; | |
815 } else { | |
816 $('wifi-bssid-entry').hidden = true; | |
817 } | |
818 $('wifi-ip-address').textContent = inetAddress.value; | |
819 $('wifi-netmask').textContent = inetNetmask.value; | |
820 $('wifi-gateway').textContent = inetGateway.value; | |
821 $('wifi-name-servers').textContent = inetNameServers; | |
822 if (data.encryption && data.encryption.length > 0) { | |
823 $('wifi-security').textContent = data.encryption; | |
824 $('wifi-security-entry').hidden = false; | |
825 } else { | |
826 $('wifi-security-entry').hidden = true; | |
827 } | |
828 // Frequency is in MHz. | |
829 var frequency = loadTimeData.getString('inetFrequencyFormat'); | |
830 frequency = frequency.replace('$1', data.frequency); | |
831 $('wifi-frequency').textContent = frequency; | |
832 // Signal strength as percentage. | |
833 var signalStrength = loadTimeData.getString('inetSignalStrengthFormat'); | |
834 signalStrength = signalStrength.replace('$1', data.strength); | |
835 $('wifi-signal-strength').textContent = signalStrength; | |
836 if (data.hardwareAddress) { | |
837 $('wifi-hardware-address').textContent = data.hardwareAddress; | |
838 $('wifi-hardware-address-entry').hidden = false; | |
839 } else { | |
840 $('wifi-hardware-address-entry').hidden = true; | |
841 } | |
842 detailsPage.showPreferred = data.showPreferred; | |
843 $('prefer-network-wifi').checked = data.preferred.value; | |
844 $('prefer-network-wifi').disabled = !data.remembered; | |
845 $('auto-connect-network-wifi').checked = data.autoConnect.value; | |
846 $('auto-connect-network-wifi').disabled = !data.remembered; | |
847 detailsPage.password = data.encrypted; | |
848 } else if (data.type == Constants.TYPE_WIMAX) { | |
849 OptionsPage.showTab($('wimax-network-nav-tab')); | |
850 detailsPage.wimax = true; | |
851 detailsPage.wireless = false; | |
852 detailsPage.vpn = false; | |
853 detailsPage.ethernet = false; | |
854 detailsPage.cellular = false; | |
855 detailsPage.gsm = false; | |
856 detailsPage.shared = data.shared; | |
857 detailsPage.showPreferred = data.showPreferred; | |
858 $('wimax-connection-state').textContent = data.connectionState; | |
859 $('auto-connect-network-wimax').checked = data.autoConnect.value; | |
860 $('auto-connect-network-wimax').disabled = !data.remembered; | |
861 if (data.identity) { | |
862 $('wimax-eap-identity').textContent = data.identity; | |
863 $('wimax-eap-identity-entry').hidden = false; | |
864 } else { | |
865 $('wimax-eap-identity-entry').hidden = true; | |
866 } | |
867 // Signal strength as percentage. | |
868 var signalStrength = loadTimeData.getString('inetSignalStrengthFormat'); | |
869 signalStrength = signalStrength.replace('$1', data.strength); | |
870 $('wimax-signal-strength').textContent = signalStrength; | |
871 } else if (data.type == Constants.TYPE_CELLULAR) { | |
872 if (!data.gsm) | |
873 OptionsPage.showTab($('cellular-plan-nav-tab')); | |
874 else | |
875 OptionsPage.showTab($('cellular-conn-nav-tab')); | |
876 detailsPage.ethernet = false; | |
877 detailsPage.wireless = false; | |
878 detailsPage.wimax = false; | |
879 detailsPage.vpn = false; | |
880 detailsPage.cellular = true; | |
881 $('service-name').textContent = data.serviceName; | |
882 $('network-technology').textContent = data.networkTechnology; | |
883 $('activation-state').textContent = data.activationState; | |
884 $('roaming-state').textContent = data.roamingState; | |
885 $('restricted-pool').textContent = data.restrictedPool; | |
886 $('error-state').textContent = data.errorState; | |
887 $('manufacturer').textContent = data.manufacturer; | |
888 $('model-id').textContent = data.modelId; | |
889 $('firmware-revision').textContent = data.firmwareRevision; | |
890 $('hardware-revision').textContent = data.hardwareRevision; | |
891 $('prl-version').textContent = data.prlVersion; | |
892 $('meid').textContent = data.meid; | |
893 $('imei').textContent = data.imei; | |
894 $('mdn').textContent = data.mdn; | |
895 $('esn').textContent = data.esn; | |
896 $('min').textContent = data.min; | |
897 detailsPage.gsm = data.gsm; | |
898 if (data.gsm) { | |
899 $('operator-name').textContent = data.operatorName; | |
900 $('operator-code').textContent = data.operatorCode; | |
901 $('imsi').textContent = data.imsi; | |
902 | |
903 var apnSelector = $('select-apn'); | |
904 // Clear APN lists, keep only last element that "other". | |
905 while (apnSelector.length != 1) | |
906 apnSelector.remove(0); | |
907 var otherOption = apnSelector[0]; | |
908 data.selectedApn = -1; | |
909 data.userApnIndex = -1; | |
910 var apnList = data.providerApnList.value; | |
911 for (var i = 0; i < apnList.length; i++) { | |
912 var option = document.createElement('option'); | |
913 var name = apnList[i].localizedName; | |
914 if (name == '' && apnList[i].name != '') | |
915 name = apnList[i].name; | |
916 if (name == '') | |
917 name = apnList[i].apn; | |
918 else | |
919 name = name + ' (' + apnList[i].apn + ')'; | |
920 option.textContent = name; | |
921 option.value = i; | |
922 if ((data.apn.apn == apnList[i].apn && | |
923 data.apn.username == apnList[i].username && | |
924 data.apn.password == apnList[i].password) || | |
925 (data.apn.apn == '' && | |
926 data.lastGoodApn.apn == apnList[i].apn && | |
927 data.lastGoodApn.username == apnList[i].username && | |
928 data.lastGoodApn.password == apnList[i].password)) { | |
929 data.selectedApn = i; | |
930 } | |
931 // Insert new option before "other" option. | |
932 apnSelector.add(option, otherOption); | |
933 } | |
934 if (data.selectedApn == -1 && data.apn.apn != '') { | |
935 var option = document.createElement('option'); | |
936 option.textContent = data.apn.apn; | |
937 option.value = -1; | |
938 apnSelector.add(option, otherOption); | |
939 data.selectedApn = apnSelector.length - 2; | |
940 data.userApnIndex = data.selectedApn; | |
941 } | |
942 apnSelector.selectedIndex = data.selectedApn; | |
943 updateHidden('.apn-list-view', false); | |
944 updateHidden('.apn-details-view', true); | |
945 DetailsInternetPage.updateSecurityTab(data.simCardLockEnabled.value); | |
946 } | |
947 $('auto-connect-network-cellular').checked = data.autoConnect.value; | |
948 $('auto-connect-network-cellular').disabled = false; | |
949 | |
950 $('buyplan-details').hidden = !data.showBuyButton; | |
951 $('view-account-details').hidden = !data.showViewAccountButton; | |
952 $('activate-details').hidden = !data.showActivateButton; | |
953 if (data.showActivateButton) { | |
954 $('details-internet-login').hidden = true; | |
955 } | |
956 | |
957 detailsPage.hascellplan = false; | |
958 if (data.connected) { | |
959 detailsPage.nocellplan = false; | |
960 detailsPage.cellplanloading = true; | |
961 chrome.send('refreshCellularPlan', [data.servicePath]); | |
962 } else { | |
963 detailsPage.nocellplan = true; | |
964 detailsPage.cellplanloading = false; | |
965 } | |
966 } else if (data.type == Constants.TYPE_VPN) { | |
967 OptionsPage.showTab($('vpn-nav-tab')); | |
968 detailsPage.wireless = false; | |
969 detailsPage.wimax = false; | |
970 detailsPage.vpn = true; | |
971 detailsPage.ethernet = false; | |
972 detailsPage.cellular = false; | |
973 detailsPage.gsm = false; | |
974 $('inet-service-name').textContent = data.service_name; | |
975 $('inet-server-hostname').textContent = data.server_hostname; | |
976 $('inet-provider-type').textContent = data.provider_type; | |
977 $('inet-username').textContent = data.username; | |
978 } else { | |
979 OptionsPage.showTab($('internet-nav-tab')); | |
980 detailsPage.ethernet = true; | |
981 detailsPage.wireless = false; | |
982 detailsPage.wimax = false; | |
983 detailsPage.vpn = false; | |
984 detailsPage.cellular = false; | |
985 detailsPage.gsm = false; | |
986 } | |
987 | |
988 // Update controlled option indicators. | |
989 indicators = cr.doc.querySelectorAll( | |
990 '#details-internet-page .controlled-setting-indicator'); | |
991 for (var i = 0; i < indicators.length; i++) { | |
992 var dataProperty = indicators[i].getAttribute('data'); | |
993 if (dataProperty && data[dataProperty]) { | |
994 var controlledBy = data[dataProperty].controlledBy; | |
995 if (controlledBy) { | |
996 indicators[i].controlledBy = controlledBy; | |
997 var forElement = $(indicators[i].getAttribute('for')); | |
998 if (forElement) | |
999 forElement.disabled = controlledBy != 'recommended'; | |
1000 if (forElement.type == 'radio' && !forElement.checked) | |
1001 indicators[i].hidden = true; | |
1002 } else { | |
1003 indicators[i].controlledBy = null; | |
1004 } | |
1005 } | |
1006 } | |
1007 | |
1008 detailsPage.updateControls(); | |
1009 | |
1010 // Don't show page name in address bar and in history to prevent people | |
1011 // navigate here by hand and solve issue with page session restore. | |
1012 OptionsPage.showPageByName('detailsInternetPage', false); | |
1013 }; | |
1014 | |
1015 return { | |
1016 DetailsInternetPage: DetailsInternetPage | |
1017 }; | |
1018 }); | |
OLD | NEW |