- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / options / vpn_config_view.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_CHROMEOS_OPTIONS_VPN_CONFIG_VIEW_H_
6 #define CHROME_BROWSER_CHROMEOS_OPTIONS_VPN_CONFIG_VIEW_H_
7
8 #include <string>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "base/strings/string16.h"
12 #include "chrome/browser/chromeos/options/cert_library.h"
13 #include "chrome/browser/chromeos/options/network_config_view.h"
14 #include "chrome/browser/chromeos/options/network_property_ui_data.h"
15 #include "chrome/browser/chromeos/options/passphrase_textfield.h"
16 #include "ui/views/controls/button/button.h"
17 #include "ui/views/controls/combobox/combobox_listener.h"
18 #include "ui/views/controls/textfield/textfield_controller.h"
19 #include "ui/views/view.h"
20
21 namespace base {
22 class DictionaryValue;
23 }
24
25 namespace views {
26 class Checkbox;
27 class GridLayout;
28 class Label;
29 }
30
31 namespace chromeos {
32
33 class NetworkState;
34
35 namespace internal {
36 class ProviderTypeComboboxModel;
37 class VpnServerCACertComboboxModel;
38 class VpnUserCertComboboxModel;
39 }
40
41 // A dialog box to allow configuration of VPN connection.
42 class VPNConfigView : public ChildNetworkConfigView,
43                       public views::TextfieldController,
44                       public views::ButtonListener,
45                       public views::ComboboxListener,
46                       public CertLibrary::Observer {
47  public:
48   VPNConfigView(NetworkConfigView* parent, const std::string& service_path);
49   virtual ~VPNConfigView();
50
51   // views::TextfieldController:
52   virtual void ContentsChanged(views::Textfield* sender,
53                                const string16& new_contents) OVERRIDE;
54   virtual bool HandleKeyEvent(views::Textfield* sender,
55                               const ui::KeyEvent& key_event) OVERRIDE;
56
57   // views::ButtonListener:
58   virtual void ButtonPressed(views::Button* sender,
59                              const ui::Event& event) OVERRIDE;
60
61   // views::ComboboxListener:
62   virtual void OnSelectedIndexChanged(views::Combobox* combobox) OVERRIDE;
63
64   // CertLibrary::Observer:
65   virtual void OnCertificatesLoaded(bool initial_load) OVERRIDE;
66
67   // ChildNetworkConfigView:
68   virtual string16 GetTitle() const OVERRIDE;
69   virtual views::View* GetInitiallyFocusedView() OVERRIDE;
70   virtual bool CanLogin() OVERRIDE;
71   virtual bool Login() OVERRIDE;
72   virtual void Cancel() OVERRIDE;
73   virtual void InitFocus() OVERRIDE;
74
75  private:
76   // Initializes data members and create UI controls.
77   void Init();
78
79   // Callback to initialize fields from uncached network properties.
80   void InitFromProperties(const std::string& service_path,
81                           const base::DictionaryValue& dictionary);
82   void ParseUIProperties(const NetworkState* vpn);
83   void GetPropertiesError(const std::string& error_name,
84                           scoped_ptr<base::DictionaryValue> error_data);
85
86   // Helper function to set configurable properties.
87   void SetConfigProperties(base::DictionaryValue* properties);
88
89   // Set and update all control values.
90   void Refresh();
91
92   // Update various controls.
93   void UpdateControlsToEnable();
94   void UpdateControls();
95   void UpdateErrorLabel();
96
97   // Update state of the Login button.
98   void UpdateCanLogin();
99
100   // Returns true if there is at least one user certificate installed.
101   bool HaveUserCerts() const;
102
103   // Returns true if there is a selected user certificate and it is valid.
104   bool IsUserCertValid() const;
105
106   // Get text from input field.
107   const std::string GetTextFromField(views::Textfield* textfield,
108                                      bool trim_whitespace) const;
109
110   // Get passphrase from input field.
111   const std::string GetPassphraseFromField(
112       PassphraseTextfield* textfield) const;
113
114   // Convenience methods to get text from input field or cached VirtualNetwork.
115   const std::string GetService() const;
116   const std::string GetServer() const;
117   const std::string GetPSKPassphrase() const;
118   const std::string GetUsername() const;
119   const std::string GetUserPassphrase() const;
120   const std::string GetOTP() const;
121   const std::string GetGroupName() const;
122   const std::string GetServerCACertPEM() const;
123   const std::string GetUserCertID() const;
124   bool GetSaveCredentials() const;
125   int GetProviderTypeIndex() const;
126   std::string GetProviderTypeString() const;
127
128   // Parses a VPN UI |property| from the given |network|. |key| is the property
129   // name within the type-specific VPN subdictionary named |dict_key|.
130   void ParseVPNUIProperty(const NetworkState* network,
131                           const std::string& dict_key,
132                           const std::string& key,
133                           NetworkPropertyUIData* property_ui_data);
134
135   string16 service_name_from_server_;
136   bool service_text_modified_;
137
138   // Initialized in Init():
139
140   bool enable_psk_passphrase_;
141   bool enable_user_cert_;
142   bool enable_server_ca_cert_;
143   bool enable_otp_;
144   bool enable_group_name_;
145
146   NetworkPropertyUIData ca_cert_ui_data_;
147   NetworkPropertyUIData psk_passphrase_ui_data_;
148   NetworkPropertyUIData user_cert_ui_data_;
149   NetworkPropertyUIData username_ui_data_;
150   NetworkPropertyUIData user_passphrase_ui_data_;
151   NetworkPropertyUIData group_name_ui_data_;
152   NetworkPropertyUIData save_credentials_ui_data_;
153
154   int title_;
155
156   views::GridLayout* layout_;
157   views::Textfield* server_textfield_;
158   views::Label* service_text_;
159   views::Textfield* service_textfield_;
160   scoped_ptr<internal::ProviderTypeComboboxModel> provider_type_combobox_model_;
161   views::Combobox* provider_type_combobox_;
162   views::Label* provider_type_text_label_;
163   views::Label* psk_passphrase_label_;
164   PassphraseTextfield* psk_passphrase_textfield_;
165   views::Label* user_cert_label_;
166   scoped_ptr<internal::VpnUserCertComboboxModel> user_cert_combobox_model_;
167   views::Combobox* user_cert_combobox_;
168   views::Label* server_ca_cert_label_;
169   scoped_ptr<internal::VpnServerCACertComboboxModel>
170       server_ca_cert_combobox_model_;
171   views::Combobox* server_ca_cert_combobox_;
172   views::Textfield* username_textfield_;
173   PassphraseTextfield* user_passphrase_textfield_;
174   views::Label* otp_label_;
175   views::Textfield* otp_textfield_;
176   views::Label* group_name_label_;
177   views::Textfield* group_name_textfield_;
178   views::Checkbox* save_credentials_checkbox_;
179   views::Label* error_label_;
180
181   // Cached VPN properties, only set when configuring an existing network.
182   int provider_type_index_;
183   std::string ca_cert_pem_;
184   std::string client_cert_id_;
185
186   base::WeakPtrFactory<VPNConfigView> weak_ptr_factory_;
187
188   DISALLOW_COPY_AND_ASSIGN(VPNConfigView);
189 };
190
191 }  // namespace chromeos
192
193 #endif  // CHROME_BROWSER_CHROMEOS_OPTIONS_VPN_CONFIG_VIEW_H_