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

Unified Diff: chrome/browser/resources/options2/chromeos/network_list.js

Issue 10809005: Options: Rename chrome/browser/resources/options2 -> chrome/browser/resources/options. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix. 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/options2/chromeos/network_list.js
diff --git a/chrome/browser/resources/options2/chromeos/network_list.js b/chrome/browser/resources/options2/chromeos/network_list.js
deleted file mode 100644
index 44088284fed750b670f4b1bb5aca67012e8e6b4c..0000000000000000000000000000000000000000
--- a/chrome/browser/resources/options2/chromeos/network_list.js
+++ /dev/null
@@ -1,1098 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-cr.define('options.network', function() {
-
- var ArrayDataModel = cr.ui.ArrayDataModel;
- var List = cr.ui.List;
- var ListItem = cr.ui.ListItem;
- var Menu = cr.ui.Menu;
- var MenuItem = cr.ui.MenuItem;
- var ControlledSettingIndicator = options.ControlledSettingIndicator;
-
- /**
- * Network settings constants. These enums usually match their C++
- * counterparts.
- */
- function Constants() {}
-
- // Network types:
- Constants.TYPE_UNKNOWN = 0;
- Constants.TYPE_ETHERNET = 1;
- Constants.TYPE_WIFI = 2;
- Constants.TYPE_WIMAX = 3;
- Constants.TYPE_BLUETOOTH = 4;
- Constants.TYPE_CELLULAR = 5;
- Constants.TYPE_VPN = 6;
-
- // Cellular activation states:
- Constants.ACTIVATION_STATE_UNKNOWN = 0;
- Constants.ACTIVATION_STATE_ACTIVATED = 1;
- Constants.ACTIVATION_STATE_ACTIVATING = 2;
- Constants.ACTIVATION_STATE_NOT_ACTIVATED = 3;
- Constants.ACTIVATION_STATE_PARTIALLY_ACTIVATED = 4;
-
- /**
- * Order in which controls are to appear in the network list sorted by key.
- */
- Constants.NETWORK_ORDER = ['ethernet',
- 'wifi',
- 'wimax',
- 'cellular',
- 'vpn',
- 'airplaneMode',
- 'addConnection'];
-
- /**
- * Mapping of network category titles to the network type.
- */
- var categoryMap = {
- 'cellular': Constants.TYPE_CELLULAR,
- 'ethernet': Constants.TYPE_ETHERNET,
- 'wimax': Constants.TYPE_WIMAX,
- 'wifi': Constants.TYPE_WIFI,
- 'vpn': Constants.TYPE_VPN
- };
-
- /**
- * ID of the menu that is currently visible.
- * @type {?string}
- * @private
- */
- var activeMenu_ = null;
-
- /**
- * Indicates if cellular networks are available.
- * @type {boolean}
- * @private
- */
- var cellularAvailable_ = false;
-
- /**
- * Indicates if cellular networks are enabled.
- * @type {boolean}
- * @private
- */
- var cellularEnabled_ = false;
-
- /**
- * Indicates if WiMAX networks are available.
- * @type {boolean}
- * @private
- */
- var wimaxAvailable_ = false;
-
- /**
- * Indicates if WiMAX networks are enabled.
- * @type {boolean}
- * @private
- */
- var wimaxEnabled_ = false;
-
- /**
- * Indicates if mobile data roaming is enabled.
- * @type {boolean}
- * @private
- */
- var enableDataRoaming_ = false;
-
- /**
- * Create an element in the network list for controlling network
- * connectivity.
- * @param {Object} data Description of the network list or command.
- * @constructor
- */
- function NetworkListItem(data) {
- var el = cr.doc.createElement('li');
- el.data_ = {};
- for (var key in data)
- el.data_[key] = data[key];
- NetworkListItem.decorate(el);
- return el;
- }
-
- /**
- * Decorate an element as a NetworkListItem.
- * @param {!Element} el The element to decorate.
- */
- NetworkListItem.decorate = function(el) {
- el.__proto__ = NetworkListItem.prototype;
- el.decorate();
- };
-
- NetworkListItem.prototype = {
- __proto__: ListItem.prototype,
-
- /**
- * Description of the network group or control.
- * @type {Object.<string,Object>}
- * @private
- */
- data_: null,
-
- /**
- * Element for the control's subtitle.
- * @type {?Element}
- * @private
- */
- subtitle_: null,
-
- /**
- * Icon for the network control.
- * @type {?Element}
- * @private
- */
- icon_: null,
-
- /**
- * Indicates if in the process of connecting to a network.
- * @type {boolean}
- * @private
- */
- connecting_: false,
-
- /**
- * Description of the network control.
- * @type {Object}
- */
- get data() {
- return this.data_;
- },
-
- /**
- * Text label for the subtitle.
- * @type {string}
- */
- set subtitle(text) {
- if (text)
- this.subtitle_.textContent = text;
- this.subtitle_.hidden = !text;
- },
-
- /**
- * URL for the network icon.
- * @type {string}
- */
- set iconURL(iconURL) {
- this.icon_.style.backgroundImage = url(iconURL);
- },
-
- /**
- * Type of network icon. Each type corresponds to a CSS rule.
- * @type {string}
- */
- set iconType(type) {
- this.icon_.classList.add('network-' + type);
- },
-
- /**
- * Indicates if the network is in the process of being connected.
- * @type {boolean}
- */
- set connecting(state) {
- this.connecting_ = state;
- if (state)
- this.icon_.classList.add('network-connecting');
- else
- this.icon_.classList.remove('network-connecting');
- },
-
- /**
- * Indicates if the network is in the process of being connected.
- * @type {boolean}
- */
- get connecting() {
- return this.connecting_;
- },
-
- /**
- * Set the direction of the text.
- * @param {string} direction The direction of the text, e.g. 'ltr'.
- */
- setSubtitleDirection: function(direction) {
- this.subtitle_.dir = direction;
- },
-
- /**
- * Indicate that the selector arrow should be shown.
- */
- showSelector: function() {
- this.subtitle_.classList.add('network-selector');
- },
-
- /**
- * Adds an indicator to show that the network is policy managed.
- */
- showManagedNetworkIndicator: function() {
- this.appendChild(new ManagedNetworkIndicator());
- },
-
- /* @inheritDoc */
- decorate: function() {
- ListItem.prototype.decorate.call(this);
- this.className = 'network-group';
- this.icon_ = this.ownerDocument.createElement('div');
- this.icon_.className = 'network-icon';
- this.appendChild(this.icon_);
- var textContent = this.ownerDocument.createElement('div');
- textContent.className = 'network-group-labels';
- this.appendChild(textContent);
- var categoryLabel = this.ownerDocument.createElement('div');
- var title = this.data_.key + 'Title';
- categoryLabel.className = 'network-title';
- categoryLabel.textContent = loadTimeData.getString(title);
- textContent.appendChild(categoryLabel);
- this.subtitle_ = this.ownerDocument.createElement('div');
- this.subtitle_.className = 'network-subtitle';
- textContent.appendChild(this.subtitle_);
- },
- };
-
- /**
- * Creates a control that displays a popup menu when clicked.
- * @param {Object} data Description of the control.
- */
- function NetworkMenuItem(data) {
- var el = new NetworkListItem(data);
- el.__proto__ = NetworkMenuItem.prototype;
- el.decorate();
- return el;
- }
-
- NetworkMenuItem.prototype = {
- __proto__: NetworkListItem.prototype,
-
- /**
- * Popup menu element.
- * @type {?Element}
- * @private
- */
- menu_: null,
-
- /* @inheritDoc */
- decorate: function() {
- this.subtitle = null;
- if (this.data.iconType)
- this.iconType = this.data.iconType;
- this.addEventListener('click', function() {
- this.showMenu();
- });
- },
-
- /**
- * Retrieves the ID for the menu.
- * @private
- */
- getMenuName_: function() {
- return this.data_.key + '-network-menu';
- },
-
- /**
- * Creates a popup menu for the control.
- * @return {Element} The newly created menu.
- */
- createMenu: function() {
- if (this.data.menu) {
- var menu = this.ownerDocument.createElement('div');
- menu.id = this.getMenuName_();
- menu.className = 'network-menu';
- menu.hidden = true;
- Menu.decorate(menu);
- for (var i = 0; i < this.data.menu.length; i++) {
- var entry = this.data.menu[i];
- var button = this.ownerDocument.createElement('div');
- button.className = 'network-menu-item';
- var buttonLabel = this.ownerDocument.createElement('div');
- buttonLabel.className = 'network-menu-item-label';
- buttonLabel.textContent = entry.label;
- button.appendChild(buttonLabel);
- button.addEventListener('click', entry.command);
- MenuItem.decorate(button);
- menu.appendChild(button);
- }
- return menu;
- }
- return null;
- },
-
- canUpdateMenu: function() {
- return false;
- },
-
- /**
- * Displays a popup menu.
- */
- showMenu: function() {
- var rebuild = false;
- // Force a rescan if opening the menu for WiFi networks to ensure the
- // list is up to date. Networks are periodically rescanned, but depending
- // on timing, there could be an excessive delay before the first rescan
- // unless forced.
- var rescan = !activeMenu_ && this.data_.key == 'wifi';
- if (!this.menu_) {
- rebuild = true;
- var existing = $(this.getMenuName_());
- if (existing) {
- if (this.updateMenu())
- return;
- closeMenu_();
- }
- this.menu_ = this.createMenu();
- this.menu_.addEventListener('mousedown', function(e) {
- // Prevent blurring of list, which would close the menu.
- e.preventDefault();
- }, true);
- var parent = $('network-menus');
- if (existing)
- parent.replaceChild(this.menu_, existing);
- else
- parent.appendChild(this.menu_);
- }
- var top = this.offsetTop + this.clientHeight;
- var menuId = this.getMenuName_();
- if (menuId != activeMenu_ || rebuild) {
- closeMenu_();
- activeMenu_ = menuId;
- this.menu_.style.setProperty('top', top + 'px');
- this.menu_.hidden = false;
- }
- if (rescan)
- chrome.send('refreshNetworks');
- },
- };
-
- /**
- * Creates a control for selecting or configuring a network connection based
- * on the type of connection (e.g. wifi versus vpn).
- * @param {{key: string,
- * networkList: Array.<Object>} data Description of the network.
- * @constructor
- */
- function NetworkSelectorItem(data) {
- var el = new NetworkMenuItem(data);
- el.__proto__ = NetworkSelectorItem.prototype;
- el.decorate();
- return el;
- }
-
- NetworkSelectorItem.prototype = {
- __proto__: NetworkMenuItem.prototype,
-
- /* @inheritDoc */
- decorate: function() {
- // TODO(kevers): Generalize method of setting default label.
- var policyManaged = false;
- var defaultMessage = this.data_.key == 'wifi' ?
- 'networkOffline' : 'networkNotConnected';
- this.subtitle = loadTimeData.getString(defaultMessage);
- var list = this.data_.networkList;
- var candidateURL = null;
- for (var i = 0; i < list.length; i++) {
- var networkDetails = list[i];
- if (networkDetails.connecting || networkDetails.connected) {
- this.subtitle = networkDetails.networkName;
- this.setSubtitleDirection('ltr');
- policyManaged = networkDetails.policyManaged;
- candidateURL = networkDetails.iconURL;
- // Only break when we see a connecting network as it is possible to
- // have a connected network and a connecting network at the same
- // time.
- if (networkDetails.connecting) {
- this.connecting = true;
- candidateURL = null;
- break;
- }
- }
- }
- if (candidateURL)
- this.iconURL = candidateURL;
- else
- this.iconType = this.data.key;
-
- this.showSelector();
-
- if (policyManaged)
- this.showManagedNetworkIndicator();
-
- if (activeMenu_ == this.getMenuName_()) {
- // Menu is already showing and needs to be updated. Explicitly calling
- // show menu will force the existing menu to be replaced. The call
- // is deferred in order to ensure that position of this element has
- // beem properly updated.
- var self = this;
- setTimeout(function() {self.showMenu();}, 0);
- }
- },
-
- /**
- * Creates a menu for selecting, configuring or disconnecting from a
- * network.
- * @return {Element} The newly created menu.
- */
- createMenu: function() {
- var menu = this.ownerDocument.createElement('div');
- menu.id = this.getMenuName_();
- menu.className = 'network-menu';
- menu.hidden = true;
- Menu.decorate(menu);
- var addendum = [];
- if (this.data_.key == 'wifi') {
- addendum.push({label: loadTimeData.getString('joinOtherNetwork'),
- command: 'connect',
- data: {networkType: Constants.TYPE_WIFI,
- servicePath: '?'}});
- } else if (this.data_.key == 'cellular') {
- var label = enableDataRoaming_ ? 'disableDataRoaming' :
- 'enableDataRoaming';
- var disabled = !UIAccountTweaks.currentUserIsOwner();
- var entry = {label: loadTimeData.getString(label),
- data: {}};
- if (disabled) {
- entry.command = null;
- entry.tooltip =
- loadTimeData.getString('dataRoamingDisableToggleTooltip');
- } else {
- entry.command = function() {
- options.Preferences.setBooleanPref(
- 'cros.signed.data_roaming_enabled',
- !enableDataRoaming_);
- // Force revalidation of the menu the next time it is displayed.
- this.menu_ = null;
- };
- }
- addendum.push(entry);
- }
- var list = this.data.rememberedNetworks;
- if (list && list.length > 0) {
- var callback = function(list) {
- $('remembered-network-list').clear();
- var dialog = options.PreferredNetworks.getInstance();
- OptionsPage.showPageByName('preferredNetworksPage', false);
- dialog.update(list);
- };
- addendum.push({label: loadTimeData.getString('preferredNetworks'),
- command: callback,
- data: list});
- }
-
- var networkGroup = this.ownerDocument.createElement('div');
- networkGroup.className = 'network-menu-group';
- list = this.data.networkList;
- var empty = !list || list.length == 0;
- if (list) {
- for (var i = 0; i < list.length; i++) {
- var data = list[i];
- this.createNetworkOptionsCallback_(networkGroup, data);
- if (data.connected) {
- if (data.networkType == Constants.TYPE_VPN) {
- // Add separator
- addendum.push({});
- var i18nKey = 'disconnectNetwork';
- addendum.push({label: loadTimeData.getString(i18nKey),
- command: 'disconnect',
- data: data});
- }
- }
- }
- }
- if (this.data_.key == 'wifi' || this.data_.key == 'wimax' ||
- this.data_.key == 'cellular') {
- addendum.push({});
- if (this.data_.key == 'wifi') {
- addendum.push({label: loadTimeData.getString('turnOffWifi'),
- command: function() {
- chrome.send('disableWifi');
- },
- data: {}});
- } else if (this.data_.key == 'wimax') {
- // TODO(zelidrag): Add proper strings for wimax.
- addendum.push({label: loadTimeData.getString('turnOffCellular'),
- command: function() {
- chrome.send('disableWimax');
- },
- data: {}});
- } else if (this.data_.key == 'cellular') {
- addendum.push({label: loadTimeData.getString('turnOffCellular'),
- command: function() {
- chrome.send('disableCellular');
- },
- data: {}});
- }
- }
- if (!empty)
- menu.appendChild(networkGroup);
- if (addendum.length > 0) {
- var separator = false;
- if (!empty) {
- menu.appendChild(MenuItem.createSeparator());
- separator = true;
- }
- for (var i = 0; i < addendum.length; i++) {
- var value = addendum[i];
- if (value.data) {
- var item = this.createCallback_(menu, value.data, value.label,
- value.command);
- if (value.tooltip)
- item.title = value.tooltip;
- separator = false;
- } else if (!separator) {
- menu.appendChild(MenuItem.createSeparator());
- separator = true;
- }
- }
- }
- return menu;
- },
-
- /**
- * Determines if a menu can be updated on the fly. Menus that cannot be
- * updated are fully regenerated using createMenu. The advantage of
- * updating a menu is that it can preserve ordering of networks avoiding
- * entries from jumping around after an update.
- */
- canUpdateMenu: function() {
- return this.data_.key == 'wifi' && activeMenu_ == this.getMenuName_();
- },
-
- /**
- * Updates an existing menu. Updated menus preserve ordering of prior
- * entries. During the update process, the ordering may differ from the
- * preferred ordering as determined by the network library. If the
- * ordering becomes potentially out of sync, then the updated menu is
- * marked for disposal on close. Reopening the menu will force a
- * regeneration, which will in turn fix the ordering.
- * @return {boolean} True if successfully updated.
- */
- updateMenu: function() {
- if (!this.canUpdateMenu())
- return false;
- var oldMenu = $(this.getMenuName_());
- var group = oldMenu.getElementsByClassName('network-menu-group')[0];
- if (!group)
- return false;
- var newMenu = this.createMenu();
- var discardOnClose = false;
- var oldNetworkButtons = this.extractNetworkConnectButtons_(oldMenu);
- var newNetworkButtons = this.extractNetworkConnectButtons_(newMenu);
- for (var key in oldNetworkButtons) {
- if (newNetworkButtons[key]) {
- group.replaceChild(newNetworkButtons[key].button,
- oldNetworkButtons[key].button);
- if (newNetworkButtons[key].index != oldNetworkButtons[key].index)
- discardOnClose = true;
- newNetworkButtons[key] = null;
- } else {
- // Leave item in list to prevent network items from jumping due to
- // deletions.
- oldNetworkButtons[key].disabled = true;
- discardOnClose = true;
- }
- }
- for (var key in newNetworkButtons) {
- var entry = newNetworkButtons[key];
- if (entry) {
- group.appendChild(entry.button);
- discardOnClose = true;
- }
- }
- oldMenu.data = {discardOnClose: discardOnClose};
- return true;
- },
-
- /**
- * Extracts a mapping of network names to menu element and position.
- * @param {!Element} menu The menu to process.
- * @return {Object.<string, Element>} Network mapping.
- * @private
- */
- extractNetworkConnectButtons_: function(menu) {
- var group = menu.getElementsByClassName('network-menu-group')[0];
- var networkButtons = {};
- if (!group)
- return networkButtons;
- var buttons = group.getElementsByClassName('network-menu-item');
- for (var i = 0; i < buttons.length; i++) {
- var label = buttons[i].data.label;
- networkButtons[label] = {index: i, button: buttons[i]};
- }
- return networkButtons;
- },
-
- /**
- * Adds a command to a menu for modifying network settings.
- * @param {!Element} menu Parent menu.
- * @param {Object} data Description of the network.
- * @param {string} label Display name for the menu item.
- * @param {string|function} command Callback function or name
- * of the command for |networkCommand|.
- * @return {!Element} The created menu item.
- * @private
- */
- createCallback_: function(menu, data, label, command) {
- var button = this.ownerDocument.createElement('div');
- button.className = 'network-menu-item';
- var buttonLabel = this.ownerDocument.createElement('span');
- buttonLabel.className = 'network-menu-item-label';
- buttonLabel.textContent = label;
- button.appendChild(buttonLabel);
- var callback = null;
- if (typeof command == 'string') {
- var type = String(data.networkType);
- var path = data.servicePath;
- callback = function() {
- chrome.send('networkCommand',
- [type, path, command]);
- closeMenu_();
- };
- } else if (command != null) {
- callback = function() {
- command(data);
- closeMenu_();
- };
- }
- if (callback != null)
- button.addEventListener('click', callback);
- else
- buttonLabel.classList.add('network-disabled-control');
-
- button.data = {label: label};
- MenuItem.decorate(button);
- menu.appendChild(button);
- return button;
- },
-
- /**
- * Adds a menu item for showing network details.
- * @param {!Element} parent The parent element.
- * @param {Object} data Description of the network.
- * @private
- */
- createNetworkOptionsCallback_: function(parent, data) {
- var menuItem = this.createCallback_(parent,
- data,
- data.networkName,
- 'options');
- menuItem.style.backgroundImage = url(data.iconURL);
- if (data.policyManaged)
- menuItem.appendChild(new ManagedNetworkIndicator());
- if (data.connected || data.connecting) {
- var label = menuItem.getElementsByClassName(
- 'network-menu-item-label')[0];
- label.classList.add('active-network');
- }
- }
- };
-
- /**
- * Creates a button-like control for configurating internet connectivity.
- * @param {{key: string,
- * subtitle: string,
- * command: function} data Description of the network control.
- * @constructor
- */
- function NetworkButtonItem(data) {
- var el = new NetworkListItem(data);
- el.__proto__ = NetworkButtonItem.prototype;
- el.decorate();
- return el;
- }
-
- NetworkButtonItem.prototype = {
- __proto__: NetworkListItem.prototype,
-
- /** @inheritDoc */
- decorate: function() {
- if (this.data.subtitle)
- this.subtitle = this.data.subtitle;
- else
- this.subtitle = null;
- if (this.data.command)
- this.addEventListener('click', this.data.command);
- if (this.data.iconURL)
- this.iconURL = this.data.iconURL;
- else if (this.data.iconType)
- this.iconType = this.data.iconType;
- },
- };
-
- /**
- * A list of controls for manipulating network connectivity.
- * @constructor
- */
- var NetworkList = cr.ui.define('list');
-
- NetworkList.prototype = {
- __proto__: List.prototype,
-
- /** @inheritDoc */
- decorate: function() {
- List.prototype.decorate.call(this);
- this.startBatchUpdates();
- this.autoExpands = true;
- this.addEventListener('blur', this.onBlur_);
- this.dataModel = new ArrayDataModel([]);
-
- // Wi-Fi control is always visible.
- this.update({key: 'wifi', networkList: []});
-
- if (airplaneModeAvailable_()) {
- this.update({key: 'airplaneMode',
- subtitle: loadTimeData.getString('airplaneModeLabel'),
- command: function() {
- chrome.send('toggleAirplaneMode');
- }});
- }
-
- // Add connection control.
- var addConnection = function(type) {
- var callback = function() {
- chrome.send('networkCommand',
- [String(type), '?', 'connect']);
- }
- return callback;
- }
- this.update({key: 'addConnection',
- iconType: 'add-connection',
- menu: [{label: loadTimeData.getString('addConnectionWifi'),
- command: addConnection(Constants.TYPE_WIFI)},
- {label: loadTimeData.getString('addConnectionVPN'),
- command: addConnection(Constants.TYPE_VPN)}]
- });
-
- var prefs = options.Preferences.getInstance();
- prefs.addEventListener('cros.signed.data_roaming_enabled',
- function(event) {
- enableDataRoaming_ = event.value.value;
- });
- this.endBatchUpdates();
- },
-
- /**
- * When the list loses focus, unselect all items in the list and close the
- * active menu.
- * @private
- */
- onBlur_: function() {
- this.selectionModel.unselectAll();
- closeMenu_();
- },
-
- /**
- * Finds the index of a network item within the data model based on
- * category.
- * @param {string} key Unique key for the item in the list.
- * @return {number} The index of the network item, or |undefined| if it is
- * not found.
- */
- indexOf: function(key) {
- var size = this.dataModel.length;
- for (var i = 0; i < size; i++) {
- var entry = this.dataModel.item(i);
- if (entry.key == key)
- return i;
- }
- },
-
- /**
- * Updates a network control.
- * @param {Object.<string,string>} data Description of the entry.
- */
- update: function(data) {
- this.startBatchUpdates();
- var index = this.indexOf(data.key);
- if (index == undefined) {
- // Find reference position for adding the element. We cannot hide
- // individual list elements, thus we need to conditionally add or
- // remove elements and cannot rely on any element having a fixed index.
- for (var i = 0; i < Constants.NETWORK_ORDER.length; i++) {
- if (data.key == Constants.NETWORK_ORDER[i]) {
- data.sortIndex = i;
- break;
- }
- }
- var referenceIndex = -1;
- for (var i = 0; i < this.dataModel.length; i++) {
- var entry = this.dataModel.item(i);
- if (entry.sortIndex < data.sortIndex)
- referenceIndex = i;
- else
- break;
- }
- if (referenceIndex == -1) {
- // Prepend to the start of the list.
- this.dataModel.splice(0, 0, data);
- } else if (referenceIndex == this.dataModel.length) {
- // Append to the end of the list.
- this.dataModel.push(data);
- } else {
- // Insert after the reference element.
- this.dataModel.splice(referenceIndex + 1, 0, data);
- }
- } else {
- var entry = this.dataModel.item(index);
- data.sortIndex = entry.sortIndex;
- this.dataModel.splice(index, 1, data);
- }
- this.endBatchUpdates();
- },
-
- /** @inheritDoc */
- createItem: function(entry) {
- if (entry.networkList)
- return new NetworkSelectorItem(entry);
- if (entry.command)
- return new NetworkButtonItem(entry);
- if (entry.menu)
- return new NetworkMenuItem(entry);
- },
-
- /**
- * Deletes an element from the list.
- * @param {string} key Unique identifier for the element.
- */
- deleteItem: function(key) {
- var index = this.indexOf(key);
- if (index != undefined)
- this.dataModel.splice(index, 1);
- },
-
- /**
- * Updates the state of a toggle button.
- * @param {string} key Unique identifier for the element.
- * @param {boolean} active Whether the control is active.
- */
- updateToggleControl: function(key, active) {
- var index = this.indexOf(key);
- if (index != undefined) {
- var entry = this.dataModel.item(index);
- entry.iconType = active ? 'control-active' :
- 'control-inactive';
- this.update(entry);
- }
- }
- };
-
- /**
- * Chrome callback for updating network controls.
- * @param {Object} data Description of available network devices and their
- * corresponding state.
- */
- NetworkList.refreshNetworkData = function(data) {
- var networkList = $('network-list');
- networkList.startBatchUpdates();
- cellularAvailable_ = data.cellularAvailable;
- cellularEnabled_ = data.cellularEnabled;
- wimaxAvailable_ = data.wimaxAvailable;
- wimaxEnabled_ = data.wimaxEnabled;
-
- if (data.accessLocked) {
- $('network-locked-message').hidden = false;
- networkList.disabled = true;
- $('use-shared-proxies').disabled = true;
- } else {
- $('network-locked-message').hidden = true;
- networkList.disabled = false;
- $('use-shared-proxies').disabled = false;
- }
-
- // Only show Ethernet control if connected.
- var ethernetConnection = getConnection_(data.wiredList);
- if (ethernetConnection) {
- var type = String(Constants.TYPE_ETHERNET);
- var path = ethernetConnection.servicePath;
- var ethernetOptions = function() {
- chrome.send('networkCommand',
- [type, path, 'options']);
- };
- networkList.update({key: 'ethernet',
- subtitle: loadTimeData.getString('networkConnected'),
- iconURL: ethernetConnection.iconURL,
- command: ethernetOptions});
- } else {
- networkList.deleteItem('ethernet');
- }
-
- if (data.wifiEnabled) {
- loadData_('wifi', data.wirelessList, data.rememberedList);
- } else {
- var enableWifi = function() {
- chrome.send('enableWifi');
- };
- networkList.update({key: 'wifi',
- subtitle: loadTimeData.getString('networkDisabled'),
- iconType: 'wifi',
- command: enableWifi});
- }
-
- // Only show cellular control if available and not in airplane mode.
- if (data.cellularAvailable && !data.airplaneMode) {
- if (data.cellularEnabled) {
- loadData_('cellular', data.wirelessList, data.rememberedList);
- } else {
- var subtitle = loadTimeData.getString('networkDisabled');
- var enableCellular = function() {
- chrome.send('enableCellular');
- };
- networkList.update({key: 'cellular',
- subtitle: subtitle,
- iconType: 'cellular',
- command: enableCellular});
- }
- } else {
- networkList.deleteItem('cellular');
- }
-
- // Only show cellular control if available and not in airplane mode.
- if (data.wimaxAvailable && !data.airplaneMode) {
- if (data.wimaxEnabled) {
- loadData_('wimax', data.wirelessList, data.rememberedList);
- } else {
- var subtitle = loadTimeData.getString('networkDisabled');
- var enableWimax = function() {
- chrome.send('enableWimax');
- };
- networkList.update({key: 'wimax',
- subtitle: subtitle,
- iconType: 'cellular',
- command: enableWimax});
- }
- } else {
- networkList.deleteItem('wimax');
- }
-
- // Only show VPN control if there is an available network and an internet
- // connection.
- if (data.vpnList.length > 0 && (ethernetConnection ||
- isConnected_(data.wirelessList)))
- loadData_('vpn', data.vpnList, data.rememberedList);
- else
- networkList.deleteItem('vpn');
- networkList.updateToggleControl('airplaneMode', data.airplaneMode);
- networkList.endBatchUpdates();
- };
-
- /**
- * Element for indicating a policy managed network.
- * @constructor
- */
- function ManagedNetworkIndicator() {
- var el = cr.doc.createElement('div');
- el.__proto__ = ManagedNetworkIndicator.prototype;
- el.decorate();
- return el;
- }
-
- ManagedNetworkIndicator.prototype = {
- __proto__: ControlledSettingIndicator.prototype,
-
- /** @inheritDoc */
- decorate: function() {
- ControlledSettingIndicator.prototype.decorate.call(this);
- this.controlledBy = 'policy';
- var policyLabel = loadTimeData.getString('managedNetwork');
- this.setAttribute('textPolicy', policyLabel);
- this.className = 'controlled-setting-indicator';
- // The default popup clips to the bounds of the list of networks in the
- // drop-down because it has enforced size constraints with auto-
- // scrolling. Use a tooltip in place of the bubble popup until the
- // clipping issues are resolved.
- this.setAttribute('title', policyLabel);
- this.addEventListener('click', function(e) {
- e.preventDefault();
- e.stopPropagation();
- });
- }
- };
-
- /**
- * Updates the list of available networks and their status, filtered by
- * network type.
- * @param {string} category The type of network.
- * @param {Array} available The list of available networks and their status.
- * @param {Array} remembered The list of remmebered networks.
- */
- function loadData_(category, available, remembered) {
- var data = {key: category};
- var type = categoryMap[category];
- var availableNetworks = [];
- for (var i = 0; i < available.length; i++) {
- if (available[i].networkType == type)
- availableNetworks.push(available[i]);
- }
- data.networkList = availableNetworks;
- if (remembered) {
- var rememberedNetworks = [];
- for (var i = 0; i < remembered.length; i++) {
- if (remembered[i].networkType == type)
- rememberedNetworks.push(remembered[i]);
- }
- data.rememberedNetworks = rememberedNetworks;
- }
- $('network-list').update(data);
- }
-
- /**
- * Hides the currently visible menu.
- * @private
- */
- function closeMenu_() {
- if (activeMenu_) {
- var menu = $(activeMenu_);
- menu.hidden = true;
- if (menu.data && menu.data.discardOnClose)
- menu.parentNode.removeChild(menu);
- activeMenu_ = null;
- }
- }
-
- /**
- * Determines if the user is connected to or in the process of connecting to
- * a wireless network.
- * @param {Array.<Object>} networkList List of networks.
- * @return {boolean} True if connected or connecting to a network.
- * @private
- */
- function isConnected_(networkList) {
- return getConnection_(networkList) != null;
- }
-
- /**
- * Fetches the active connection.
- * @param {Array.<Object>} networkList List of networks.
- * @return {boolean} True if connected or connecting to a network.
- * @private
- */
- function getConnection_(networkList) {
- if (!networkList)
- return null;
- for (var i = 0; i < networkList.length; i++) {
- var entry = networkList[i];
- if (entry.connected || entry.connecting)
- return entry;
- }
- return null;
- }
-
- /**
- * Queries if airplane mode is available.
- * @return {boolean} Indicates if airplane mode is available.
- * @private
- */
- function airplaneModeAvailable_() {
- // TODO(kevers): Use library callback to determine if airplane mode is
- // available once back-end suport is in place.
- return false;
- }
-
- /**
- * Whether the Network list is disabled. Only used for display purpose.
- * @type {boolean}
- */
- cr.defineProperty(NetworkList, 'disabled', cr.PropertyKind.BOOL_ATTR);
-
- // Export
- return {
- NetworkList: NetworkList
- };
-});

Powered by Google App Engine
This is Rietveld 408576698