Commit 2e526f05 authored by kevers@chromium.org's avatar kevers@chromium.org

Cleanup of network code.

BUG=
TEST=


Review URL: http://codereview.chromium.org/10212003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133966 0039d316-1c4b-4281-b951-d872f2087c98
parent c1594e4e
...@@ -7,6 +7,21 @@ cr.define('options.internet', function() { ...@@ -7,6 +7,21 @@ cr.define('options.internet', function() {
/** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
/** /**
* Network settings constants. These enums must 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;
/*
* Minimum delay in milliseconds before updating controls. Used to * Minimum delay in milliseconds before updating controls. Used to
* consolidate update requests resulting from preference update * consolidate update requests resulting from preference update
* notifications. * notifications.
...@@ -126,8 +141,7 @@ cr.define('options.internet', function() { ...@@ -126,8 +141,7 @@ cr.define('options.internet', function() {
if (!servicePath || !servicePath.length || if (!servicePath || !servicePath.length ||
!networkType || !networkType.length) !networkType || !networkType.length)
return; return;
// TODO(kevers): Use more descriptive name for callback. chrome.send('networkCommand',
chrome.send('buttonClickCallback',
[networkType, servicePath, 'options']); [networkType, servicePath, 'options']);
}, },
...@@ -520,8 +534,7 @@ cr.define('options.internet', function() { ...@@ -520,8 +534,7 @@ cr.define('options.internet', function() {
DetailsInternetPage.loginFromDetails = function() { DetailsInternetPage.loginFromDetails = function() {
var data = $('connection-state').data; var data = $('connection-state').data;
var servicePath = data.servicePath; var servicePath = data.servicePath;
// TODO(kevers): Use more descriptive name for callback. chrome.send('networkCommand', [String(data.type),
chrome.send('buttonClickCallback', [String(data.type),
servicePath, servicePath,
'connect']); 'connect']);
OptionsPage.closeOverlay(); OptionsPage.closeOverlay();
...@@ -530,8 +543,7 @@ cr.define('options.internet', function() { ...@@ -530,8 +543,7 @@ cr.define('options.internet', function() {
DetailsInternetPage.disconnectNetwork = function() { DetailsInternetPage.disconnectNetwork = function() {
var data = $('connection-state').data; var data = $('connection-state').data;
var servicePath = data.servicePath; var servicePath = data.servicePath;
// TODO(kevers): Use more descriptive name for callback. chrome.send('networkCommand', [String(data.type),
chrome.send('buttonClickCallback', [String(data.type),
servicePath, servicePath,
'disconnect']); 'disconnect']);
OptionsPage.closeOverlay(); OptionsPage.closeOverlay();
...@@ -540,9 +552,8 @@ cr.define('options.internet', function() { ...@@ -540,9 +552,8 @@ cr.define('options.internet', function() {
DetailsInternetPage.activateFromDetails = function() { DetailsInternetPage.activateFromDetails = function() {
var data = $('connection-state').data; var data = $('connection-state').data;
var servicePath = data.servicePath; var servicePath = data.servicePath;
if (data.type == options.internet.Constants.TYPE_CELLULAR) { if (data.type == Constants.TYPE_CELLULAR) {
// TODO(kevers): Use more descriptive name for callback. chrome.send('networkCommand', [String(data.type),
chrome.send('buttonClickCallback', [String(data.type),
String(servicePath), String(servicePath),
'activate']); 'activate']);
} }
...@@ -552,14 +563,14 @@ cr.define('options.internet', function() { ...@@ -552,14 +563,14 @@ cr.define('options.internet', function() {
DetailsInternetPage.setDetails = function() { DetailsInternetPage.setDetails = function() {
var data = $('connection-state').data; var data = $('connection-state').data;
var servicePath = data.servicePath; var servicePath = data.servicePath;
if (data.type == options.internet.Constants.TYPE_WIFI) { if (data.type == Constants.TYPE_WIFI) {
chrome.send('setPreferNetwork', chrome.send('setPreferNetwork',
[String(servicePath), [String(servicePath),
$('prefer-network-wifi').checked ? 'true' : 'false']); $('prefer-network-wifi').checked ? 'true' : 'false']);
chrome.send('setAutoConnect', chrome.send('setAutoConnect',
[String(servicePath), [String(servicePath),
$('auto-connect-network-wifi').checked ? 'true' : 'false']); $('auto-connect-network-wifi').checked ? 'true' : 'false']);
} else if (data.type == options.internet.Constants.TYPE_CELLULAR) { } else if (data.type == Constants.TYPE_CELLULAR) {
chrome.send('setAutoConnect', chrome.send('setAutoConnect',
[String(servicePath), [String(servicePath),
$('auto-connect-network-cellular').checked ? 'true' : $('auto-connect-network-cellular').checked ? 'true' :
...@@ -585,7 +596,6 @@ cr.define('options.internet', function() { ...@@ -585,7 +596,6 @@ cr.define('options.internet', function() {
$('network-details-subtitle-status').textContent = $('network-details-subtitle-status').textContent =
localStrings.getString(statusKey); localStrings.getString(statusKey);
var typeKey = null; var typeKey = null;
var Constants = options.internet.Constants;
switch (data.type) { switch (data.type) {
case Constants.TYPE_ETHERNET: case Constants.TYPE_ETHERNET:
typeKey = 'ethernetTitle'; typeKey = 'ethernetTitle';
...@@ -619,7 +629,7 @@ cr.define('options.internet', function() { ...@@ -619,7 +629,7 @@ cr.define('options.internet', function() {
$('activate-details').hidden = true; $('activate-details').hidden = true;
$('view-account-details').hidden = true; $('view-account-details').hidden = true;
$('details-internet-login').hidden = data.connected; $('details-internet-login').hidden = data.connected;
if (data.type == options.internet.Constants.TYPE_ETHERNET) if (data.type == Constants.TYPE_ETHERNET)
$('details-internet-disconnect').hidden = true; $('details-internet-disconnect').hidden = true;
else else
$('details-internet-disconnect').hidden = !data.connected; $('details-internet-disconnect').hidden = !data.connected;
...@@ -713,7 +723,7 @@ cr.define('options.internet', function() { ...@@ -713,7 +723,7 @@ cr.define('options.internet', function() {
// This is most likely a device without a hardware address. // This is most likely a device without a hardware address.
$('hardware-address-row').style.display = 'none'; $('hardware-address-row').style.display = 'none';
} }
if (data.type == options.internet.Constants.TYPE_WIFI) { if (data.type == Constants.TYPE_WIFI) {
OptionsPage.showTab($('wifi-network-nav-tab')); OptionsPage.showTab($('wifi-network-nav-tab'));
detailsPage.wireless = true; detailsPage.wireless = true;
detailsPage.vpn = false; detailsPage.vpn = false;
...@@ -759,7 +769,7 @@ cr.define('options.internet', function() { ...@@ -759,7 +769,7 @@ cr.define('options.internet', function() {
$('auto-connect-network-wifi').checked = data.autoConnect.value; $('auto-connect-network-wifi').checked = data.autoConnect.value;
$('auto-connect-network-wifi').disabled = !data.remembered; $('auto-connect-network-wifi').disabled = !data.remembered;
detailsPage.password = data.encrypted; detailsPage.password = data.encrypted;
} else if (data.type == options.internet.Constants.TYPE_CELLULAR) { } else if (data.type == Constants.TYPE_CELLULAR) {
if (!data.gsm) if (!data.gsm)
OptionsPage.showTab($('cellular-plan-nav-tab')); OptionsPage.showTab($('cellular-plan-nav-tab'));
else else
...@@ -853,7 +863,7 @@ cr.define('options.internet', function() { ...@@ -853,7 +863,7 @@ cr.define('options.internet', function() {
detailsPage.nocellplan = true; detailsPage.nocellplan = true;
detailsPage.cellplanloading = false; detailsPage.cellplanloading = false;
} }
} else if (data.type == options.internet.Constants.TYPE_VPN) { } else if (data.type == Constants.TYPE_VPN) {
OptionsPage.showTab($('vpn-nav-tab')); OptionsPage.showTab($('vpn-nav-tab'));
detailsPage.wireless = false; detailsPage.wireless = false;
detailsPage.vpn = true; detailsPage.vpn = true;
......
// 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.internet', function() {
/**
* Network settings constants. These enums usually match their C++
* counterparts.
*/
function Constants() {}
// Minimum length for wireless network password.
Constants.MIN_WIRELESS_PASSWORD_LENGTH = 5;
// Minimum length for SSID name.
Constants.MIN_WIRELESS_SSID_LENGTH = 1;
// 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;
// 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;
// ONC sources:
Constants.ONC_SOURCE_USER_IMPORT = 1;
Constants.ONC_SOURCE_DEVICE_POLICY = 2;
Constants.ONC_SOURCE_USER_POLICY = 3;
/**
* Creates a new network list div.
* @param {Object=} opt_propertyBag Optional properties.
* @constructor
* @extends {HTMLDivElement}
*/
var NetworkElement = cr.ui.define('div');
NetworkElement.prototype = {
__proto__: HTMLDivElement.prototype,
/** @inheritDoc */
decorate: function() {
this.addEventListener('click', this.handleClick_);
},
/**
* Loads given network list.
* @param {Array} networks An array of network object.
*/
load: function(networks) {
this.textContent = '';
for (var i = 0; i < networks.length; ++i) {
this.appendChild(new NetworkItem(networks[i]));
}
},
/**
* Handles click on network list and triggers actions when clicked on
* a NetworkListItem button.
* @private
* @param {!Event} e The click event object.
*/
handleClick_: function(e) {
// We shouldn't respond to click events selecting an input,
// so return on those.
if (e.target.tagName == 'INPUT') {
return;
}
// Handle left button click
if (e.button == 0) {
var el = e.target;
// If click is on action buttons of a network item.
if (!(el.buttonType && el.networkType && el.servicePath)) {
if (el.buttonType) {
return;
}
// If click is on a network item or its label, walk up the DOM tree
// to find the network item.
var item = el;
while (item && !item.data) {
item = item.parentNode;
}
if (item.connecting)
return;
if (item) {
var data = item.data;
// Don't try to connect to Ethernet or unactivated Cellular.
if (data && (data.networkType == 1 ||
(data.networkType == 5 && data.activation_state != 1)))
return;
// If clicked on other networks item.
if (data && data.servicePath == '?') {
chrome.send('buttonClickCallback',
[String(data.networkType),
data.servicePath,
'connect']);
}
}
}
}
}
};
/**
* Creates a new network item.
* @param {Object} network The network this represents.
* @constructor
* @extends {HTMLDivElement}
*/
function NetworkItem(network) {
var el = cr.doc.createElement('div');
el.data = network;
NetworkItem.decorate(el);
return el;
}
/**
* Decorates an element as a network item.
* @param {!HTMLElement} el The element to decorate.
*/
NetworkItem.decorate = function(el) {
el.__proto__ = NetworkItem.prototype;
el.decorate();
};
NetworkItem.prototype = {
__proto__: HTMLDivElement.prototype,
/** @inheritDoc */
decorate: function() {
this.className = 'network-item';
this.connectable = this.data.connectable;
this.connected = this.data.connected;
this.connecting = this.data.connecting;
this.other = this.data.servicePath == '?';
this.id = this.data.servicePath;
// Insert a div holding the policy-managed indicator.
var policyIndicator = this.ownerDocument.createElement('div');
policyIndicator.className = 'controlled-setting-indicator';
cr.ui.decorate(policyIndicator, options.ControlledSettingIndicator);
if (this.data.policyManaged) {
policyIndicator.controlledBy = 'policy';
policyIndicator.setAttribute('textPolicy',
localStrings.getString('managedNetwork'));
}
this.appendChild(policyIndicator);
// textDiv holds icon, name and status text.
var textDiv = this.ownerDocument.createElement('div');
textDiv.className = 'network-item-text';
if (this.data.iconURL) {
textDiv.style.backgroundImage = url(this.data.iconURL);
}
var nameEl = this.ownerDocument.createElement('div');
nameEl.className = 'network-name-label';
nameEl.textContent = this.data.networkName;
textDiv.appendChild(nameEl);
if (this.other) {
// No status and buttons for "Other..."
this.appendChild(textDiv);
return;
}
// Only show status text if not empty.
if (this.data.networkStatus) {
var statusEl = this.ownerDocument.createElement('div');
statusEl.className = 'network-status-label';
statusEl.textContent = this.data.networkStatus;
textDiv.appendChild(statusEl);
}
this.appendChild(textDiv);
var spacerDiv = this.ownerDocument.createElement('div');
spacerDiv.className = 'network-item-box-spacer';
this.appendChild(spacerDiv);
var buttonsDiv = this.ownerDocument.createElement('div');
var self = this;
if (!this.data.remembered) {
var no_plan =
this.data.networkType == Constants.TYPE_CELLULAR &&
this.data.needs_new_plan;
var show_activate =
(this.data.networkType == Constants.TYPE_CELLULAR &&
this.data.activation_state !=
Constants.ACTIVATION_STATE_ACTIVATED &&
this.data.activation_state !=
Constants.ACTIVATION_STATE_ACTIVATING);
// Show [Activate] button for non-activated Cellular network.
if (show_activate || no_plan) {
var button_name = no_plan ? 'buyplan_button' : 'activate_button';
buttonsDiv.appendChild(
this.createButton_(button_name, 'activate',
function(e) {
chrome.send('buttonClickCallback',
[String(self.data.networkType),
self.data.servicePath,
'activate']);
}));
}
// Show disconnect button if not ethernet.
if (this.data.networkType != Constants.TYPE_ETHERNET &&
this.data.connected) {
buttonsDiv.appendChild(
this.createButton_('disconnect_button', 'disconnect',
function(e) {
chrome.send('buttonClickCallback',
[String(self.data.networkType),
self.data.servicePath,
'disconnect']);
}));
}
if (!this.data.connected && !this.data.connecting) {
// connect button (if not ethernet and not showing activate button)
if (this.data.networkType != Constants.TYPE_ETHERNET &&
!show_activate && !no_plan) {
buttonsDiv.appendChild(
this.createButton_('connect_button', 'connect',
function(e) {
chrome.send('buttonClickCallback',
[String(self.data.networkType),
self.data.servicePath,
'connect']);
}));
}
}
if (this.data.connected ||
this.data.networkType == Constants.TYPE_ETHERNET ||
this.data.networkType == Constants.TYPE_VPN ||
this.data.networkType == Constants.TYPE_WIFI ||
this.data.networkType == Constants.TYPE_CELLULAR) {
buttonsDiv.appendChild(
this.createButton_('options_button', 'options',
function(e) {
options.ProxyOptions.getInstance().setNetworkName(
self.data.networkName);
chrome.send('buttonClickCallback',
[String(self.data.networkType),
self.data.servicePath,
'options']);
}));
}
} else {
// Put "Forget this network" button.
var button = this.createButton_('forget_button', 'forget',
function(e) {
chrome.send('buttonClickCallback',
[String(self.data.networkType),
self.data.servicePath,
'forget']);
});
button.disabled = this.data.policyManaged;
buttonsDiv.appendChild(button);
}
this.appendChild(buttonsDiv);
},
/**
* Creates a button for interacting with a network.
* @param {Object} name The name of the localStrings to use for the text.
* @param {Object} type The type of button.
*/
createButton_: function(name, type, callback) {
var buttonEl = this.ownerDocument.createElement('button');
buttonEl.buttonType = type;
buttonEl.textContent = localStrings.getString(name);
buttonEl.addEventListener('click', callback);
return buttonEl;
}
};
/**
* Whether the underlying network is connected. Only used for display purpose.
* @type {boolean}
*/
cr.defineProperty(NetworkItem, 'connected', cr.PropertyKind.BOOL_ATTR);
/**
* Whether the underlying network is currently connecting.
* Only used for display purpose.
* @type {boolean}
*/
cr.defineProperty(NetworkItem, 'connecting', cr.PropertyKind.BOOL_ATTR);
/**
* Whether the underlying network is an other network for adding networks.
* Only used for display purpose.
* @type {boolean}
*/
cr.defineProperty(NetworkItem, 'other', cr.PropertyKind.BOOL_ATTR);
/**
* Whether the underlying network is connectable.
* @type {boolean}
*/
cr.defineProperty(NetworkItem, 'connectable', cr.PropertyKind.BOOL_ATTR);
return {
Constants: Constants,
NetworkElement: NetworkElement
};
});
...@@ -551,7 +551,7 @@ cr.define('options.network', function() { ...@@ -551,7 +551,7 @@ cr.define('options.network', function() {
* @param {Object} data Description of the network. * @param {Object} data Description of the network.
* @param {string} label Display name for the menu item. * @param {string} label Display name for the menu item.
* @param {string|function} command Callback function or name * @param {string|function} command Callback function or name
* of the command for |buttonClickCallback|. * of the command for |networkCommand|.
* @return {!Element} The created menu item. * @return {!Element} The created menu item.
* @private * @private
*/ */
...@@ -567,7 +567,7 @@ cr.define('options.network', function() { ...@@ -567,7 +567,7 @@ cr.define('options.network', function() {
var type = String(data.networkType); var type = String(data.networkType);
var path = data.servicePath; var path = data.servicePath;
callback = function() { callback = function() {
chrome.send('buttonClickCallback', chrome.send('networkCommand',
[type, path, command]); [type, path, command]);
closeMenu_(); closeMenu_();
}; };
...@@ -615,7 +615,7 @@ cr.define('options.network', function() { ...@@ -615,7 +615,7 @@ cr.define('options.network', function() {
var path = data.servicePath; var path = data.servicePath;
optionsButton.addEventListener('click', function(event) { optionsButton.addEventListener('click', function(event) {
event.stopPropagation(); event.stopPropagation();
chrome.send('buttonClickCallback', chrome.send('networkCommand',
[type, path, 'options']); [type, path, 'options']);
closeMenu_(); closeMenu_();
}); });
...@@ -684,7 +684,7 @@ cr.define('options.network', function() { ...@@ -684,7 +684,7 @@ cr.define('options.network', function() {
// Add connection control. // Add connection control.
var addConnection = function(type) { var addConnection = function(type) {
var callback = function() { var callback = function() {
chrome.send('buttonClickCallback', chrome.send('networkCommand',
[String(type), '?', 'connect']); [String(type), '?', 'connect']);
} }
return callback; return callback;
...@@ -834,7 +834,7 @@ cr.define('options.network', function() { ...@@ -834,7 +834,7 @@ cr.define('options.network', function() {
var type = String(Constants.TYPE_ETHERNET); var type = String(Constants.TYPE_ETHERNET);
var path = ethernetConnection.servicePath; var path = ethernetConnection.servicePath;
var ethernetOptions = function() { var ethernetOptions = function() {
chrome.send('buttonClickCallback', chrome.send('networkCommand',
[type, path, 'options']); [type, path, 'options']);
}; };
networkList.update({key: 'ethernet', networkList.update({key: 'ethernet',
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
<include src="chromeos/cellular_plan_element.js"></include> <include src="chromeos/cellular_plan_element.js"></include>
<include src="chromeos/change_picture_options.js"></include> <include src="chromeos/change_picture_options.js"></include>
<include src="chromeos/internet_detail_ip_config_list.js"></include> <include src="chromeos/internet_detail_ip_config_list.js"></include>
<include src="chromeos/internet_network_element.js"></include>
<include src="chromeos/internet_detail.js"></include> <include src="chromeos/internet_detail.js"></include>
<include src="chromeos/network_list.js"></include> <include src="chromeos/network_list.js"></include>
<include src="chromeos/preferred_networks.js"></include> <include src="chromeos/preferred_networks.js"></include>
......
...@@ -443,12 +443,12 @@ void InternetOptionsHandler::InitializePage() { ...@@ -443,12 +443,12 @@ void InternetOptionsHandler::InitializePage() {
void InternetOptionsHandler::RegisterMessages() { void InternetOptionsHandler::RegisterMessages() {
// Setup handlers specific to this panel. // Setup handlers specific to this panel.
web_ui()->RegisterMessageCallback("networkCommand",
base::Bind(&InternetOptionsHandler::NetworkCommandCallback,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("refreshNetworks", web_ui()->RegisterMessageCallback("refreshNetworks",
base::Bind(&InternetOptionsHandler::RefreshNetworksCallback, base::Bind(&InternetOptionsHandler::RefreshNetworksCallback,
base::Unretained(this))); base::Unretained(this)));
web_ui()->RegisterMessageCallback("buttonClickCallback",
base::Bind(&InternetOptionsHandler::ButtonClickCallback,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("refreshCellularPlan", web_ui()->RegisterMessageCallback("refreshCellularPlan",
base::Bind(&InternetOptionsHandler::RefreshCellularPlanCallback, base::Bind(&InternetOptionsHandler::RefreshCellularPlanCallback,
base::Unretained(this))); base::Unretained(this)));
...@@ -1070,7 +1070,7 @@ Browser* InternetOptionsHandler::GetAppropriateBrowser() { ...@@ -1070,7 +1070,7 @@ Browser* InternetOptionsHandler::GetAppropriateBrowser() {
ProfileManager::GetDefaultProfileOrOffTheRecord()); ProfileManager::GetDefaultProfileOrOffTheRecord());
} }
void InternetOptionsHandler::ButtonClickCallback(const ListValue* args) { void InternetOptionsHandler::NetworkCommandCallback(const ListValue* args) {
std::string str_type; std::string str_type;
std::string service_path; std::string service_path;
std::string command; std::string command;
......
...@@ -65,13 +65,14 @@ class InternetOptionsHandler ...@@ -65,13 +65,14 @@ class InternetOptionsHandler
// browser window with an empty tab and returns it. // browser window with an empty tab and returns it.
Browser* GetAppropriateBrowser(); Browser* GetAppropriateBrowser();
// Passes data needed to show details overlay for network. // Passes data needed to show the details overlay for a network.
// |args| will be [ network_type, service_path, command ] // |args| will be [ network_type, service_path, command ]
// And command is one of 'options', 'connect', disconnect', 'activate' or // And command is one of 'options', 'connect', disconnect', 'activate' or
// 'forget' // 'forget'
// Handle{Wifi,Cellular}ButtonClick handles button click on a wireless void NetworkCommandCallback(const base::ListValue* args);
// network item and a cellular network item respectively.
void ButtonClickCallback(const base::ListValue* args); // Handle{Wifi,Cellular,VPN}ButtonClick handles button click on a wireless,
// cellular or VPN network item, respectively.
void HandleWifiButtonClick(const std::string& service_path, void HandleWifiButtonClick(const std::string& service_path,
const std::string& command); const std::string& command);
void HandleCellularButtonClick(const std::string& service_path, void HandleCellularButtonClick(const std::string& service_path,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment