summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-17 01:28:14 +0000
committerchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-17 01:28:14 +0000
commitca9f6706f4e732bcc399d03d9f777be7a81c577e (patch)
tree458aa2f60f330e7e83a9fa14ffe7b54abe4396c0 /chrome
parent59565102cf40aa74f8564f9368ce4cf27c335de2 (diff)
downloadchromium_src-ca9f6706f4e732bcc399d03d9f777be7a81c577e.zip
chromium_src-ca9f6706f4e732bcc399d03d9f777be7a81c577e.tar.gz
chromium_src-ca9f6706f4e732bcc399d03d9f777be7a81c577e.tar.bz2
Don't allow connection to networks that are not connected.
For example, if Google-A is not configure, it will be disabled in the network menu and not selectable in the options pages. And from oobe/login, Google-A will always be disabled b/c the certificates will not be there until the user logs in. BUG=chromium-os:8293 TEST=Manual. From oobe, make sure google-a is disabled. Before setting up google-a, make sure google-a is disabled in network menu and options pages. Then set up google-a and see that it's now enabled in both network menu and options page. Log out and check that google-a is disabled. Review URL: http://codereview.chromium.org/4976007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@66356 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/app/generated_resources.grd3
-rw-r--r--chrome/browser/chromeos/cros/network_library.cc18
-rw-r--r--chrome/browser/chromeos/cros/network_library.h6
-rw-r--r--chrome/browser/chromeos/dom_ui/internet_options_handler.cc17
-rw-r--r--chrome/browser/chromeos/dom_ui/internet_options_handler.h5
-rw-r--r--chrome/browser/chromeos/status/network_menu.cc4
-rw-r--r--chrome/browser/resources/options/chromeos_internet_network_element.js12
-rw-r--r--chrome/browser/resources/options/chromeos_internet_options_page.css2
8 files changed, 54 insertions, 13 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 539447f..57767ac 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -10148,6 +10148,9 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED" desc="The network device status disconnected.">
Disconnected
</message>
+ <message name="IDS_STATUSBAR_NETWORK_DEVICE_NOT_CONFIGURED" desc="The network device status not configured.">
+ Not configured
+ </message>
<message name="IDS_STATUSBAR_NETWORK_DEVICE_DISABLED" desc="The network device status disabled.">
Off
</message>
diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc
index b983daa1..c67a495 100644
--- a/chrome/browser/chromeos/cros/network_library.cc
+++ b/chrome/browser/chromeos/cros/network_library.cc
@@ -35,6 +35,7 @@ namespace {
// straight out of libcros:chromeos_network.cc. Fix this by moving
// all handling of properties into libcros.
// Network service properties we are interested in monitoring
+static const char* kConnectableProperty = "Connectable";
static const char* kIsActiveProperty = "IsActive";
static const char* kStateProperty = "State";
static const char* kSignalStrengthProperty = "Strength";
@@ -219,14 +220,18 @@ Network::Network(const Network& network) {
type_ = network.type();
state_ = network.state();
error_ = network.error();
+ connectable_ = network.connectable();
+ is_active_ = network.is_active();
}
void Network::Clear() {
- state_ = STATE_UNKNOWN;
- error_ = ERROR_UNKNOWN;
service_path_.clear();
device_path_.clear();
ip_address_.clear();
+ type_ = TYPE_UNKNOWN;
+ state_ = STATE_UNKNOWN;
+ error_ = ERROR_UNKNOWN;
+ connectable_ = true;
is_active_ = false;
}
@@ -236,6 +241,7 @@ Network::Network(const ServiceInfo* service) {
error_ = service->error;
service_path_ = SafeString(service->service_path);
device_path_ = SafeString(service->device_path);
+ connectable_ = service->connectable;
is_active_ = service->is_active;
ip_address_.clear();
// If connected, get ip config.
@@ -1424,7 +1430,8 @@ class NetworkLibraryImpl : public NetworkLibrary {
wifi3->set_name("Fake Wifi 3");
wifi3->set_strength(50);
wifi3->set_connected(false);
- wifi3->set_encryption(SECURITY_WEP);
+ wifi3->set_encryption(SECURITY_8021X);
+ wifi3->set_connectable(false);
wifi_networks_.push_back(wifi3);
wifi_ = wifi2;
@@ -1641,7 +1648,10 @@ class NetworkLibraryImpl : public NetworkLibrary {
}
network = wireless;
}
- if (strcmp(key, kIsActiveProperty) == 0) {
+ if (strcmp(key, kConnectableProperty) == 0) {
+ if (value->GetAsBoolean(&boolval))
+ network->set_connectable(boolval);
+ } else if (strcmp(key, kIsActiveProperty) == 0) {
if (value->GetAsBoolean(&boolval))
network->set_active(boolval);
} else if (strcmp(key, kStateProperty) == 0) {
diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h
index 714bc80..fb80d09 100644
--- a/chrome/browser/chromeos/cros/network_library.h
+++ b/chrome/browser/chromeos/cros/network_library.h
@@ -49,6 +49,9 @@ class Network {
state_ == STATE_IDLE; }
ConnectionError error() const { return error_; }
ConnectionState state() const { return state_; }
+ // Is this network connectable. Some networks are not yet ready to be
+ // connected. For example, an 8021X network without certificates.
+ bool connectable() const { return connectable_; }
// Is this the active network, i.e, the one through which
// network traffic is being routed? A network can be connected,
// but not be carrying traffic.
@@ -68,6 +71,7 @@ class Network {
: type_(TYPE_UNKNOWN),
state_(STATE_UNKNOWN),
error_(ERROR_UNKNOWN),
+ connectable_(true),
is_active_(false) {}
explicit Network(const Network& network);
explicit Network(const ServiceInfo* service);
@@ -79,6 +83,7 @@ class Network {
ConnectionType type_;
ConnectionState state_;
ConnectionError error_;
+ bool connectable_;
bool is_active_;
private:
@@ -89,6 +94,7 @@ class Network {
void set_connected(bool connected) { state_ = (connected ?
STATE_READY : STATE_IDLE); }
void set_state(ConnectionState state) { state_ = state; }
+ void set_connectable(bool connectable) { connectable_ = connectable; }
void set_active(bool is_active) { is_active_ = is_active; }
friend class NetworkLibraryImpl;
diff --git a/chrome/browser/chromeos/dom_ui/internet_options_handler.cc b/chrome/browser/chromeos/dom_ui/internet_options_handler.cc
index b0eb4d3..207cb879 100644
--- a/chrome/browser/chromeos/dom_ui/internet_options_handler.cc
+++ b/chrome/browser/chromeos/dom_ui/internet_options_handler.cc
@@ -804,13 +804,15 @@ void InternetOptionsHandler::RefreshCellularPlanCallback(
ListValue* InternetOptionsHandler::GetNetwork(const std::string& service_path,
const SkBitmap& icon, const std::string& name, bool connecting,
- bool connected, chromeos::ConnectionType connection_type, bool remembered,
- chromeos::ActivationState activation_state, bool restricted_ip) {
-
+ bool connected, bool connectable, chromeos::ConnectionType connection_type,
+ bool remembered, chromeos::ActivationState activation_state,
+ bool restricted_ip) {
ListValue* network = new ListValue();
int connection_state = IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED;
- if (connecting)
+ if (!connectable)
+ connection_state = IDS_STATUSBAR_NETWORK_DEVICE_NOT_CONFIGURED;
+ else if (connecting)
connection_state = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING;
else if (connected)
connection_state = IDS_STATUSBAR_NETWORK_DEVICE_CONNECTED;
@@ -847,6 +849,8 @@ ListValue* InternetOptionsHandler::GetNetwork(const std::string& service_path,
static_cast<int>(activation_state)));
// restricted
network->Append(Value::CreateBooleanValue(restricted_ip));
+ // connectable
+ network->Append(Value::CreateBooleanValue(connectable));
return network;
}
@@ -873,6 +877,7 @@ ListValue* InternetOptionsHandler::GetWiredList() {
l10n_util::GetStringUTF8(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET),
ethernet_network->connecting(),
ethernet_network->connected(),
+ ethernet_network->connectable(),
chromeos::TYPE_ETHERNET,
false,
chromeos::ACTIVATION_STATE_UNKNOWN,
@@ -903,6 +908,7 @@ ListValue* InternetOptionsHandler::GetWirelessList() {
(*it)->name(),
(*it)->connecting(),
(*it)->connected(),
+ (*it)->connectable(),
chromeos::TYPE_WIFI,
false,
chromeos::ACTIVATION_STATE_UNKNOWN,
@@ -923,6 +929,7 @@ ListValue* InternetOptionsHandler::GetWirelessList() {
(*it)->name(),
(*it)->connecting(),
(*it)->connected(),
+ (*it)->connectable(),
chromeos::TYPE_CELLULAR,
false,
(*it)->activation_state(),
@@ -937,6 +944,7 @@ ListValue* InternetOptionsHandler::GetWirelessList() {
l10n_util::GetStringUTF8(IDS_OPTIONS_SETTINGS_OTHER_NETWORKS),
false,
false,
+ true,
chromeos::TYPE_WIFI,
false,
chromeos::ACTIVATION_STATE_UNKNOWN,
@@ -967,6 +975,7 @@ ListValue* InternetOptionsHandler::GetRememberedList() {
(*it)->name(),
(*it)->connecting(),
(*it)->connected(),
+ true,
chromeos::TYPE_WIFI,
true,
chromeos::ACTIVATION_STATE_UNKNOWN,
diff --git a/chrome/browser/chromeos/dom_ui/internet_options_handler.h b/chrome/browser/chromeos/dom_ui/internet_options_handler.h
index 74e5ddc..5456391 100644
--- a/chrome/browser/chromeos/dom_ui/internet_options_handler.h
+++ b/chrome/browser/chromeos/dom_ui/internet_options_handler.h
@@ -73,8 +73,9 @@ class InternetOptionsHandler
// Creates the map of a network
ListValue* GetNetwork(const std::string& service_path, const SkBitmap& icon,
const std::string& name, bool connecting, bool connected,
- chromeos::ConnectionType connection_type, bool remembered,
- chromeos::ActivationState activation_state, bool restricted_ip);
+ bool connectable, chromeos::ConnectionType connection_type,
+ bool remembered, chromeos::ActivationState activation_state,
+ bool restricted_ip);
// Creates the map of wired networks
ListValue* GetWiredList();
diff --git a/chrome/browser/chromeos/status/network_menu.cc b/chrome/browser/chromeos/status/network_menu.cc
index 7cf5532..f87817e 100644
--- a/chrome/browser/chromeos/status/network_menu.cc
+++ b/chrome/browser/chromeos/status/network_menu.cc
@@ -568,6 +568,8 @@ void NetworkMenu::InitMenuItems() {
SkBitmap badge = wifi_networks[i]->encrypted() ?
*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE) : SkBitmap();
int flag = FLAG_WIFI;
+ if (!wifi_networks[i]->connectable())
+ flag |= FLAG_DISABLED;
if (active_wifi
&& wifi_networks[i]->service_path() == active_wifi->service_path())
flag |= FLAG_ASSOCIATED;
@@ -626,6 +628,8 @@ void NetworkMenu::InitMenuItems() {
true);
SkBitmap badge = BadgeForNetworkTechnology(cell_networks[i]);
int flag = FLAG_CELLULAR;
+ if (!cell_networks[i]->connectable())
+ flag |= FLAG_DISABLED;
bool isActive = active_cellular &&
cell_networks[i]->service_path() == active_cellular->service_path() &&
(cell_networks[i]->connecting() || cell_networks[i]->connected());
diff --git a/chrome/browser/resources/options/chromeos_internet_network_element.js b/chrome/browser/resources/options/chromeos_internet_network_element.js
index 9ff79e6..175b7b0 100644
--- a/chrome/browser/resources/options/chromeos_internet_network_element.js
+++ b/chrome/browser/resources/options/chromeos_internet_network_element.js
@@ -57,7 +57,7 @@ cr.define('options.internet', function() {
while (item && !item.data) {
item = item.parentNode;
}
- if (item.connecting)
+ if (item.connecting || !item.connectable)
return;
if (item) {
@@ -106,7 +106,8 @@ cr.define('options.internet', function() {
iconURL: network[6],
remembered: network[7],
activation_state: network[8],
- restricted: network[9]
+ restricted: network[9],
+ connectable: network[10]
};
NetworkItem.decorate(el);
return el;
@@ -148,6 +149,7 @@ cr.define('options.internet', function() {
decorate: function() {
this.className = 'network-item';
this.connected = this.data.connected;
+ this.connectable = this.data.connectable;
this.other = this.data.servicePath == '?';
this.id = this.data.servicePath;
// textDiv holds icon, name and status text.
@@ -471,6 +473,12 @@ cr.define('options.internet', function() {
*/
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 {
NetworkElement: NetworkElement
};
diff --git a/chrome/browser/resources/options/chromeos_internet_options_page.css b/chrome/browser/resources/options/chromeos_internet_options_page.css
index 432eff6..a5c89b0 100644
--- a/chrome/browser/resources/options/chromeos_internet_options_page.css
+++ b/chrome/browser/resources/options/chromeos_internet_options_page.css
@@ -47,7 +47,7 @@
height: 35px;
}
-.network-item:hover {
+.network-item[connectable]:hover {
border-color: hsl(214, 91%, 85%);
background-color: hsl(214, 91%, 97%);
}