| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/options/vpn_config_view.h" | 5 #include "chrome/browser/chromeos/options/vpn_config_view.h" |
| 6 | 6 |
| 7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
| 8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 9 #include "chrome/browser/chromeos/cros/cros_library.h" | 9 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 10 #include "chrome/browser/chromeos/login/user_manager.h" | 10 #include "chrome/browser/chromeos/login/user_manager.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "views/controls/label.h" | 21 #include "views/controls/label.h" |
| 22 #include "views/controls/textfield/textfield.h" | 22 #include "views/controls/textfield/textfield.h" |
| 23 #include "views/layout/grid_layout.h" | 23 #include "views/layout/grid_layout.h" |
| 24 #include "views/layout/layout_constants.h" | 24 #include "views/layout/layout_constants.h" |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 // Root CA certificates that are built into Chrome use this token name. | 28 // Root CA certificates that are built into Chrome use this token name. |
| 29 const char* const kRootCertificateTokenName = "Builtin Object Token"; | 29 const char* const kRootCertificateTokenName = "Builtin Object Token"; |
| 30 | 30 |
| 31 string16 ProviderTypeToString(chromeos::VirtualNetwork::ProviderType type) { | 31 string16 ProviderTypeToString(chromeos::ProviderType type) { |
| 32 switch (type) { | 32 switch (type) { |
| 33 case chromeos::VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK: | 33 case chromeos::PROVIDER_TYPE_L2TP_IPSEC_PSK: |
| 34 return l10n_util::GetStringUTF16( | 34 return l10n_util::GetStringUTF16( |
| 35 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_PSK); | 35 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_PSK); |
| 36 case chromeos::VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: | 36 case chromeos::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: |
| 37 return l10n_util::GetStringUTF16( | 37 return l10n_util::GetStringUTF16( |
| 38 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_USER_CERT); | 38 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_USER_CERT); |
| 39 case chromeos::VirtualNetwork::PROVIDER_TYPE_OPEN_VPN: | 39 case chromeos::PROVIDER_TYPE_OPEN_VPN: |
| 40 return l10n_util::GetStringUTF16( | 40 return l10n_util::GetStringUTF16( |
| 41 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_OPEN_VPN); | 41 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_OPEN_VPN); |
| 42 case chromeos::VirtualNetwork::PROVIDER_TYPE_MAX: | 42 case chromeos::PROVIDER_TYPE_MAX: |
| 43 break; | 43 break; |
| 44 } | 44 } |
| 45 NOTREACHED(); | 45 NOTREACHED(); |
| 46 return string16(); | 46 return string16(); |
| 47 } | 47 } |
| 48 | 48 |
| 49 } // namespace | 49 } // namespace |
| 50 | 50 |
| 51 namespace chromeos { | 51 namespace chromeos { |
| 52 | 52 |
| 53 class ProviderTypeComboboxModel : public ui::ComboboxModel { | 53 class ProviderTypeComboboxModel : public ui::ComboboxModel { |
| 54 public: | 54 public: |
| 55 ProviderTypeComboboxModel() {} | 55 ProviderTypeComboboxModel() {} |
| 56 virtual ~ProviderTypeComboboxModel() {} | 56 virtual ~ProviderTypeComboboxModel() {} |
| 57 virtual int GetItemCount() { | 57 virtual int GetItemCount() { |
| 58 // TODO(stevenjb): Include OpenVPN option once enabled. | 58 // TODO(stevenjb): Include OpenVPN option once enabled. |
| 59 return VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT + 1; | 59 return PROVIDER_TYPE_L2TP_IPSEC_USER_CERT + 1; |
| 60 // return VirtualNetwork::PROVIDER_TYPE_MAX; | 60 // return VirtualNetwork::PROVIDER_TYPE_MAX; |
| 61 } | 61 } |
| 62 virtual string16 GetItemAt(int index) { | 62 virtual string16 GetItemAt(int index) { |
| 63 VirtualNetwork::ProviderType type = | 63 ProviderType type = static_cast<ProviderType>(index); |
| 64 static_cast<VirtualNetwork::ProviderType>(index); | |
| 65 return ProviderTypeToString(type); | 64 return ProviderTypeToString(type); |
| 66 } | 65 } |
| 67 private: | 66 private: |
| 68 DISALLOW_COPY_AND_ASSIGN(ProviderTypeComboboxModel); | 67 DISALLOW_COPY_AND_ASSIGN(ProviderTypeComboboxModel); |
| 69 }; | 68 }; |
| 70 | 69 |
| 71 class ServerCACertComboboxModel : public ui::ComboboxModel { | 70 class ServerCACertComboboxModel : public ui::ComboboxModel { |
| 72 public: | 71 public: |
| 73 explicit ServerCACertComboboxModel(CertLibrary* cert_library) | 72 explicit ServerCACertComboboxModel(CertLibrary* cert_library) |
| 74 : cert_library_(cert_library) { | 73 : cert_library_(cert_library) { |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 | 191 |
| 193 void VPNConfigView::ButtonPressed(views::Button* sender, | 192 void VPNConfigView::ButtonPressed(views::Button* sender, |
| 194 const views::Event& event) { | 193 const views::Event& event) { |
| 195 } | 194 } |
| 196 | 195 |
| 197 void VPNConfigView::ItemChanged(views::Combobox* combo_box, | 196 void VPNConfigView::ItemChanged(views::Combobox* combo_box, |
| 198 int prev_index, int new_index) { | 197 int prev_index, int new_index) { |
| 199 if (prev_index == new_index) | 198 if (prev_index == new_index) |
| 200 return; | 199 return; |
| 201 if (combo_box == provider_type_combobox_) { | 200 if (combo_box == provider_type_combobox_) { |
| 202 provider_type_ = static_cast<VirtualNetwork::ProviderType>(new_index); | 201 provider_type_ = static_cast<ProviderType>(new_index); |
| 203 UpdateControls(); | 202 UpdateControls(); |
| 204 } else if (combo_box == user_cert_combobox_) { | 203 } else if (combo_box == user_cert_combobox_ || |
| 205 } else if (combo_box == server_ca_cert_combobox_) { | 204 combo_box == server_ca_cert_combobox_) { |
| 205 // Do nothing. |
| 206 } else { | 206 } else { |
| 207 NOTREACHED(); | 207 NOTREACHED(); |
| 208 } | 208 } |
| 209 UpdateErrorLabel(); | 209 UpdateErrorLabel(); |
| 210 UpdateCanLogin(); | 210 UpdateCanLogin(); |
| 211 } | 211 } |
| 212 | 212 |
| 213 void VPNConfigView::OnCertificatesLoaded(bool initial_load) { | 213 void VPNConfigView::OnCertificatesLoaded(bool initial_load) { |
| 214 Refresh(); | 214 Refresh(); |
| 215 } | 215 } |
| 216 | 216 |
| 217 bool VPNConfigView::Login() { | 217 bool VPNConfigView::Login() { |
| 218 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); | 218 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
| 219 if (service_path_.empty()) { | 219 if (service_path_.empty()) { |
| 220 switch (provider_type_) { | 220 switch (provider_type_) { |
| 221 case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK: | 221 case PROVIDER_TYPE_L2TP_IPSEC_PSK: |
| 222 cros->ConnectToVirtualNetworkPSK(GetService(), | 222 cros->ConnectToVirtualNetworkPSK(GetService(), |
| 223 GetServer(), | 223 GetServer(), |
| 224 GetPSKPassphrase(), | 224 GetPSKPassphrase(), |
| 225 GetUsername(), | 225 GetUsername(), |
| 226 GetUserPassphrase()); | 226 GetUserPassphrase()); |
| 227 break; | 227 break; |
| 228 case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: { | 228 case PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: { |
| 229 cros->ConnectToVirtualNetworkCert(GetService(), | 229 cros->ConnectToVirtualNetworkCert(GetService(), |
| 230 GetServer(), | 230 GetServer(), |
| 231 GetServerCACertNssNickname(), | 231 GetServerCACertNssNickname(), |
| 232 GetUserCertID(), | 232 GetUserCertID(), |
| 233 GetUsername(), | 233 GetUsername(), |
| 234 GetUserPassphrase()); | 234 GetUserPassphrase()); |
| 235 break; | 235 break; |
| 236 } | 236 } |
| 237 case VirtualNetwork::PROVIDER_TYPE_OPEN_VPN: | 237 case PROVIDER_TYPE_OPEN_VPN: |
| 238 // TODO(stevenjb): Add support for OpenVPN. | 238 // TODO(stevenjb): Add support for OpenVPN. |
| 239 LOG(WARNING) << "Unsupported provider type: " << provider_type_; | 239 LOG(WARNING) << "Unsupported provider type: " << provider_type_; |
| 240 break; | 240 break; |
| 241 case VirtualNetwork::PROVIDER_TYPE_MAX: | 241 case PROVIDER_TYPE_MAX: |
| 242 break; | 242 break; |
| 243 } | 243 } |
| 244 } else { | 244 } else { |
| 245 VirtualNetwork* vpn = cros->FindVirtualNetworkByPath(service_path_); | 245 VirtualNetwork* vpn = cros->FindVirtualNetworkByPath(service_path_); |
| 246 if (!vpn) { | 246 if (!vpn) { |
| 247 // TODO(stevenjb): Add notification for this. | 247 // TODO(stevenjb): Add notification for this. |
| 248 LOG(WARNING) << "VPN no longer exists: " << service_path_; | 248 LOG(WARNING) << "VPN no longer exists: " << service_path_; |
| 249 return true; // Close dialog. | 249 return true; // Close dialog. |
| 250 } | 250 } |
| 251 switch (provider_type_) { | 251 switch (provider_type_) { |
| 252 case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK: | 252 case PROVIDER_TYPE_L2TP_IPSEC_PSK: |
| 253 vpn->SetPSKPassphrase(GetPSKPassphrase()); | 253 vpn->SetPSKPassphrase(GetPSKPassphrase()); |
| 254 break; | 254 break; |
| 255 case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: { | 255 case PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: { |
| 256 vpn->SetClientCertID(GetUserCertID()); | 256 vpn->SetClientCertID(GetUserCertID()); |
| 257 break; | 257 break; |
| 258 } | 258 } |
| 259 case VirtualNetwork::PROVIDER_TYPE_OPEN_VPN: { | 259 case PROVIDER_TYPE_OPEN_VPN: { |
| 260 LOG(WARNING) << "OpenVPN not yet supported."; | 260 LOG(WARNING) << "OpenVPN not yet supported."; |
| 261 break; | 261 break; |
| 262 } | 262 } |
| 263 case VirtualNetwork::PROVIDER_TYPE_MAX: | 263 case PROVIDER_TYPE_MAX: |
| 264 break; | 264 break; |
| 265 } | 265 } |
| 266 vpn->SetUsername(GetUsername()); | 266 vpn->SetUsername(GetUsername()); |
| 267 vpn->SetUserPassphrase(GetUserPassphrase()); | 267 vpn->SetUserPassphrase(GetUserPassphrase()); |
| 268 | 268 |
| 269 cros->ConnectToVirtualNetwork(vpn); | 269 cros->ConnectToVirtualNetwork(vpn); |
| 270 } | 270 } |
| 271 // Connection failures are responsible for updating the UI, including | 271 // Connection failures are responsible for updating the UI, including |
| 272 // reopening dialogs. | 272 // reopening dialogs. |
| 273 return true; // Close dialog. | 273 return true; // Close dialog. |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 // Textfield, combobox. | 364 // Textfield, combobox. |
| 365 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, | 365 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, |
| 366 views::GridLayout::USE_PREF, 0, | 366 views::GridLayout::USE_PREF, 0, |
| 367 ChildNetworkConfigView::kInputFieldMinWidth); | 367 ChildNetworkConfigView::kInputFieldMinWidth); |
| 368 column_set->AddPaddingColumn(0, views::kRelatedControlSmallHorizontalSpacing); | 368 column_set->AddPaddingColumn(0, views::kRelatedControlSmallHorizontalSpacing); |
| 369 | 369 |
| 370 // Initialize members. | 370 // Initialize members. |
| 371 service_text_modified_ = false; | 371 service_text_modified_ = false; |
| 372 provider_type_ = vpn ? | 372 provider_type_ = vpn ? |
| 373 vpn->provider_type() : | 373 vpn->provider_type() : |
| 374 chromeos::VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK; | 374 chromeos::PROVIDER_TYPE_L2TP_IPSEC_PSK; |
| 375 | 375 |
| 376 // Server label and input. | 376 // Server label and input. |
| 377 layout->StartRow(0, column_view_set_id); | 377 layout->StartRow(0, column_view_set_id); |
| 378 layout->AddView(new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( | 378 layout->AddView(new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( |
| 379 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVER_HOSTNAME)))); | 379 IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVER_HOSTNAME)))); |
| 380 if (!vpn) { | 380 if (!vpn) { |
| 381 server_textfield_ = new views::Textfield(views::Textfield::STYLE_DEFAULT); | 381 server_textfield_ = new views::Textfield(views::Textfield::STYLE_DEFAULT); |
| 382 server_textfield_->SetController(this); | 382 server_textfield_->SetController(this); |
| 383 layout->AddView(server_textfield_); | 383 layout->AddView(server_textfield_); |
| 384 server_text_ = NULL; | 384 server_text_ = NULL; |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 } else { | 535 } else { |
| 536 user_cert_combobox_->SetSelectedItem(0); | 536 user_cert_combobox_->SetSelectedItem(0); |
| 537 } | 537 } |
| 538 | 538 |
| 539 UpdateErrorLabel(); | 539 UpdateErrorLabel(); |
| 540 } | 540 } |
| 541 | 541 |
| 542 void VPNConfigView::UpdateControls() { | 542 void VPNConfigView::UpdateControls() { |
| 543 // Enable controls. | 543 // Enable controls. |
| 544 switch (provider_type_) { | 544 switch (provider_type_) { |
| 545 case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK: | 545 case PROVIDER_TYPE_L2TP_IPSEC_PSK: |
| 546 psk_passphrase_label_->SetEnabled(true); | 546 psk_passphrase_label_->SetEnabled(true); |
| 547 psk_passphrase_textfield_->SetEnabled(true); | 547 psk_passphrase_textfield_->SetEnabled(true); |
| 548 server_ca_cert_label_->SetEnabled(false); | 548 server_ca_cert_label_->SetEnabled(false); |
| 549 server_ca_cert_combobox_->SetEnabled(false); | 549 server_ca_cert_combobox_->SetEnabled(false); |
| 550 user_cert_label_->SetEnabled(false); | 550 user_cert_label_->SetEnabled(false); |
| 551 user_cert_combobox_->SetEnabled(false); | 551 user_cert_combobox_->SetEnabled(false); |
| 552 break; | 552 break; |
| 553 case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: | 553 case PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: |
| 554 psk_passphrase_label_->SetEnabled(false); | 554 psk_passphrase_label_->SetEnabled(false); |
| 555 psk_passphrase_textfield_->SetEnabled(false); | 555 psk_passphrase_textfield_->SetEnabled(false); |
| 556 server_ca_cert_label_->SetEnabled(true); | 556 server_ca_cert_label_->SetEnabled(true); |
| 557 server_ca_cert_combobox_->SetEnabled(true); | 557 server_ca_cert_combobox_->SetEnabled(true); |
| 558 user_cert_label_->SetEnabled(true); | 558 user_cert_label_->SetEnabled(true); |
| 559 // Only enable the combobox if the user actually has a cert to select. | 559 // Only enable the combobox if the user actually has a cert to select. |
| 560 user_cert_combobox_->SetEnabled(HaveUserCerts()); | 560 user_cert_combobox_->SetEnabled(HaveUserCerts()); |
| 561 break; | 561 break; |
| 562 case VirtualNetwork::PROVIDER_TYPE_OPEN_VPN: | 562 case PROVIDER_TYPE_OPEN_VPN: |
| 563 psk_passphrase_label_->SetEnabled(false); | 563 psk_passphrase_label_->SetEnabled(false); |
| 564 psk_passphrase_textfield_->SetEnabled(false); | 564 psk_passphrase_textfield_->SetEnabled(false); |
| 565 server_ca_cert_label_->SetEnabled(false); | 565 server_ca_cert_label_->SetEnabled(false); |
| 566 server_ca_cert_combobox_->SetEnabled(false); | 566 server_ca_cert_combobox_->SetEnabled(false); |
| 567 user_cert_label_->SetEnabled(true); | 567 user_cert_label_->SetEnabled(true); |
| 568 // Only enable the combobox if the user actually has a cert to select. | 568 // Only enable the combobox if the user actually has a cert to select. |
| 569 user_cert_combobox_->SetEnabled(HaveUserCerts()); | 569 user_cert_combobox_->SetEnabled(HaveUserCerts()); |
| 570 break; | 570 break; |
| 571 default: | 571 default: |
| 572 NOTREACHED(); | 572 NOTREACHED(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 } else { | 606 } else { |
| 607 error_label_->SetVisible(false); | 607 error_label_->SetVisible(false); |
| 608 } | 608 } |
| 609 } | 609 } |
| 610 | 610 |
| 611 void VPNConfigView::UpdateCanLogin() { | 611 void VPNConfigView::UpdateCanLogin() { |
| 612 parent_->GetDialogClientView()->UpdateDialogButtons(); | 612 parent_->GetDialogClientView()->UpdateDialogButtons(); |
| 613 } | 613 } |
| 614 | 614 |
| 615 bool VPNConfigView::UserCertRequired() const { | 615 bool VPNConfigView::UserCertRequired() const { |
| 616 return provider_type_ == VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT | 616 return provider_type_ == PROVIDER_TYPE_L2TP_IPSEC_USER_CERT |
| 617 || provider_type_ == VirtualNetwork::PROVIDER_TYPE_OPEN_VPN; | 617 || provider_type_ == PROVIDER_TYPE_OPEN_VPN; |
| 618 } | 618 } |
| 619 | 619 |
| 620 bool VPNConfigView::HaveUserCerts() const { | 620 bool VPNConfigView::HaveUserCerts() const { |
| 621 return cert_library_->GetUserCertificates().Size() > 0; | 621 return cert_library_->GetUserCertificates().Size() > 0; |
| 622 } | 622 } |
| 623 | 623 |
| 624 bool VPNConfigView::IsUserCertValid() const { | 624 bool VPNConfigView::IsUserCertValid() const { |
| 625 if (!user_cert_combobox_ || !user_cert_combobox_->IsEnabled()) | 625 if (!user_cert_combobox_ || !user_cert_combobox_->IsEnabled()) |
| 626 return false; | 626 return false; |
| 627 int selected = user_cert_combobox_->selected_item(); | 627 int selected = user_cert_combobox_->selected_item(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 638 views::Textfield* textfield, bool trim_whitespace) const { | 638 views::Textfield* textfield, bool trim_whitespace) const { |
| 639 std::string untrimmed = UTF16ToUTF8(textfield->text()); | 639 std::string untrimmed = UTF16ToUTF8(textfield->text()); |
| 640 if (!trim_whitespace) | 640 if (!trim_whitespace) |
| 641 return untrimmed; | 641 return untrimmed; |
| 642 std::string result; | 642 std::string result; |
| 643 TrimWhitespaceASCII(untrimmed, TRIM_ALL, &result); | 643 TrimWhitespaceASCII(untrimmed, TRIM_ALL, &result); |
| 644 return result; | 644 return result; |
| 645 } | 645 } |
| 646 | 646 |
| 647 } // namespace chromeos | 647 } // namespace chromeos |
| OLD | NEW |