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