| Index: chrome/browser/chromeos/options/wifi_config_view.cc
|
| diff --git a/chrome/browser/chromeos/options/wifi_config_view.cc b/chrome/browser/chromeos/options/wifi_config_view.cc
|
| index 211f728cecf50854912fd1ee4304a82a2662f3d4..e7ee3301f5ef7fe2b501b836da0ed9c65ccf7541 100644
|
| --- a/chrome/browser/chromeos/options/wifi_config_view.cc
|
| +++ b/chrome/browser/chromeos/options/wifi_config_view.cc
|
| @@ -4,19 +4,28 @@
|
|
|
| #include "chrome/browser/chromeos/options/wifi_config_view.h"
|
|
|
| +#include "ash/system/chromeos/network/network_connect.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/chromeos/cros/network_library.h"
|
| #include "chrome/browser/chromeos/enrollment_dialog_view.h"
|
| +#include "chrome/browser/chromeos/options/network_connect.h"
|
| #include "chrome/browser/profiles/profile_manager.h"
|
| #include "chromeos/login/login_state.h"
|
| +#include "chromeos/network/network_configuration_handler.h"
|
| +#include "chromeos/network/network_event_log.h"
|
| +#include "chromeos/network/network_handler.h"
|
| +#include "chromeos/network/network_profile.h"
|
| +#include "chromeos/network/network_profile_handler.h"
|
| +#include "chromeos/network/network_state.h"
|
| +#include "chromeos/network/network_state_handler.h"
|
| #include "chromeos/network/network_ui_data.h"
|
| #include "chromeos/network/onc/onc_constants.h"
|
| #include "grit/chromium_strings.h"
|
| #include "grit/generated_resources.h"
|
| #include "grit/locale_settings.h"
|
| #include "grit/theme_resources.h"
|
| +#include "third_party/cros_system_api/dbus/service_constants.h"
|
| #include "ui/base/events/event.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| @@ -34,11 +43,6 @@ namespace chromeos {
|
|
|
| namespace {
|
|
|
| -// Returns true if network is known to require 802.1x.
|
| -bool Is8021x(const WifiNetwork* wifi) {
|
| - return wifi && wifi->encrypted() && wifi->encryption() == SECURITY_8021X;
|
| -}
|
| -
|
| // Combobox that supports a preferred width. Used by Server CA combobox
|
| // because the strings inside it are too wide.
|
| class ComboboxWithWidth : public views::Combobox {
|
| @@ -85,6 +89,12 @@ enum Phase2AuthComboboxIndex {
|
| PHASE_2_AUTH_INDEX_COUNT = 6
|
| };
|
|
|
| +void ShillError(const std::string& function,
|
| + const std::string& error_name,
|
| + scoped_ptr<base::DictionaryValue> error_data) {
|
| + NET_LOG_ERROR("Shill Error from WifiConfigView: " + error_name, function);
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace internal {
|
| @@ -322,8 +332,10 @@ string16 UserCertComboboxModel::GetItemAt(int index) {
|
|
|
| } // namespace internal
|
|
|
| -WifiConfigView::WifiConfigView(NetworkConfigView* parent, WifiNetwork* wifi)
|
| - : ChildNetworkConfigView(parent, wifi),
|
| +WifiConfigView::WifiConfigView(NetworkConfigView* parent,
|
| + const std::string& service_path,
|
| + bool show_8021x)
|
| + : ChildNetworkConfigView(parent, service_path),
|
| ssid_textfield_(NULL),
|
| eap_method_combobox_(NULL),
|
| phase_2_auth_label_(NULL),
|
| @@ -344,32 +356,7 @@ WifiConfigView::WifiConfigView(NetworkConfigView* parent, WifiNetwork* wifi)
|
| passphrase_textfield_(NULL),
|
| passphrase_visible_button_(NULL),
|
| error_label_(NULL) {
|
| - Init(wifi, Is8021x(wifi));
|
| -}
|
| -
|
| -WifiConfigView::WifiConfigView(NetworkConfigView* parent, bool show_8021x)
|
| - : ChildNetworkConfigView(parent),
|
| - ssid_textfield_(NULL),
|
| - eap_method_combobox_(NULL),
|
| - phase_2_auth_label_(NULL),
|
| - phase_2_auth_combobox_(NULL),
|
| - user_cert_label_(NULL),
|
| - user_cert_combobox_(NULL),
|
| - server_ca_cert_label_(NULL),
|
| - server_ca_cert_combobox_(NULL),
|
| - identity_label_(NULL),
|
| - identity_textfield_(NULL),
|
| - identity_anonymous_label_(NULL),
|
| - identity_anonymous_textfield_(NULL),
|
| - save_credentials_checkbox_(NULL),
|
| - share_network_checkbox_(NULL),
|
| - shared_network_label_(NULL),
|
| - security_combobox_(NULL),
|
| - passphrase_label_(NULL),
|
| - passphrase_textfield_(NULL),
|
| - passphrase_visible_button_(NULL),
|
| - error_label_(NULL) {
|
| - Init(NULL, show_8021x);
|
| + Init(service_path, show_8021x);
|
| }
|
|
|
| WifiConfigView::~WifiConfigView() {
|
| @@ -552,47 +539,29 @@ void WifiConfigView::RefreshShareCheckbox() {
|
| }
|
|
|
| void WifiConfigView::UpdateErrorLabel() {
|
| - std::string error_msg;
|
| + base::string16 error_msg;
|
| if (UserCertRequired() && CertLibrary::Get()->CertificatesLoaded()) {
|
| if (!HaveUserCerts()) {
|
| if (!LoginState::Get()->IsUserLoggedIn()) {
|
| - error_msg = l10n_util::GetStringUTF8(
|
| + error_msg = l10n_util::GetStringUTF16(
|
| IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_LOGIN_FOR_USER_CERT);
|
| } else {
|
| - error_msg = l10n_util::GetStringUTF8(
|
| + error_msg = l10n_util::GetStringUTF16(
|
| IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PLEASE_INSTALL_USER_CERT);
|
| }
|
| } else if (!IsUserCertValid()) {
|
| - error_msg = l10n_util::GetStringUTF8(
|
| + error_msg = l10n_util::GetStringUTF16(
|
| IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_REQUIRE_HARDWARE_BACKED);
|
| }
|
| }
|
| if (error_msg.empty() && !service_path_.empty()) {
|
| - NetworkLibrary* cros = NetworkLibrary::Get();
|
| - const WifiNetwork* wifi = cros->FindWifiNetworkByPath(service_path_);
|
| - if (wifi && wifi->failed()) {
|
| - bool passphrase_empty = wifi->GetPassphrase().empty();
|
| - switch (wifi->error()) {
|
| - case ERROR_BAD_PASSPHRASE:
|
| - if (!passphrase_empty) {
|
| - error_msg = l10n_util::GetStringUTF8(
|
| - IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_BAD_PASSPHRASE);
|
| - }
|
| - break;
|
| - case ERROR_BAD_WEPKEY:
|
| - if (!passphrase_empty) {
|
| - error_msg = l10n_util::GetStringUTF8(
|
| - IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_BAD_WEPKEY);
|
| - }
|
| - break;
|
| - default:
|
| - error_msg = wifi->GetErrorString();
|
| - break;
|
| - }
|
| - }
|
| + const NetworkState* wifi = NetworkHandler::Get()->network_state_handler()->
|
| + GetNetworkState(service_path_);
|
| + if (wifi && wifi->connection_state() == flimflam::kStateFailure)
|
| + error_msg = ash::network_connect::ErrorString(wifi->error());
|
| }
|
| if (!error_msg.empty()) {
|
| - error_label_->SetText(UTF8ToUTF16(error_msg));
|
| + error_label_->SetText(error_msg);
|
| error_label_->SetVisible(true);
|
| } else {
|
| error_label_->SetVisible(false);
|
| @@ -651,83 +620,91 @@ void WifiConfigView::OnCertificatesLoaded(bool initial_load) {
|
| }
|
|
|
| bool WifiConfigView::Login() {
|
| - NetworkLibrary* cros = NetworkLibrary::Get();
|
| if (service_path_.empty()) {
|
| - const bool share_default = true; // share networks by default
|
| + // Set configuration properties.
|
| + base::DictionaryValue properties;
|
| + properties.SetStringWithoutPathExpansion(
|
| + flimflam::kTypeProperty, flimflam::kTypeWifi);
|
| + properties.SetStringWithoutPathExpansion(
|
| + flimflam::kSSIDProperty, GetSsid());
|
| + properties.SetStringWithoutPathExpansion(
|
| + flimflam::kModeProperty, flimflam::kModeManaged);
|
| + properties.SetBooleanWithoutPathExpansion(
|
| + flimflam::kSaveCredentialsProperty, GetSaveCredentials());
|
| + std::string security = flimflam::kSecurityNone;
|
| if (!eap_method_combobox_) {
|
| // Hidden ordinary Wi-Fi connection.
|
| - ConnectionSecurity security = SECURITY_UNKNOWN;
|
| switch (security_combobox_->selected_index()) {
|
| case SECURITY_INDEX_NONE:
|
| - security = SECURITY_NONE;
|
| + security = flimflam::kSecurityNone;
|
| break;
|
| case SECURITY_INDEX_WEP:
|
| - security = SECURITY_WEP;
|
| + security = flimflam::kSecurityWep;
|
| break;
|
| case SECURITY_INDEX_PSK:
|
| - security = SECURITY_PSK;
|
| + security = flimflam::kSecurityPsk;
|
| break;
|
| }
|
| - cros->ConnectToUnconfiguredWifiNetwork(
|
| - GetSsid(),
|
| - security,
|
| - GetPassphrase(),
|
| - NULL,
|
| - GetSaveCredentials(),
|
| - GetShareNetwork(share_default));
|
| + std::string passphrase = GetPassphrase();
|
| + if (!passphrase.empty()) {
|
| + properties.SetStringWithoutPathExpansion(
|
| + flimflam::kPassphraseProperty, GetPassphrase());
|
| + }
|
| } else {
|
| // Hidden 802.1X EAP Wi-Fi connection.
|
| - chromeos::NetworkLibrary::EAPConfigData config_data;
|
| - config_data.method = GetEapMethod();
|
| - config_data.auth = GetEapPhase2Auth();
|
| - config_data.server_ca_cert_pem = GetEapServerCaCertPEM();
|
| - config_data.use_system_cas = GetEapUseSystemCas();
|
| - config_data.client_cert_pkcs11_id = GetEapClientCertPkcs11Id();
|
| - config_data.identity = GetEapIdentity();
|
| - config_data.anonymous_identity = GetEapAnonymousIdentity();
|
| - cros->ConnectToUnconfiguredWifiNetwork(
|
| - GetSsid(),
|
| - SECURITY_8021X,
|
| - GetPassphrase(),
|
| - &config_data,
|
| - GetSaveCredentials(),
|
| - GetShareNetwork(share_default));
|
| + security = flimflam::kSecurity8021x;
|
| + SetEapProperties(&properties);
|
| }
|
| + properties.SetStringWithoutPathExpansion(
|
| + flimflam::kSecurityProperty, security);
|
| +
|
| + // Configure and connect to network.
|
| + bool shared = GetShareNetwork(true /* share networks by default */);
|
| + ash::network_connect::CreateConfigurationAndConnect(&properties, shared);
|
| } else {
|
| - WifiNetwork* wifi = cros->FindWifiNetworkByPath(service_path_);
|
| + const NetworkState* wifi = NetworkHandler::Get()->network_state_handler()->
|
| + GetNetworkState(service_path_);
|
| if (!wifi) {
|
| // Shill no longer knows about this wifi network (edge case).
|
| - // TODO(stevenjb): Add a notification (chromium-os13225).
|
| - LOG(WARNING) << "Wifi network: " << service_path_ << " no longer exists.";
|
| - return true;
|
| + // TODO(stevenjb): Add notification for this.
|
| + NET_LOG_ERROR("Network not found", service_path_);
|
| + return true; // Close dialog
|
| }
|
| + base::DictionaryValue properties;
|
| if (eap_method_combobox_) {
|
| // Visible 802.1X EAP Wi-Fi connection.
|
| - EAPMethod method = GetEapMethod();
|
| - DCHECK(method != EAP_METHOD_UNKNOWN);
|
| - wifi->SetEAPMethod(method);
|
| - wifi->SetEAPPhase2Auth(GetEapPhase2Auth());
|
| - wifi->SetEAPServerCaCertPEM(GetEapServerCaCertPEM());
|
| - wifi->SetEAPUseSystemCAs(GetEapUseSystemCas());
|
| - wifi->SetEAPClientCertPkcs11Id(GetEapClientCertPkcs11Id());
|
| - wifi->SetEAPIdentity(GetEapIdentity());
|
| - wifi->SetEAPAnonymousIdentity(GetEapAnonymousIdentity());
|
| - wifi->SetEAPPassphrase(GetPassphrase());
|
| - wifi->SetSaveCredentials(GetSaveCredentials());
|
| + SetEapProperties(&properties);
|
| + properties.SetBooleanWithoutPathExpansion(
|
| + flimflam::kSaveCredentialsProperty, GetSaveCredentials());
|
| } else {
|
| // Visible ordinary Wi-Fi connection.
|
| const std::string passphrase = GetPassphrase();
|
| - if (passphrase != wifi->passphrase())
|
| - wifi->SetPassphrase(passphrase);
|
| + if (!passphrase.empty()) {
|
| + properties.SetStringWithoutPathExpansion(
|
| + flimflam::kPassphraseProperty, passphrase);
|
| + }
|
| + }
|
| + bool wifi_shared = !wifi->IsPrivate();
|
| + bool share_network = GetShareNetwork(wifi_shared);
|
| + if (share_network != wifi_shared) {
|
| + std::string profile_path;
|
| + if (share_network) {
|
| + profile_path = NetworkProfileHandler::kSharedProfilePath;
|
| + } else {
|
| + const NetworkProfile* profile =
|
| + NetworkHandler::Get()->network_profile_handler()->
|
| + GetDefaultUserProfile();
|
| + if (profile)
|
| + profile_path = profile->path;
|
| + else
|
| + NET_LOG_ERROR("Unable to set user profile", service_path_);
|
| + }
|
| + if (!profile_path.empty()) {
|
| + properties.SetStringWithoutPathExpansion(
|
| + flimflam::kProfileProperty, profile_path);
|
| + }
|
| }
|
| - bool share_default = (wifi->profile_type() != PROFILE_USER);
|
| - wifi->SetEnrollmentDelegate(
|
| - CreateEnrollmentDelegate(GetWidget()->GetNativeWindow(),
|
| - wifi->name(),
|
| - ProfileManager::GetLastUsedProfile()));
|
| - cros->ConnectToWifiNetwork(wifi, GetShareNetwork(share_default));
|
| - // Connection failures are responsible for updating the UI, including
|
| - // reopening dialogs.
|
| + ash::network_connect::ConfigureNetworkAndConnect(service_path_, properties);
|
| }
|
| return true; // dialog will be closed
|
| }
|
| @@ -760,41 +737,42 @@ bool WifiConfigView::GetShareNetwork(bool share_default) const {
|
| return share_network_checkbox_->checked();
|
| }
|
|
|
| -EAPMethod WifiConfigView::GetEapMethod() const {
|
| +std::string WifiConfigView::GetEapMethod() const {
|
| DCHECK(eap_method_combobox_);
|
| switch (eap_method_combobox_->selected_index()) {
|
| - case EAP_METHOD_INDEX_NONE:
|
| - return EAP_METHOD_UNKNOWN;
|
| case EAP_METHOD_INDEX_PEAP:
|
| - return EAP_METHOD_PEAP;
|
| + return flimflam::kEapMethodPEAP;
|
| case EAP_METHOD_INDEX_TLS:
|
| - return EAP_METHOD_TLS;
|
| + return flimflam::kEapMethodTLS;
|
| case EAP_METHOD_INDEX_TTLS:
|
| - return EAP_METHOD_TTLS;
|
| + return flimflam::kEapMethodTTLS;
|
| case EAP_METHOD_INDEX_LEAP:
|
| - return EAP_METHOD_LEAP;
|
| + return flimflam::kEapMethodLEAP;
|
| + case EAP_METHOD_INDEX_NONE:
|
| default:
|
| - return EAP_METHOD_UNKNOWN;
|
| + return "";
|
| }
|
| }
|
|
|
| -EAPPhase2Auth WifiConfigView::GetEapPhase2Auth() const {
|
| +std::string WifiConfigView::GetEapPhase2Auth() const {
|
| DCHECK(phase_2_auth_combobox_);
|
| + bool is_peap = (GetEapMethod() == flimflam::kEapMethodPEAP);
|
| switch (phase_2_auth_combobox_->selected_index()) {
|
| - case PHASE_2_AUTH_INDEX_AUTO:
|
| - return EAP_PHASE_2_AUTH_AUTO;
|
| case PHASE_2_AUTH_INDEX_MD5:
|
| - return EAP_PHASE_2_AUTH_MD5;
|
| + return is_peap ? flimflam::kEapPhase2AuthPEAPMD5
|
| + : flimflam::kEapPhase2AuthTTLSMD5;
|
| case PHASE_2_AUTH_INDEX_MSCHAPV2:
|
| - return EAP_PHASE_2_AUTH_MSCHAPV2;
|
| + return is_peap ? flimflam::kEapPhase2AuthPEAPMSCHAPV2
|
| + : flimflam::kEapPhase2AuthTTLSMSCHAPV2;
|
| case PHASE_2_AUTH_INDEX_MSCHAP:
|
| - return EAP_PHASE_2_AUTH_MSCHAP;
|
| + return flimflam::kEapPhase2AuthTTLSMSCHAP;
|
| case PHASE_2_AUTH_INDEX_PAP:
|
| - return EAP_PHASE_2_AUTH_PAP;
|
| + return flimflam::kEapPhase2AuthTTLSPAP;
|
| case PHASE_2_AUTH_INDEX_CHAP:
|
| - return EAP_PHASE_2_AUTH_CHAP;
|
| + return flimflam::kEapPhase2AuthTTLSCHAP;
|
| + case PHASE_2_AUTH_INDEX_AUTO:
|
| default:
|
| - return EAP_PHASE_2_AUTH_AUTO;
|
| + return "";
|
| }
|
| }
|
|
|
| @@ -842,6 +820,34 @@ std::string WifiConfigView::GetEapAnonymousIdentity() const {
|
| return UTF16ToUTF8(identity_anonymous_textfield_->text());
|
| }
|
|
|
| +void WifiConfigView::SetEapProperties(base::DictionaryValue* properties) {
|
| + properties->SetStringWithoutPathExpansion(
|
| + flimflam::kEapIdentityProperty, GetEapIdentity());
|
| + properties->SetStringWithoutPathExpansion(
|
| + flimflam::kEapMethodProperty, GetEapMethod());
|
| + properties->SetStringWithoutPathExpansion(
|
| + flimflam::kEapPhase2AuthProperty, GetEapPhase2Auth());
|
| + properties->SetStringWithoutPathExpansion(
|
| + flimflam::kEapAnonymousIdentityProperty, GetEapAnonymousIdentity());
|
| +
|
| + // shill requires both CertID and KeyID for TLS connections, despite
|
| + // the fact that by convention they are the same ID.
|
| + properties->SetStringWithoutPathExpansion(
|
| + flimflam::kEapCertIdProperty, GetEapClientCertPkcs11Id());
|
| + properties->SetStringWithoutPathExpansion(
|
| + flimflam::kEapKeyIdProperty, GetEapClientCertPkcs11Id());
|
| +
|
| + properties->SetBooleanWithoutPathExpansion(
|
| + flimflam::kEapUseSystemCasProperty, GetEapUseSystemCas());
|
| + properties->SetStringWithoutPathExpansion(
|
| + flimflam::kEapPasswordProperty, GetPassphrase());
|
| +
|
| + base::ListValue* pem_list = new base::ListValue;
|
| + pem_list->AppendString(GetEapServerCaCertPEM());
|
| + properties->SetWithoutPathExpansion(
|
| + shill::kEapCaCertPemProperty, pem_list);
|
| +}
|
| +
|
| void WifiConfigView::Cancel() {
|
| }
|
|
|
| @@ -851,8 +857,12 @@ void WifiConfigView::Cancel() {
|
| // If we are creating the "Join other network..." dialog, we will allow user
|
| // to enter the data. And if they select the 802.1x encryption, we will show
|
| // the 802.1x fields.
|
| -void WifiConfigView::Init(WifiNetwork* wifi, bool show_8021x) {
|
| +void WifiConfigView::Init(const std::string& service_path, bool show_8021x) {
|
| + const NetworkState* wifi = NetworkHandler::Get()->network_state_handler()->
|
| + GetNetworkState(service_path);
|
| if (wifi) {
|
| + if (wifi->security() == flimflam::kSecurity8021x)
|
| + show_8021x = true;
|
| ParseWiFiEAPUIProperty(&eap_method_ui_data_, wifi, onc::eap::kOuter);
|
| ParseWiFiEAPUIProperty(&phase_2_auth_ui_data_, wifi, onc::eap::kInner);
|
| ParseWiFiEAPUIProperty(&user_cert_ui_data_, wifi, onc::eap::kClientCertRef);
|
| @@ -1007,8 +1017,6 @@ void WifiConfigView::Init(WifiNetwork* wifi, bool show_8021x) {
|
| views::Textfield::STYLE_DEFAULT);
|
| identity_textfield_->SetAccessibleName(identity_label_text);
|
| identity_textfield_->SetController(this);
|
| - if (wifi && !wifi->identity().empty())
|
| - identity_textfield_->SetText(UTF8ToUTF16(wifi->identity()));
|
| identity_textfield_->SetEnabled(identity_ui_data_.IsEditable());
|
| layout->AddView(identity_textfield_);
|
| layout->AddView(new ControlledSettingIndicatorView(identity_ui_data_));
|
| @@ -1024,8 +1032,6 @@ void WifiConfigView::Init(WifiNetwork* wifi, bool show_8021x) {
|
| passphrase_textfield_ = new views::Textfield(
|
| views::Textfield::STYLE_OBSCURED);
|
| passphrase_textfield_->SetController(this);
|
| - if (wifi && !wifi->GetPassphrase().empty())
|
| - passphrase_textfield_->SetText(UTF8ToUTF16(wifi->GetPassphrase()));
|
| // Disable passphrase input initially for other network.
|
| passphrase_label_->SetEnabled(wifi != NULL);
|
| passphrase_textfield_->SetEnabled(wifi && passphrase_ui_data_.IsEditable());
|
| @@ -1102,16 +1108,15 @@ void WifiConfigView::Init(WifiNetwork* wifi, bool show_8021x) {
|
| }
|
|
|
| // Share network
|
| - if (!wifi ||
|
| - (wifi->profile_type() == PROFILE_NONE &&
|
| - wifi->IsPassphraseRequired() &&
|
| - !wifi->RequiresUserProfile())) {
|
| + if (!wifi || !wifi->IsPrivate()) {
|
| layout->StartRow(0, column_view_set_id);
|
| share_network_checkbox_ = new views::Checkbox(
|
| l10n_util::GetStringUTF16(
|
| IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SHARE_NETWORK));
|
| layout->SkipColumns(1);
|
| layout->AddView(share_network_checkbox_);
|
| + if (wifi)
|
| + share_network_checkbox_->SetChecked(true);
|
| }
|
| layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
|
|
|
| @@ -1125,112 +1130,135 @@ void WifiConfigView::Init(WifiNetwork* wifi, bool show_8021x) {
|
|
|
| // Initialize the field and checkbox values.
|
|
|
| - // After creating the fields, we set the values. Fields need to be created
|
| - // first because RefreshEapFields() will enable/disable them as appropriate.
|
| - if (show_8021x) {
|
| - EAPMethod eap_method = (wifi ? wifi->eap_method() : EAP_METHOD_UNKNOWN);
|
| - switch (eap_method) {
|
| - case EAP_METHOD_PEAP:
|
| - eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_PEAP);
|
| - break;
|
| - case EAP_METHOD_TTLS:
|
| - eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_TTLS);
|
| - break;
|
| - case EAP_METHOD_TLS:
|
| - eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_TLS);
|
| - break;
|
| - case EAP_METHOD_LEAP:
|
| - eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_LEAP);
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| + if (!wifi && show_8021x)
|
| RefreshEapFields();
|
|
|
| - // Phase 2 authentication and anonymous identity.
|
| - if (Phase2AuthActive()) {
|
| - EAPPhase2Auth eap_phase_2_auth =
|
| - (wifi ? wifi->eap_phase_2_auth() : EAP_PHASE_2_AUTH_AUTO);
|
| - switch (eap_phase_2_auth) {
|
| - case EAP_PHASE_2_AUTH_MD5:
|
| - phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_MD5);
|
| - break;
|
| - case EAP_PHASE_2_AUTH_MSCHAPV2:
|
| - phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_MSCHAPV2);
|
| - break;
|
| - case EAP_PHASE_2_AUTH_MSCHAP:
|
| - phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_MSCHAP);
|
| - break;
|
| - case EAP_PHASE_2_AUTH_PAP:
|
| - phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_PAP);
|
| - break;
|
| - case EAP_PHASE_2_AUTH_CHAP:
|
| - phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_CHAP);
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| + RefreshShareCheckbox();
|
| + UpdateErrorLabel();
|
|
|
| - const std::string& eap_anonymous_identity =
|
| - (wifi ? wifi->eap_anonymous_identity() : std::string());
|
| - identity_anonymous_textfield_->SetText(
|
| - UTF8ToUTF16(eap_anonymous_identity));
|
| - }
|
| + if (wifi) {
|
| + NetworkHandler::Get()->network_configuration_handler()->GetProperties(
|
| + service_path,
|
| + base::Bind(&WifiConfigView::InitFromProperties,
|
| + AsWeakPtr(), show_8021x),
|
| + base::Bind(&ShillError, "GetProperties"));
|
| + }
|
| +}
|
| +
|
| +void WifiConfigView::InitFromProperties(
|
| + bool show_8021x,
|
| + const std::string& service_path,
|
| + const base::DictionaryValue& properties) {
|
| + std::string passphrase;
|
| + properties.GetStringWithoutPathExpansion(
|
| + flimflam::kPassphraseProperty, &passphrase);
|
| + passphrase_textfield_->SetText(UTF8ToUTF16(passphrase));
|
| +
|
| + if (!show_8021x)
|
| + return;
|
| +
|
| + std::string identity;
|
| + properties.GetStringWithoutPathExpansion(
|
| + flimflam::kIdentityProperty, &identity);
|
| + identity_textfield_->SetText(UTF8ToUTF16(identity));
|
| +
|
| + // EAP Method
|
| + std::string eap_method;
|
| + properties.GetStringWithoutPathExpansion(
|
| + flimflam::kEapMethodProperty, &eap_method);
|
| + if (eap_method == flimflam::kEapMethodPEAP)
|
| + eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_PEAP);
|
| + else if (eap_method == flimflam::kEapMethodTTLS)
|
| + eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_TTLS);
|
| + else if (eap_method == flimflam::kEapMethodTLS)
|
| + eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_TLS);
|
| + else if (eap_method == flimflam::kEapMethodLEAP)
|
| + eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_LEAP);
|
| + RefreshEapFields();
|
| +
|
| + // Phase 2 authentication and anonymous identity.
|
| + if (Phase2AuthActive()) {
|
| + std::string eap_phase_2_auth;
|
| + properties.GetStringWithoutPathExpansion(
|
| + flimflam::kEapPhase2AuthProperty, &eap_phase_2_auth);
|
| + if (eap_phase_2_auth == flimflam::kEapPhase2AuthTTLSMD5)
|
| + phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_MD5);
|
| + else if (eap_phase_2_auth == flimflam::kEapPhase2AuthTTLSMSCHAPV2)
|
| + phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_MSCHAPV2);
|
| + else if (eap_phase_2_auth == flimflam::kEapPhase2AuthTTLSMSCHAP)
|
| + phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_MSCHAP);
|
| + else if (eap_phase_2_auth == flimflam::kEapPhase2AuthTTLSPAP)
|
| + phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_PAP);
|
| + else if (eap_phase_2_auth == flimflam::kEapPhase2AuthTTLSCHAP)
|
| + phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_CHAP);
|
| +
|
| + std::string eap_anonymous_identity;
|
| + properties.GetStringWithoutPathExpansion(
|
| + flimflam::kEapAnonymousIdentityProperty, &eap_anonymous_identity);
|
| + identity_anonymous_textfield_->SetText(UTF8ToUTF16(eap_anonymous_identity));
|
| + }
|
|
|
| - // Server CA certificate.
|
| - if (CaCertActive()) {
|
| - const std::string& ca_cert_pem =
|
| - (wifi ? wifi->eap_server_ca_cert_pem() : std::string());
|
| - if (ca_cert_pem.empty()) {
|
| - if (wifi->eap_use_system_cas()) {
|
| - // "Default".
|
| - server_ca_cert_combobox_->SetSelectedIndex(0);
|
| - } else {
|
| - // "Do not check".
|
| - server_ca_cert_combobox_->SetSelectedIndex(
|
| - server_ca_cert_combobox_->model()->GetItemCount() - 1);
|
| - }
|
| + // Server CA certificate.
|
| + if (CaCertActive()) {
|
| + std::string eap_ca_cert_pem;
|
| + properties.GetStringWithoutPathExpansion(
|
| + shill::kEapCaCertPemProperty, &eap_ca_cert_pem);
|
| + if (eap_ca_cert_pem.empty()) {
|
| + bool eap_use_system_cas = false;
|
| + properties.GetBooleanWithoutPathExpansion(
|
| + flimflam::kEapUseSystemCasProperty, &eap_use_system_cas);
|
| + if (eap_use_system_cas) {
|
| + // "Default"
|
| + server_ca_cert_combobox_->SetSelectedIndex(0);
|
| } else {
|
| - // Select the certificate if available.
|
| - int cert_index = CertLibrary::Get()->GetCertIndexByPEM(
|
| - CertLibrary::CERT_TYPE_SERVER_CA, ca_cert_pem);
|
| - if (cert_index >= 0) {
|
| - // Skip item for "Default".
|
| - server_ca_cert_combobox_->SetSelectedIndex(1 + cert_index);
|
| - }
|
| + // "Do not check".
|
| + server_ca_cert_combobox_->SetSelectedIndex(
|
| + server_ca_cert_combobox_->model()->GetItemCount() - 1);
|
| }
|
| - }
|
| -
|
| - // User certificate.
|
| - if (UserCertActive()) {
|
| - const std::string& pkcs11_id =
|
| - (wifi ? wifi->eap_client_cert_pkcs11_id() : std::string());
|
| - if (!pkcs11_id.empty()) {
|
| - int cert_index = CertLibrary::Get()->GetCertIndexByPkcs11Id(
|
| - CertLibrary::CERT_TYPE_USER, pkcs11_id);
|
| - if (cert_index >= 0) {
|
| - user_cert_combobox_->SetSelectedIndex(cert_index);
|
| - }
|
| + } else {
|
| + // Select the certificate if available.
|
| + int cert_index = CertLibrary::Get()->GetCertIndexByPEM(
|
| + CertLibrary::CERT_TYPE_SERVER_CA, eap_ca_cert_pem);
|
| + if (cert_index >= 0) {
|
| + // Skip item for "Default".
|
| + server_ca_cert_combobox_->SetSelectedIndex(1 + cert_index);
|
| }
|
| }
|
| + }
|
|
|
| - // Identity is always active.
|
| - const std::string& eap_identity =
|
| - (wifi ? wifi->eap_identity() : std::string());
|
| - identity_textfield_->SetText(UTF8ToUTF16(eap_identity));
|
| -
|
| - // Passphrase
|
| - if (PassphraseActive()) {
|
| - const std::string& eap_passphrase =
|
| - (wifi ? wifi->eap_passphrase() : std::string());
|
| - passphrase_textfield_->SetText(UTF8ToUTF16(eap_passphrase));
|
| + // User certificate.
|
| + if (UserCertActive()) {
|
| + std::string eap_cert_id;
|
| + properties.GetStringWithoutPathExpansion(
|
| + flimflam::kEapCertIdProperty, &eap_cert_id);
|
| + if (!eap_cert_id.empty()) {
|
| + int cert_index = CertLibrary::Get()->GetCertIndexByPkcs11Id(
|
| + CertLibrary::CERT_TYPE_USER, eap_cert_id);
|
| + if (cert_index >= 0)
|
| + user_cert_combobox_->SetSelectedIndex(cert_index);
|
| }
|
| + }
|
|
|
| - // Save credentials
|
| - bool save_credentials = (wifi ? wifi->save_credentials() : false);
|
| - save_credentials_checkbox_->SetChecked(save_credentials);
|
| + // Identity is always active.
|
| + std::string eap_identity;
|
| + properties.GetStringWithoutPathExpansion(
|
| + flimflam::kEapIdentityProperty, &eap_identity);
|
| + identity_textfield_->SetText(UTF8ToUTF16(eap_identity));
|
| +
|
| + // Passphrase
|
| + if (PassphraseActive()) {
|
| + std::string eap_password;
|
| + properties.GetStringWithoutPathExpansion(
|
| + flimflam::kEapPasswordProperty, &eap_password);
|
| + passphrase_textfield_->SetText(UTF8ToUTF16(eap_password));
|
| }
|
|
|
| + // Save credentials
|
| + bool save_credentials = false;
|
| + properties.GetBooleanWithoutPathExpansion(
|
| + flimflam::kSaveCredentialsProperty, &save_credentials);
|
| + save_credentials_checkbox_->SetChecked(save_credentials);
|
| +
|
| RefreshShareCheckbox();
|
| UpdateErrorLabel();
|
| }
|
| @@ -1244,11 +1272,11 @@ void WifiConfigView::InitFocus() {
|
| // static
|
| void WifiConfigView::ParseWiFiUIProperty(
|
| NetworkPropertyUIData* property_ui_data,
|
| - Network* network,
|
| + const NetworkState* network,
|
| const std::string& key) {
|
| onc::ONCSource onc_source = onc::ONC_SOURCE_NONE;
|
| const base::DictionaryValue* onc =
|
| - NetworkConfigView::FindPolicyForActiveUser(network, &onc_source);
|
| + network_connect::FindPolicyForActiveUser(network, &onc_source);
|
|
|
| property_ui_data->ParseOncProperty(
|
| onc_source,
|
| @@ -1259,7 +1287,7 @@ void WifiConfigView::ParseWiFiUIProperty(
|
| // static
|
| void WifiConfigView::ParseWiFiEAPUIProperty(
|
| NetworkPropertyUIData* property_ui_data,
|
| - Network* network,
|
| + const NetworkState* network,
|
| const std::string& key) {
|
| ParseWiFiUIProperty(
|
| property_ui_data, network,
|
|
|