diff options
Diffstat (limited to 'chrome/browser/chromeos/options/wifi_config_view.cc')
-rw-r--r-- | chrome/browser/chromeos/options/wifi_config_view.cc | 138 |
1 files changed, 88 insertions, 50 deletions
diff --git a/chrome/browser/chromeos/options/wifi_config_view.cc b/chrome/browser/chromeos/options/wifi_config_view.cc index 458a5f4..0ba7231 100644 --- a/chrome/browser/chromeos/options/wifi_config_view.cc +++ b/chrome/browser/chromeos/options/wifi_config_view.cc @@ -9,6 +9,7 @@ #include "chrome/browser/chromeos/cros/cros_library.h" #include "chrome/browser/chromeos/login/user_manager.h" #include "chrome/browser/chromeos/options/network_config_view.h" +#include "chrome/browser/chromeos/options/wifi_config_model.h" #include "grit/chromium_strings.h" #include "grit/generated_resources.h" #include "grit/locale_settings.h" @@ -160,40 +161,69 @@ class Phase2AuthComboboxModel : public ui::ComboboxModel { DISALLOW_COPY_AND_ASSIGN(Phase2AuthComboboxModel); }; -// TODO(chocobo): Added logic for getting server CA certs combobox populated. +// Combobox that supports a preferred width. Used by Server CA combobox +// because the strings inside it are too wide. +class ComboboxWithWidth : public views::Combobox { + public: + ComboboxWithWidth(ui::ComboboxModel* model, int width) + : Combobox(model), + width_(width) { + } + virtual ~ComboboxWithWidth() {} + virtual gfx::Size GetPreferredSize() OVERRIDE { + gfx::Size size = Combobox::GetPreferredSize(); + size.set_width(width_); + return size; + } + private: + int width_; + DISALLOW_COPY_AND_ASSIGN(ComboboxWithWidth); +}; + class ServerCACertComboboxModel : public ui::ComboboxModel { public: - ServerCACertComboboxModel() {} + explicit ServerCACertComboboxModel(WifiConfigModel* wifi_config_model) + : wifi_config_model_(wifi_config_model) { + } virtual ~ServerCACertComboboxModel() {} virtual int GetItemCount() { - return 3; + // First "Default", then the certs, then "Do not check". + return wifi_config_model_->GetServerCaCertCount() + 2; } - virtual string16 GetItemAt(int index) { - if (index == 0) + virtual string16 GetItemAt(int combo_index) { + if (combo_index == 0) return l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_SERVER_CA_DEFAULT); - if (index == GetItemCount()-1) + if (combo_index == GetItemCount() - 1) return l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_SERVER_CA_DO_NOT_CHECK); - return UTF8ToUTF16("/tmp/ca-cert.pem"); + int cert_index = combo_index - 1; + return wifi_config_model_->GetServerCaCertName(cert_index); } private: + WifiConfigModel* wifi_config_model_; DISALLOW_COPY_AND_ASSIGN(ServerCACertComboboxModel); }; -// TODO(chocobo): Added logic for getting client certs combobox populated. class ClientCertComboboxModel : public ui::ComboboxModel { public: - ClientCertComboboxModel() {} + explicit ClientCertComboboxModel(WifiConfigModel* wifi_config_model) + : wifi_config_model_(wifi_config_model) { + } virtual ~ClientCertComboboxModel() {} virtual int GetItemCount() { - return 1; + // One initial item "None", then the certs. + return 1 + wifi_config_model_->GetUserCertCount(); } - virtual string16 GetItemAt(int index) { - return l10n_util::GetStringUTF16( - IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_NONE); + virtual string16 GetItemAt(int combo_index) { + if (combo_index == 0) + return l10n_util::GetStringUTF16( + IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_NONE); + int cert_index = combo_index - 1; + return wifi_config_model_->GetUserCertName(cert_index); } private: + WifiConfigModel* wifi_config_model_; DISALLOW_COPY_AND_ASSIGN(ClientCertComboboxModel); }; @@ -201,6 +231,7 @@ class ClientCertComboboxModel : public ui::ComboboxModel { WifiConfigView::WifiConfigView(NetworkConfigView* parent, WifiNetwork* wifi) : parent_(parent), + wifi_config_model_(new WifiConfigModel()), is_8021x_(false), service_path_(wifi->service_path()), ssid_textfield_(NULL), @@ -225,6 +256,7 @@ WifiConfigView::WifiConfigView(NetworkConfigView* parent, WifiNetwork* wifi) WifiConfigView::WifiConfigView(NetworkConfigView* parent) : parent_(parent), + wifi_config_model_(new WifiConfigModel()), is_8021x_(false), ssid_textfield_(NULL), eap_method_combobox_(NULL), @@ -462,15 +494,19 @@ bool WifiConfigView::Login() { if (server_ca_cert_combobox_->IsEnabled()) { int selected = server_ca_cert_combobox_->selected_item(); if (selected == 0) { - wifi->SetEAPServerCACert(std::string()); + // First item is "Default". + wifi->SetEAPServerCaCertNssNickname(std::string()); wifi->SetEAPUseSystemCAs(true); } else if (selected == - server_ca_cert_combobox_->model()->GetItemCount()-1) { - wifi->SetEAPServerCACert(std::string()); + server_ca_cert_combobox_->model()->GetItemCount() - 1) { + // Last item is "Do not check". + wifi->SetEAPServerCaCertNssNickname(std::string()); wifi->SetEAPUseSystemCAs(false); } else { - wifi->SetEAPServerCACert(UTF16ToUTF8( - server_ca_cert_combobox_->model()->GetItemAt(selected))); + int cert_index = selected - 1; + std::string nss_nickname = + wifi_config_model_->GetServerCaCertNssNickname(cert_index); + wifi->SetEAPServerCaCertNssNickname(nss_nickname); } } @@ -478,10 +514,14 @@ bool WifiConfigView::Login() { if (client_cert_combobox_->IsEnabled()) { int selected = client_cert_combobox_->selected_item(); if (selected == 0) { - wifi->SetEAPClientCert(std::string()); + // First item is "None". + wifi->SetEAPClientCertPkcs11Id(std::string()); } else { - wifi->SetEAPClientCert( - UTF16ToUTF8(client_cert_combobox_->model()->GetItemAt(selected))); + // Send cert ID to flimflam. + int cert_index = selected - 1; + std::string cert_pkcs11_id = + wifi_config_model_->GetUserCertPkcs11Id(cert_index); + wifi->SetEAPClientCertPkcs11Id(cert_pkcs11_id); } } @@ -585,6 +625,9 @@ void WifiConfigView::Init(WifiNetwork* wifi) { is_8021x_ = wifi && wifi->encrypted() && wifi->encryption() == SECURITY_8021X; if (is_8021x_) { + // Only enumerate certificates in the data model for 802.1X networks. + wifi_config_model_->UpdateCertificates(); + // EAP method layout->StartRow(0, column_view_set_id); layout->AddView(new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( @@ -614,8 +657,9 @@ void WifiConfigView::Init(WifiNetwork* wifi) { new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_SERVER_CA))); layout->AddView(server_ca_cert_label_); - server_ca_cert_combobox_ = new views::Combobox( - new ServerCACertComboboxModel()); + server_ca_cert_combobox_ = new ComboboxWithWidth( + new ServerCACertComboboxModel( + wifi_config_model_.get()), kPasswordWidth); server_ca_cert_label_->SetEnabled(false); server_ca_cert_combobox_->SetEnabled(false); server_ca_cert_combobox_->set_listener(this); @@ -628,7 +672,7 @@ void WifiConfigView::Init(WifiNetwork* wifi) { IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT))); layout->AddView(client_cert_label_); client_cert_combobox_ = new views::Combobox( - new ClientCertComboboxModel()); + new ClientCertComboboxModel(wifi_config_model_.get())); client_cert_label_->SetEnabled(false); client_cert_combobox_->SetEnabled(false); client_cert_combobox_->set_listener(this); @@ -742,43 +786,37 @@ void WifiConfigView::Init(WifiNetwork* wifi) { // Server CA certificate if (server_ca_cert_combobox_->IsEnabled()) { - const std::string& cert = wifi->eap_server_ca_cert(); - if (cert.empty()) { - if (wifi->eap_use_system_cas()) + const std::string& nss_nickname = wifi->eap_server_ca_cert_nss_nickname(); + if (nss_nickname.empty()) { + if (wifi->eap_use_system_cas()) { + // "Default" server_ca_cert_combobox_->SetSelectedItem(0); - else // select last item for "Do Not Check" + } else { + // "Do not check" server_ca_cert_combobox_->SetSelectedItem( - server_ca_cert_combobox_->model()->GetItemCount()-1); + server_ca_cert_combobox_->model()->GetItemCount() - 1); + } } else { - // select the certificate path if available - // Note: the last item is "Do Not Check" so no need to compare that. - for (int i = 1; - i < server_ca_cert_combobox_->model()->GetItemCount()-1; - i++) { - if (cert == - UTF16ToUTF8(server_ca_cert_combobox_->model()->GetItemAt(i))) { - server_ca_cert_combobox_->SetSelectedItem(i); - break; - } + // select the certificate if available + int cert_index = wifi_config_model_->GetServerCaCertIndex(nss_nickname); + if (cert_index >= 0) { + // Skip item for "Default" + server_ca_cert_combobox_->SetSelectedItem(1 + cert_index); } } } // Client certificate if (client_cert_combobox_->IsEnabled()) { - const std::string& cert = wifi->eap_client_cert(); - if (cert.empty()) { + const std::string& pkcs11_id = wifi->eap_client_cert_pkcs11_id(); + if (pkcs11_id.empty()) { + // First item is "None". client_cert_combobox_->SetSelectedItem(0); } else { - // select the certificate path if available - for (int i = 1; - i < client_cert_combobox_->model()->GetItemCount(); - i++) { - if (cert == - UTF16ToUTF8(client_cert_combobox_->model()->GetItemAt(i))) { - client_cert_combobox_->SetSelectedItem(i); - break; - } + int cert_index = wifi_config_model_->GetUserCertIndex(pkcs11_id); + if (cert_index >= 0) { + // Skip item for "None" + client_cert_combobox_->SetSelectedItem(1 + cert_index); } } } |