wifi_config_view.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_VIEW_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_VIEW_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string16.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/cros/cert_library.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/options/network_config_view.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/combobox_model.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/button.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/combobox/combobox_listener.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/textfield/textfield_controller.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Checkbox; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Label; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ToggleImageButton; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EAPMethodComboboxModel; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Phase2AuthComboboxModel; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SecurityComboboxModel; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ServerCACertComboboxModel; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserCertComboboxModel; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A dialog box for showing a password textfield. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WifiConfigView : public ChildNetworkConfigView, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public views::TextfieldController, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public views::ButtonListener, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public views::ComboboxListener, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public CertLibrary::Observer { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wifi login dialog for wifi network |wifi|. |wifi| must be a non NULL 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pointer to a WifiNetwork in NetworkLibrary. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiConfigView(NetworkConfigView* parent, WifiNetwork* wifi); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wifi login dialog for "Joining other network..." 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WifiConfigView(NetworkConfigView* parent, bool show_8021x); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WifiConfigView(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // views::TextfieldController: 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ContentsChanged(views::Textfield* sender, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& new_contents) OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleKeyEvent(views::Textfield* sender, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::KeyEvent& key_event) OVERRIDE; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // views::ButtonListener: 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ButtonPressed(views::Button* sender, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Event& event) OVERRIDE; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // views::ComboboxListener: 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnSelectedIndexChanged(views::Combobox* combobox) OVERRIDE; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CertLibrary::Observer: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCertificatesLoaded(bool initial_load) OVERRIDE; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ChildNetworkConfigView: 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual views::View* GetInitiallyFocusedView() OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanLogin() OVERRIDE; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Login() OVERRIDE; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Cancel() OVERRIDE; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitFocus() OVERRIDE; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses a WiFi UI |property| from the ONC associated with |network|. |key| 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is the property name within the ONC WiFi dictionary. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void ParseWiFiUIProperty(NetworkPropertyUIData* property_ui_data, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Network* network, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses a WiFi EAP UI |property| from the ONC associated with |network|. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |key| is the property name within the ONC WiFi.EAP dictionary. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void ParseWiFiEAPUIProperty(NetworkPropertyUIData* property_ui_data, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Network* network, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes UI. If |show_8021x| includes 802.1x config options. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init(WifiNetwork* wifi, bool show_8021x); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get input values. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetSsid() const; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetPassphrase() const; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetSaveCredentials() const; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetShareNetwork(bool share_default) const; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get various 802.1X EAP values from the widgets. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EAPMethod GetEapMethod() const; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EAPPhase2Auth GetEapPhase2Auth() const; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetEapServerCaCertNssNickname() const; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetEapUseSystemCas() const; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetEapClientCertPkcs11Id() const; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetEapIdentity() const; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetEapAnonymousIdentity() const; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the EAP method requires a user certificate. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool UserCertRequired() const; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if at least one user certificate is installed. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HaveUserCerts() const; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if there is a selected user certificate and it is valid. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsUserCertValid() const; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the phase 2 auth is relevant. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Phase2AuthActive() const; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether the current configuration requires a passphrase. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool PassphraseActive() const; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if a user cert should be selected. 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool UserCertActive() const; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if a CA cert selection should be allowed. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CaCertActive() const; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates state of the Login button. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateDialogButtons(); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable/Disable EAP fields as appropriate based on selected EAP method. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RefreshEapFields(); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable/Disable "share this network" checkbox. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RefreshShareCheckbox(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates the error text label. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateErrorLabel(); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CertLibrary* cert_library_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData eap_method_ui_data_; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData phase_2_auth_ui_data_; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData user_cert_ui_data_; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData server_ca_cert_ui_data_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData identity_ui_data_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData identity_anonymous_ui_data_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData save_credentials_ui_data_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData passphrase_ui_data_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Textfield* ssid_textfield_; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::EAPMethodComboboxModel> eap_method_combobox_model_; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* eap_method_combobox_; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* phase_2_auth_label_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::Phase2AuthComboboxModel> phase_2_auth_combobox_model_; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* phase_2_auth_combobox_; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* user_cert_label_; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::UserCertComboboxModel> user_cert_combobox_model_; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* user_cert_combobox_; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* server_ca_cert_label_; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::ServerCACertComboboxModel> 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_ca_cert_combobox_model_; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* server_ca_cert_combobox_; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* identity_label_; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Textfield* identity_textfield_; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* identity_anonymous_label_; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Textfield* identity_anonymous_textfield_; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Checkbox* save_credentials_checkbox_; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Checkbox* share_network_checkbox_; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* shared_network_label_; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::SecurityComboboxModel> security_combobox_model_; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* security_combobox_; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* passphrase_label_; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Textfield* passphrase_textfield_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ToggleImageButton* passphrase_visible_button_; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* error_label_; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WifiConfigView); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_VIEW_H_ 183