1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/options/vpn_config_view.h" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/string_util.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/utf_string_conversions.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/cros/cros_library.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/login/user_manager.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/chromium_strings.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/generated_resources.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/locale_settings.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/theme_resources.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/l10n/l10n_util.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/resource/resource_bundle.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/controls/button/image_button.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/controls/button/native_button.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/controls/label.h" 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/controls/textfield/textfield.h" 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/layout/grid_layout.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/layout/layout_constants.h" 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/window/window.h" 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace { 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstring16 ProviderTypeToString(chromeos::VirtualNetwork::ProviderType type) { 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen switch (type) { 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK: 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return l10n_util::GetStringUTF16( 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_PSK); 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return l10n_util::GetStringUTF16( 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_USER_CERT); 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::VirtualNetwork::PROVIDER_TYPE_OPEN_VPN: 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return l10n_util::GetStringUTF16( 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_OPEN_VPN); 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::VirtualNetwork::PROVIDER_TYPE_MAX: 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return string16(); 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace chromeos { 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenint VPNConfigView::ProviderTypeComboboxModel::GetItemCount() { 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(stevenjb): Include OpenVPN option once enabled. 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT + 1; 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // return VirtualNetwork::PROVIDER_TYPE_MAX; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstring16 VPNConfigView::ProviderTypeComboboxModel::GetItemAt(int index) { 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen VirtualNetwork::ProviderType type = 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static_cast<VirtualNetwork::ProviderType>(index); 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return ProviderTypeToString(type); 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenVPNConfigView::UserCertComboboxModel::UserCertComboboxModel() { 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(jamescook): populate user_certs_. chromium-os:14111 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenint VPNConfigView::UserCertComboboxModel::GetItemCount() { 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return static_cast<int>(user_certs_.size()); 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstring16 VPNConfigView::UserCertComboboxModel::GetItemAt(int index) { 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (index >= 0 && index < static_cast<int>(user_certs_.size())) 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return ASCIIToUTF16(user_certs_[index]); 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return string16(); 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenVPNConfigView::VPNConfigView(NetworkConfigView* parent, VirtualNetwork* vpn) 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : ChildNetworkConfigView(parent, vpn) { 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Init(vpn); 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenVPNConfigView::VPNConfigView(NetworkConfigView* parent) 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : ChildNetworkConfigView(parent) { 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Init(NULL); 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenVPNConfigView::~VPNConfigView() { 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid VPNConfigView::UpdateCanLogin() { 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen parent_->GetDialogClientView()->UpdateDialogButtons(); 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstring16 VPNConfigView::GetTitle() { 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_ADD_VPN); 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool VPNConfigView::CanLogin() { 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static const size_t kMinPassphraseLen = 0; // TODO(stevenjb): min length? 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (service_path_.empty() && 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen (GetService().empty() || GetServer().empty())) 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (provider_type_ == VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK && 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_textfield_->text().length() < kMinPassphraseLen) 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (GetUsername().empty()) 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (user_passphrase_textfield_->text().length() < kMinPassphraseLen) 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid VPNConfigView::UpdateErrorLabel() { 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string error_msg; 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!service_path_.empty()) { 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(kuan): differentiate between bad psk and user passphrases. 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen VirtualNetwork* vpn = cros->FindVirtualNetworkByPath(service_path_); 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (vpn && vpn->failed()) { 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (vpn->error() == ERROR_BAD_PASSPHRASE) { 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen error_msg = l10n_util::GetStringUTF8( 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_BAD_PASSPHRASE); 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen error_msg = vpn->GetErrorString(); 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!error_msg.empty()) { 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen error_label_->SetText(UTF8ToWide(error_msg)); 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen error_label_->SetVisible(true); 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen error_label_->SetVisible(false); 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid VPNConfigView::ContentsChanged(views::Textfield* sender, 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16& new_contents) { 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (sender == server_textfield_ && !service_text_modified_) { 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set the service name to the server name up to '.', unless it has 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // been explicityly set by the user. 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 server = server_textfield_->text(); 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16::size_type n = server.find_first_of(L'.'); 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_name_from_server_ = server.substr(0, n); 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_textfield_->SetText(service_name_from_server_); 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (sender == service_textfield_) { 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (new_contents.empty()) 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_text_modified_ = false; 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen else if (new_contents != service_name_from_server_) 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_text_modified_ = true; 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UpdateCanLogin(); 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool VPNConfigView::HandleKeyEvent(views::Textfield* sender, 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const views::KeyEvent& key_event) { 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if ((sender == psk_passphrase_textfield_ || 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen sender == user_passphrase_textfield_) && 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen key_event.key_code() == ui::VKEY_RETURN) { 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen parent_->GetDialogClientView()->AcceptWindow(); 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid VPNConfigView::ButtonPressed(views::Button* sender, 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const views::Event& event) { 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid VPNConfigView::ItemChanged(views::Combobox* combo_box, 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int prev_index, int new_index) { 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (prev_index == new_index) 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (combo_box == provider_type_combobox_) { 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen provider_type_ = static_cast<VirtualNetwork::ProviderType>(new_index); 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnableControls(); 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (combo_box == user_cert_combobox_) { 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Nothing to do for now. 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UpdateCanLogin(); 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool VPNConfigView::Login() { 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (service_path_.empty()) { 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen switch (provider_type_) { 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK: 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cros->ConnectToVirtualNetworkPSK(GetService(), 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetServer(), 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetPSKPassphrase(), 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetUsername(), 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetUserPassphrase()); 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_OPEN_VPN: 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(stevenjb): Add support for OpenVPN and user certs. 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LOG(WARNING) << "Unsupported provider type: " << provider_type_; 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_MAX: 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen VirtualNetwork* vpn = cros->FindVirtualNetworkByPath(service_path_); 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!vpn) { 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(stevenjb): Add notification for this. 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LOG(WARNING) << "VPN no longer exists: " << service_path_; 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; // Close dialog. 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen switch (provider_type_) { 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK: 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen vpn->SetPSKPassphrase(GetPSKPassphrase()); 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_OPEN_VPN: { 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string user_cert = UTF16ToUTF8( 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_combobox_->model()->GetItemAt( 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_combobox_->selected_item())); 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen vpn->SetUserCert(user_cert); 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_MAX: 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen vpn->SetUsername(GetUsername()); 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen vpn->SetUserPassphrase(GetUserPassphrase()); 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cros->ConnectToVirtualNetwork(vpn); 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Connection failures are responsible for updating the UI, including 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // reopening dialogs. 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; // Close dialog. 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid VPNConfigView::Cancel() { 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid VPNConfigView::InitFocus() { 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(jamescook): Put focus in a more reasonable widget. 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst std::string VPNConfigView::GetTextFromField( 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::Textfield* textfield, bool trim_whitespace) const { 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string untrimmed = UTF16ToUTF8(textfield->text()); 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!trim_whitespace) 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return untrimmed; 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string result; 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TrimWhitespaceASCII(untrimmed, TRIM_ALL, &result); 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return result; 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst std::string VPNConfigView::GetService() const { 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (service_textfield_ != NULL) 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return GetTextFromField(service_textfield_, true); 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return service_path_; 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst std::string VPNConfigView::GetServer() const { 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (server_textfield_ != NULL) 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return GetTextFromField(server_textfield_, true); 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return server_hostname_; 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst std::string VPNConfigView::GetPSKPassphrase() const { 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (psk_passphrase_textfield_->IsEnabled() && 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_textfield_->IsVisible()) 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return GetTextFromField(psk_passphrase_textfield_, false); 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return std::string(); 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst std::string VPNConfigView::GetUsername() const { 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return GetTextFromField(username_textfield_, true); 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst std::string VPNConfigView::GetUserPassphrase() const { 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return GetTextFromField(user_passphrase_textfield_, false); 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid VPNConfigView::Init(VirtualNetwork* vpn) { 278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::GridLayout* layout = views::GridLayout::CreatePanel(this); 279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetLayoutManager(layout); 280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int column_view_set_id = 0; 282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id); 283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Label. 284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 1, 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::GridLayout::USE_PREF, 0, 0); 286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen column_set->AddPaddingColumn(0, views::kRelatedControlSmallHorizontalSpacing); 287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Textfield, combobox. 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, 289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::GridLayout::USE_PREF, 0, 290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ChildNetworkConfigView::kPassphraseWidth); 291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen column_set->AddPaddingColumn(0, views::kRelatedControlSmallHorizontalSpacing); 292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Passphrase visible button. 293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen column_set->AddColumn(views::GridLayout::CENTER, views::GridLayout::FILL, 1, 294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::GridLayout::USE_PREF, 0, 0); 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Initialize members. 297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_text_modified_ = false; 298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen provider_type_ = vpn ? 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen vpn->provider_type() : 300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK; 301ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Server label and input. 303ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->StartRow(0, column_view_set_id); 304ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( 305ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVER_HOSTNAME)))); 306ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!vpn) { 307ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server_textfield_ = new views::Textfield(views::Textfield::STYLE_DEFAULT); 308ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server_textfield_->SetController(this); 309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(server_textfield_); 310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server_text_ = NULL; 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server_hostname_ = vpn->server_hostname(); 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server_text_ = new views::Label(UTF8ToWide(server_hostname_)); 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server_text_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(server_text_); 316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen server_textfield_ = NULL; 317ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 318ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 319ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 320ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Service label and name or input. 321ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->StartRow(0, column_view_set_id); 322ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( 323ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVICE_NAME)))); 324ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!vpn) { 325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_textfield_ = new views::Textfield(views::Textfield::STYLE_DEFAULT); 326ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_textfield_->SetController(this); 327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(service_textfield_); 328ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_text_ = NULL; 329ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 330ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_text_ = new views::Label(ASCIIToWide(vpn->name())); 331ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_text_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 332ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(service_text_); 333ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen service_textfield_ = NULL; 334ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 335ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 336ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 337ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Provider type label and select. 338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->StartRow(0, column_view_set_id); 339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( 340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_PROVIDER_TYPE)))); 341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!vpn) { 342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen provider_type_combobox_ = 343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new views::Combobox(new ProviderTypeComboboxModel()); 344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen provider_type_combobox_->set_listener(this); 345ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(provider_type_combobox_); 346ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen provider_type_text_label_ = NULL; 347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen provider_type_text_label_ = 349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new views::Label(UTF16ToWide(ProviderTypeToString(provider_type_))); 350ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(provider_type_text_label_); 351ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen provider_type_combobox_ = NULL; 352ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 354ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 355ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // PSK passphrase label, input and visible button. 356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->StartRow(0, column_view_set_id); 357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_label_ = new views::Label(UTF16ToWide( 358ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen l10n_util::GetStringUTF16( 359ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_PSK_PASSPHRASE))); 360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(psk_passphrase_label_); 361ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_textfield_ = new views::Textfield( 362ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::Textfield::STYLE_PASSWORD); 363ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_textfield_->SetController(this); 364ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (vpn && !vpn->psk_passphrase().empty()) 365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_textfield_->SetText(UTF8ToUTF16(vpn->psk_passphrase())); 366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(psk_passphrase_textfield_); 367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 368ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // User certificate label and input. 370ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->StartRow(0, column_view_set_id); 371ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_label_ = new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( 372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_USER_CERT))); 373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(user_cert_label_); 374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_combobox_ = new views::Combobox(new UserCertComboboxModel()); 375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_combobox_->set_listener(this); 376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (vpn && !vpn->user_cert().empty()) { 377ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 user_cert = UTF8ToUTF16(vpn->user_cert()); 378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (int i = 0; i < user_cert_combobox_->model()->GetItemCount(); ++i) { 379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (user_cert_combobox_->model()->GetItemAt(i) == user_cert) { 380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_combobox_->SetSelectedItem(i); 381ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 382ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 383ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 384ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 385ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(user_cert_combobox_); 386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 387ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 388ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Username label and input. 389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->StartRow(0, column_view_set_id); 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(new views::Label(UTF16ToWide(l10n_util::GetStringUTF16( 391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_USERNAME)))); 392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen username_textfield_ = new views::Textfield(views::Textfield::STYLE_DEFAULT); 393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen username_textfield_->SetController(this); 394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (vpn && !vpn->username().empty()) 395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen username_textfield_->SetText(UTF8ToUTF16(vpn->username())); 396ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(username_textfield_); 397ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 398ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // User passphrase label, input and visble button. 400ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->StartRow(0, column_view_set_id); 401ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(new views::Label(UTF16ToWide( 402ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen l10n_util::GetStringUTF16( 403ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_USER_PASSPHRASE)))); 404ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_passphrase_textfield_ = new views::Textfield( 405ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::Textfield::STYLE_PASSWORD); 406ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_passphrase_textfield_->SetController(this); 407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (vpn && !vpn->user_passphrase().empty()) 408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_passphrase_textfield_->SetText(UTF8ToUTF16(vpn->user_passphrase())); 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(user_passphrase_textfield_); 410ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 411ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Error label. 413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->StartRow(0, column_view_set_id); 414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->SkipColumns(1); 415ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen error_label_ = new views::Label(); 416ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen error_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 417ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen error_label_->SetColor(SK_ColorRED); 418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen layout->AddView(error_label_); 419ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Enable controls based on provider type combo. 421ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnableControls(); 422ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 423ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set or hide the error text. 424ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UpdateErrorLabel(); 425ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 427ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid VPNConfigView::EnableControls() { 428ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen switch (provider_type_) { 429ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK: 430ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_label_->SetEnabled(true); 431ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_textfield_->SetEnabled(true); 432ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_label_->SetEnabled(false); 433ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_combobox_->SetEnabled(false); 434ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 435ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: 436ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case VirtualNetwork::PROVIDER_TYPE_OPEN_VPN: 437ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_label_->SetEnabled(false); 438ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen psk_passphrase_textfield_->SetEnabled(false); 439ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_label_->SetEnabled(true); 440ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user_cert_combobox_->SetEnabled(true); 441ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 442ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen default: 443ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 444ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 445ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 446ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 447ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace chromeos 448