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 |