| Index: chrome/browser/chromeos/options/wifi_config_view.cc
|
| ===================================================================
|
| --- chrome/browser/chromeos/options/wifi_config_view.cc (revision 45039)
|
| +++ chrome/browser/chromeos/options/wifi_config_view.cc (working copy)
|
| @@ -7,12 +7,14 @@
|
| #include "app/l10n_util.h"
|
| #include "app/resource_bundle.h"
|
| #include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/chromeos/cros/cros_library.h"
|
| #include "chrome/browser/chromeos/options/network_config_view.h"
|
| #include "grit/chromium_strings.h"
|
| #include "grit/generated_resources.h"
|
| #include "grit/locale_settings.h"
|
| #include "grit/theme_resources.h"
|
| #include "views/controls/button/image_button.h"
|
| +#include "views/controls/button/native_button.h"
|
| #include "views/controls/label.h"
|
| #include "views/grid_layout.h"
|
| #include "views/standard_layout.h"
|
| @@ -26,7 +28,11 @@
|
| can_login_(false),
|
| wifi_(wifi),
|
| ssid_textfield_(NULL),
|
| - passphrase_textfield_(NULL) {
|
| + identity_textfield_(NULL),
|
| + certificate_browse_button_(NULL),
|
| + certificate_path_(),
|
| + passphrase_textfield_(NULL),
|
| + passphrase_visible_button_(NULL) {
|
| Init();
|
| }
|
|
|
| @@ -35,12 +41,15 @@
|
| other_network_(true),
|
| can_login_(false),
|
| ssid_textfield_(NULL),
|
| - passphrase_textfield_(NULL) {
|
| + identity_textfield_(NULL),
|
| + certificate_browse_button_(NULL),
|
| + certificate_path_(),
|
| + passphrase_textfield_(NULL),
|
| + passphrase_visible_button_(NULL) {
|
| Init();
|
| }
|
|
|
| -void WifiConfigView::ContentsChanged(views::Textfield* sender,
|
| - const string16& new_contents) {
|
| +void WifiConfigView::UpdateCanLogin(void) {
|
| bool can_login = true;
|
| if (other_network_) {
|
| // Since the user can try to connect to a non-encrypted hidden network,
|
| @@ -49,6 +58,9 @@
|
| } else {
|
| // Connecting to an encrypted network, so make sure passphrase is non-empty.
|
| can_login = !passphrase_textfield_->text().empty();
|
| + if (identity_textfield_ != NULL)
|
| + can_login = !identity_textfield_->text().empty() &&
|
| + !certificate_path_.empty();
|
| }
|
|
|
| // Update the login button enable/disable state if can_login_ changes.
|
| @@ -58,13 +70,52 @@
|
| }
|
| }
|
|
|
| +void WifiConfigView::ContentsChanged(views::Textfield* sender,
|
| + const string16& new_contents) {
|
| + UpdateCanLogin();
|
| +}
|
| +
|
| void WifiConfigView::ButtonPressed(views::Button* sender,
|
| const views::Event& event) {
|
| - // We only have one button to toggle password visible.
|
| - if (passphrase_textfield_)
|
| - passphrase_textfield_->SetPassword(!passphrase_textfield_->IsPassword());
|
| + if (sender == passphrase_visible_button_) {
|
| + if (passphrase_textfield_)
|
| + passphrase_textfield_->SetPassword(!passphrase_textfield_->IsPassword());
|
| + } else if (sender == certificate_browse_button_) {
|
| + select_file_dialog_ = SelectFileDialog::Create(this);
|
| + select_file_dialog_->SelectFile(SelectFileDialog::SELECT_OPEN_FILE,
|
| + string16(), FilePath(), NULL, 0,
|
| + std::string(), NULL, NULL);
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| }
|
|
|
| +void WifiConfigView::FileSelected(const FilePath& path,
|
| + int index, void* params) {
|
| + certificate_path_ = path;
|
| + certificate_browse_button_->SetLabel(path.BaseName().ToWStringHack());
|
| + UpdateCanLogin(); // TODO(njw) Check if the passphrase decrypts the key.
|
| +}
|
| +
|
| +bool WifiConfigView::Accept() {
|
| + string16 identity_string, certificate_path_string;
|
| +
|
| + if (identity_textfield_ != NULL) {
|
| + identity_string = identity_textfield_->text();
|
| + certificate_path_string = WideToUTF16(certificate_path_.ToWStringHack());
|
| + }
|
| + if (other_network_) {
|
| + CrosLibrary::Get()->GetNetworkLibrary()->ConnectToWifiNetwork(
|
| + ssid_textfield_->text(), passphrase_textfield_->text(),
|
| + identity_string, certificate_path_string);
|
| + } else {
|
| + CrosLibrary::Get()->GetNetworkLibrary()->ConnectToWifiNetwork(
|
| + wifi_, passphrase_textfield_->text(),
|
| + identity_string, certificate_path_string);
|
| + }
|
| + return true;
|
| +}
|
| +
|
| const string16& WifiConfigView::GetSSID() const {
|
| return ssid_textfield_->text();
|
| }
|
| @@ -76,6 +127,8 @@
|
| void WifiConfigView::FocusFirstField() {
|
| if (ssid_textfield_)
|
| ssid_textfield_->RequestFocus();
|
| + else if (identity_textfield_)
|
| + identity_textfield_->RequestFocus();
|
| else if (passphrase_textfield_)
|
| passphrase_textfield_->RequestFocus();
|
| }
|
| @@ -110,11 +163,39 @@
|
| }
|
| layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
|
|
| + // Add ID and cert password if we're using 802.1x
|
| + // XXX we're cheating and assuming 802.1x means EAP-TLS - not true
|
| + // in general, but very common. WPA Supplicant doesn't report the
|
| + // EAP type because it's unknown until the process begins, and we'd
|
| + // need some kind of callback.
|
| + if (wifi_.encrypted && wifi_.encryption == SECURITY_8021X) {
|
| + layout->StartRow(0, column_view_set_id);
|
| + layout->AddView(new views::Label(l10n_util::GetString(
|
| + IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_IDENTITY)));
|
| + identity_textfield_ = new views::Textfield(
|
| + views::Textfield::STYLE_DEFAULT);
|
| + identity_textfield_->SetController(this);
|
| + layout->AddView(identity_textfield_);
|
| + layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| + layout->StartRow(0, column_view_set_id);
|
| + layout->AddView(new views::Label(l10n_util::GetString(
|
| + IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT)));
|
| + certificate_browse_button_ = new views::NativeButton(this,
|
| + l10n_util::GetString(
|
| + IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_BUTTON));
|
| + layout->AddView(certificate_browse_button_);
|
| + layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| + }
|
| +
|
| // Add passphrase if other_network or wifi is encrypted.
|
| if (other_network_ || wifi_.encrypted) {
|
| layout->StartRow(0, column_view_set_id);
|
| - layout->AddView(new views::Label(l10n_util::GetString(
|
| - IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PASSPHRASE)));
|
| + int label_text_id;
|
| + if (wifi_.encryption == SECURITY_8021X)
|
| + label_text_id = IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT;
|
| + else
|
| + label_text_id = IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PASSPHRASE;
|
| + layout->AddView(new views::Label(l10n_util::GetString(label_text_id)));
|
| passphrase_textfield_ = new views::Textfield(
|
| views::Textfield::STYLE_PASSWORD);
|
| passphrase_textfield_->SetController(this);
|
| @@ -122,13 +203,13 @@
|
| passphrase_textfield_->SetText(UTF8ToUTF16(wifi_.passphrase));
|
| layout->AddView(passphrase_textfield_);
|
| // Password visible button.
|
| - views::ImageButton* button = new views::ImageButton(this);
|
| - button->SetImage(views::ImageButton::BS_NORMAL,
|
| - ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| - IDR_STATUSBAR_NETWORK_SECURE));
|
| - button->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
|
| - views::ImageButton::ALIGN_MIDDLE);
|
| - layout->AddView(button);
|
| + passphrase_visible_button_ = new views::ImageButton(this);
|
| + passphrase_visible_button_->SetImage(views::ImageButton::BS_NORMAL,
|
| + ResourceBundle::GetSharedInstance().
|
| + GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE));
|
| + passphrase_visible_button_->SetImageAlignment(
|
| + views::ImageButton::ALIGN_CENTER, views::ImageButton::ALIGN_MIDDLE);
|
| + layout->AddView(passphrase_visible_button_);
|
| layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| }
|
| }
|
|
|