diff options
author | stevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-01 21:02:09 +0000 |
---|---|---|
committer | stevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-01 21:02:09 +0000 |
commit | 042c829ef76187dfdcd09a19b531fa2cbfa2f961 (patch) | |
tree | a67c54fc055237d81f28ec7984572cba33823a24 | |
parent | 1d68d35c7c4cc22a16d4fb790161b0d65a820890 (diff) | |
download | chromium_src-042c829ef76187dfdcd09a19b531fa2cbfa2f961.zip chromium_src-042c829ef76187dfdcd09a19b531fa2cbfa2f961.tar.gz chromium_src-042c829ef76187dfdcd09a19b531fa2cbfa2f961.tar.bz2 |
Merge 91149 - Allow non TLS 802.1x networks to be connectable
BUG=chromium-os:16284
TEST=See issue
Review URL: http://codereview.chromium.org/7273057
TBR=stevenjb@google.com
Review URL: http://codereview.chromium.org/7302008
git-svn-id: svn://svn.chromium.org/chrome/branches/782/src@91362 0039d316-1c4b-4281-b951-d872f2087c98
5 files changed, 32 insertions, 14 deletions
diff --git a/chrome/browser/chromeos/cros/mock_network_library.h b/chrome/browser/chromeos/cros/mock_network_library.h index 922e2c5..579ac11 100644 --- a/chrome/browser/chromeos/cros/mock_network_library.h +++ b/chrome/browser/chromeos/cros/mock_network_library.h @@ -92,8 +92,9 @@ class MockNetworkLibrary : public NetworkLibrary { MOCK_METHOD1(SetCellularDataRoamingAllowed, void(bool)); MOCK_METHOD0(RequestNetworkScan, void(void)); - MOCK_METHOD0(HasMultipleProfiles, bool(void)); + MOCK_CONST_METHOD1(HasProfileType, bool(NetworkProfileType)); MOCK_METHOD1(GetWifiAccessPoints, bool(WifiAccessPointVector*)); + MOCK_CONST_METHOD1(CanConnectToNetwork, bool(const Network*)); MOCK_METHOD1(ConnectToWifiNetwork, void(WifiNetwork*)); MOCK_METHOD1(ConnectToWifiNetwork, void(const std::string&)); MOCK_METHOD3(ConnectToWifiNetwork, void(const std::string&, diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc index 65e84fd..4952b04 100644 --- a/chrome/browser/chromeos/cros/network_library.cc +++ b/chrome/browser/chromeos/cros/network_library.cc @@ -2871,8 +2871,13 @@ class NetworkLibraryImpl : public NetworkLibrary { } } - virtual bool HasMultipleProfiles() { - return profile_list_.size() > 1; + virtual bool HasProfileType(NetworkProfileType type) const { + for (NetworkProfileList::const_iterator iter = profile_list_.begin(); + iter != profile_list_.end(); ++iter) { + if ((*iter).type == type) + return true; + } + return false; } virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) { @@ -2977,6 +2982,12 @@ class NetworkLibraryImpl : public NetworkLibrary { NetworkConnectCallback, this); } + virtual bool CanConnectToNetwork(const Network* network) const { + if (!HasProfileType(PROFILE_USER) && network->RequiresUserProfile()) + return false; + return true; + } + virtual void ConnectToWifiNetwork(WifiNetwork* wifi) { // This will happen if a network resets, gets out of range or is forgotten. if (wifi->user_passphrase_ != wifi->passphrase_ || @@ -5110,11 +5121,14 @@ class NetworkLibraryStubImpl : public NetworkLibrary { virtual void SetCellularDataRoamingAllowed(bool new_value) {} virtual void RequestNetworkScan() {} - virtual bool HasMultipleProfiles() { return false; } + virtual bool HasProfileType(NetworkProfileType type) const { return false; } virtual bool GetWifiAccessPoints(WifiAccessPointVector* result) { return false; } + virtual bool CanConnectToNetwork(const Network* network) const { + return false; + } virtual void ConnectToWifiNetwork(WifiNetwork* network) {} virtual void ConnectToWifiNetwork(const std::string& service_path) {} virtual void ConnectToWifiNetwork(const std::string& ssid, diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h index 3efd5db..39c6acd 100644 --- a/chrome/browser/chromeos/cros/network_library.h +++ b/chrome/browser/chromeos/cros/network_library.h @@ -1097,8 +1097,8 @@ class NetworkLibrary { // Request a scan for new wifi networks. virtual void RequestNetworkScan() = 0; - // Return true if more than one Profile exists. - virtual bool HasMultipleProfiles() = 0; + // Return true if a profile matching |type| is loaded. + virtual bool HasProfileType(NetworkProfileType type) const = 0; // Reads out the results of the last wifi scan. These results are not // pre-cached in the library, so the call may block whilst the results are @@ -1110,6 +1110,10 @@ class NetworkLibrary { // TODO(joth): Add GetCellTowers to retrieve a CellTowerVector. + // Returns false if there is no way to connect to this network, even with + // user input (e.g. it requires a user profile but none is available). + virtual bool CanConnectToNetwork(const Network* network) const = 0; + // Connect to the specified wireless network. virtual void ConnectToWifiNetwork(WifiNetwork* network) = 0; diff --git a/chrome/browser/chromeos/status/network_menu.cc b/chrome/browser/chromeos/status/network_menu.cc index 5f66e53..192ee57 100644 --- a/chrome/browser/chromeos/status/network_menu.cc +++ b/chrome/browser/chromeos/status/network_menu.cc @@ -623,9 +623,9 @@ void MainMenuModel::InitMenuItems(bool is_browser_mode, const SkBitmap* badge = wifi_networks[i]->encrypted() ? rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE) : NULL; int flag = FLAG_WIFI; - // If a network is not connectable from login/oobe, we disable it. - // We do not allow configuring a network (e.g. 802.1x) from login/oobe. - if (!owner_->IsBrowserMode() && !wifi_networks[i]->connectable()) + // If a network is not connectable (e.g. it requires certificates and + // the user is not logged in), we disable it. + if (!cros->CanConnectToNetwork(wifi_networks[i])) flag |= FLAG_DISABLED; if (active_wifi && wifi_networks[i]->service_path() == active_wifi->service_path()) @@ -979,7 +979,7 @@ void VPNMenuModel::InitMenuItems(bool is_browser_mode, } int flag = FLAG_VPN; - if (!vpn->connectable()) + if (!cros->CanConnectToNetwork(vpn)) flag |= FLAG_DISABLED; if (active_vpn && vpn->service_path() == active_vpn->service_path()) flag |= FLAG_ASSOCIATED; diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc index 2f8a293..7a7c8bd 100644 --- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc +++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc @@ -599,7 +599,7 @@ void InternetOptionsHandler::SetSharedCallback(const ListValue* args) { if (!network) return; - if (cros_->HasMultipleProfiles()) { + if (cros_->HasProfileType(chromeos::PROFILE_USER)) { bool shared = shared_str == "true"; if (network->profile_type() == chromeos::PROFILE_SHARED && !shared) cros_->SetNetworkProfile(service_path, chromeos::PROFILE_USER); @@ -721,7 +721,8 @@ void InternetOptionsHandler::PopulateWifiDetails( bool shared = wifi->profile_type() == chromeos::PROFILE_SHARED; dictionary->SetBoolean("shared", shared); bool shareable = - cros_->HasMultipleProfiles() && !wifi->RequiresUserProfile(); + cros_->HasProfileType(chromeos::PROFILE_USER) && + !wifi->RequiresUserProfile(); dictionary->SetBoolean("shareable", shareable); } @@ -1156,7 +1157,6 @@ ListValue* InternetOptionsHandler::GetRememberedList() { // Set in_active_profile. bool shared = - cros_->HasMultipleProfiles() && remembered->profile_type() == chromeos::PROFILE_SHARED; list->Append(GetNetwork( remembered->service_path(), @@ -1181,7 +1181,6 @@ ListValue* InternetOptionsHandler::GetRememberedList() { // Set in_active_profile. bool shared = - cros_->HasMultipleProfiles() && remembered->profile_type() == chromeos::PROFILE_SHARED; list->Append(GetNetwork( remembered->service_path(), |