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