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" 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/memory/weak_ptr.h" 145e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string16.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/options/cert_library.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/options/network_config_view.h" 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/options/network_property_ui_data.h" 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_state_handler_observer.h" 19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "third_party/cros_system_api/dbus/service_constants.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/combobox_model.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/button.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/combobox/combobox_listener.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/textfield/textfield_controller.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Checkbox; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Label; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ToggleImageButton; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass NetworkState; 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PassphraseTextfield; 36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EAPMethodComboboxModel; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Phase2AuthComboboxModel; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SecurityComboboxModel; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ServerCACertComboboxModel; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserCertComboboxModel; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A dialog box for configuring Wifi and Ethernet networks 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WifiConfigView : public ChildNetworkConfigView, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public views::TextfieldController, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public views::ButtonListener, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public views::ComboboxListener, 51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch public CertLibrary::Observer, 52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch public NetworkStateHandlerObserver { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // If |service_path| is not empty it identifies the network to be configured. 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Otherwise |show_8021x| determines whether or not to show the 'advanced' 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // 8021x configuration UI for a hidden WiFi network. 57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WifiConfigView(NetworkConfigView* parent, 58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& service_path, 59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch bool show_8021x); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WifiConfigView(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // views::TextfieldController 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ContentsChanged(views::Textfield* sender, 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& new_contents) OVERRIDE; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleKeyEvent(views::Textfield* sender, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::KeyEvent& key_event) OVERRIDE; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // views::ButtonListener 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ButtonPressed(views::Button* sender, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Event& event) OVERRIDE; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // views::ComboboxListener 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnPerformAction(views::Combobox* combobox) OVERRIDE; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // CertLibrary::Observer 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCertificatesLoaded(bool initial_load) OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // ChildNetworkConfigView 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetTitle() const OVERRIDE; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual views::View* GetInitiallyFocusedView() OVERRIDE; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanLogin() OVERRIDE; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Login() OVERRIDE; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Cancel() OVERRIDE; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitFocus() OVERRIDE; 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual bool IsConfigureDialog() OVERRIDE; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // NetworkStateHandlerObserver 88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE; 89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Parses a UI |property| from the ONC associated with |network|. |key| 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // is the property name within the ONC dictionary. 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static void ParseUIProperty(NetworkPropertyUIData* property_ui_data, 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const NetworkState* network, 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& key); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Parses an EAP UI |property| from the ONC associated with |network|. 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |key| is the property name within the ONC EAP dictionary. 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static void ParseEAPUIProperty(NetworkPropertyUIData* property_ui_data, 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const NetworkState* network, 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& key); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 103424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) friend class internal::UserCertComboboxModel; 104424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // This will initialize the view depending on whether an existing network 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // is being configured, the type of network, and the security model (i.e. 107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // simple password encryption or 802.1x). 108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void Init(bool show_8021x); 109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Callback to initialize fields from uncached network properties. 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void InitFromProperties(bool show_8021x, 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& service_path, 113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const base::DictionaryValue& dictionary); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get input values. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetSsid() const; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetPassphrase() const; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetSaveCredentials() const; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetShareNetwork(bool share_default) const; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get various 802.1X EAP values from the widgets. 122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string GetEapMethod() const; 123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string GetEapPhase2Auth() const; 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string GetEapServerCaCertPEM() const; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetEapUseSystemCas() const; 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string GetEapSubjectMatch() const; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetEapClientCertPkcs11Id() const; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetEapIdentity() const; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetEapAnonymousIdentity() const; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Fill in |properties| with the properties for the selected client 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // certificate or empty properties if no client cert is required. 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void SetEapClientCertProperties(base::DictionaryValue* properties) const; 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 135ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Fill in |properties| with the appropriate values. 136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SetEapProperties(base::DictionaryValue* properties); 137ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the EAP method requires a user certificate. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool UserCertRequired() const; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if at least one user certificate is installed. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HaveUserCerts() const; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if there is a selected user certificate and it is valid. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsUserCertValid() const; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the phase 2 auth is relevant. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Phase2AuthActive() const; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether the current configuration requires a passphrase. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool PassphraseActive() const; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if a user cert should be selected. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool UserCertActive() const; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if a CA cert selection should be allowed. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CaCertActive() const; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates state of the Login button. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateDialogButtons(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable/Disable EAP fields as appropriate based on selected EAP method. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RefreshEapFields(); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable/Disable "share this network" checkbox. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RefreshShareCheckbox(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates the error text label. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateErrorLabel(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Helper method, returns NULL if |service_path_| is empty, otherwise returns 172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // the NetworkState* associated with |service_path_| or NULL if none exists. 173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const NetworkState* GetNetworkState() const; 174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData eap_method_ui_data_; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData phase_2_auth_ui_data_; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData user_cert_ui_data_; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData server_ca_cert_ui_data_; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData identity_ui_data_; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData identity_anonymous_ui_data_; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData save_credentials_ui_data_; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkPropertyUIData passphrase_ui_data_; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Textfield* ssid_textfield_; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::EAPMethodComboboxModel> eap_method_combobox_model_; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* eap_method_combobox_; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* phase_2_auth_label_; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::Phase2AuthComboboxModel> phase_2_auth_combobox_model_; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* phase_2_auth_combobox_; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* user_cert_label_; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::UserCertComboboxModel> user_cert_combobox_model_; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* user_cert_combobox_; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* server_ca_cert_label_; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::ServerCACertComboboxModel> 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_ca_cert_combobox_model_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* server_ca_cert_combobox_; 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) views::Label* subject_match_label_; 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) views::Textfield* subject_match_textfield_; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* identity_label_; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Textfield* identity_textfield_; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* identity_anonymous_label_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Textfield* identity_anonymous_textfield_; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Checkbox* save_credentials_checkbox_; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Checkbox* share_network_checkbox_; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* shared_network_label_; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<internal::SecurityComboboxModel> security_combobox_model_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Combobox* security_combobox_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* passphrase_label_; 20958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PassphraseTextfield* passphrase_textfield_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ToggleImageButton* passphrase_visible_button_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Label* error_label_; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 213ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::WeakPtrFactory<WifiConfigView> weak_ptr_factory_; 214ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WifiConfigView); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_VIEW_H_ 221