diff options
author | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-17 01:28:14 +0000 |
---|---|---|
committer | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-17 01:28:14 +0000 |
commit | ca9f6706f4e732bcc399d03d9f777be7a81c577e (patch) | |
tree | 458aa2f60f330e7e83a9fa14ffe7b54abe4396c0 /chrome | |
parent | 59565102cf40aa74f8564f9368ce4cf27c335de2 (diff) | |
download | chromium_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')
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%); } |