wifi_config_view.h revision 3551c9c881056c480085172ff9840cab31610854
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"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/cros/cert_library.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/cros/network_property_ui_data.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/options/network_config_view.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;
35ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EAPMethodComboboxModel;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Phase2AuthComboboxModel;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SecurityComboboxModel;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ServerCACertComboboxModel;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserCertComboboxModel;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A dialog box for showing a password textfield.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WifiConfigView : public ChildNetworkConfigView,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       public views::TextfieldController,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       public views::ButtonListener,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       public views::ComboboxListener,
49ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                       public CertLibrary::Observer,
50ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                       public NetworkStateHandlerObserver {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  WifiConfigView(NetworkConfigView* parent,
53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                 const std::string& service_path,
54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                 bool show_8021x);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WifiConfigView();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // views::TextfieldController
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ContentsChanged(views::Textfield* sender,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const string16& new_contents) OVERRIDE;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandleKeyEvent(views::Textfield* sender,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const ui::KeyEvent& key_event) OVERRIDE;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // views::ButtonListener
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ButtonPressed(views::Button* sender,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const ui::Event& event) OVERRIDE;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // views::ComboboxListener
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSelectedIndexChanged(views::Combobox* combobox) OVERRIDE;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // CertLibrary::Observer
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnCertificatesLoaded(bool initial_load) OVERRIDE;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // ChildNetworkConfigView
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual string16 GetTitle() const OVERRIDE;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* GetInitiallyFocusedView() OVERRIDE;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanLogin() OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Login() OVERRIDE;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cancel() OVERRIDE;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitFocus() OVERRIDE;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // NetworkStateHandlerObserver
82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE;
83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Parses a WiFi UI |property| from the ONC associated with |network|. |key|
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is the property name within the ONC WiFi dictionary.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void ParseWiFiUIProperty(NetworkPropertyUIData* property_ui_data,
87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                                  const NetworkState* network,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const std::string& key);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Parses a WiFi EAP UI |property| from the ONC associated with |network|.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |key| is the property name within the ONC WiFi.EAP dictionary.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void ParseWiFiEAPUIProperty(NetworkPropertyUIData* property_ui_data,
93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                                     const NetworkState* network,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const std::string& key);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes UI.  If |show_8021x| includes 802.1x config options.
98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  void Init(bool show_8021x);
99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Callback to initialize fields from uncached network properties.
101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  void InitFromProperties(bool show_8021x,
102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                          const std::string& service_path,
103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                          const base::DictionaryValue& dictionary);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get input values.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetSsid() const;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetPassphrase() const;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetSaveCredentials() const;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetShareNetwork(bool share_default) const;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get various 802.1X EAP values from the widgets.
112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  std::string GetEapMethod() const;
113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  std::string GetEapPhase2Auth() const;
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string GetEapServerCaCertPEM() const;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetEapUseSystemCas() const;
1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::string GetEapSubjectMatch() const;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetEapClientCertPkcs11Id() const;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetEapIdentity() const;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string GetEapAnonymousIdentity() const;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Fill in |properties| with the appropriate values.
122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  void SetEapProperties(base::DictionaryValue* properties);
123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the EAP method requires a user certificate.
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool UserCertRequired() const;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if at least one user certificate is installed.
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool HaveUserCerts() const;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if there is a selected user certificate and it is valid.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsUserCertValid() const;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the phase 2 auth is relevant.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool Phase2AuthActive() const;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the current configuration requires a passphrase.
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool PassphraseActive() const;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if a user cert should be selected.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool UserCertActive() const;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if a CA cert selection should be allowed.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool CaCertActive() const;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates state of the Login button.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateDialogButtons();
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Enable/Disable EAP fields as appropriate based on selected EAP method.
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RefreshEapFields();
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Enable/Disable "share this network" checkbox.
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RefreshShareCheckbox();
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the error text label.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateErrorLabel();
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkPropertyUIData eap_method_ui_data_;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkPropertyUIData phase_2_auth_ui_data_;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkPropertyUIData user_cert_ui_data_;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkPropertyUIData server_ca_cert_ui_data_;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkPropertyUIData identity_ui_data_;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkPropertyUIData identity_anonymous_ui_data_;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkPropertyUIData save_credentials_ui_data_;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NetworkPropertyUIData passphrase_ui_data_;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Textfield* ssid_textfield_;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<internal::EAPMethodComboboxModel> eap_method_combobox_model_;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Combobox* eap_method_combobox_;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* phase_2_auth_label_;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<internal::Phase2AuthComboboxModel> phase_2_auth_combobox_model_;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Combobox* phase_2_auth_combobox_;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* user_cert_label_;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<internal::UserCertComboboxModel> user_cert_combobox_model_;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Combobox* user_cert_combobox_;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* server_ca_cert_label_;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<internal::ServerCACertComboboxModel>
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      server_ca_cert_combobox_model_;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Combobox* server_ca_cert_combobox_;
1793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  views::Label* subject_match_label_;
1803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  views::Textfield* subject_match_textfield_;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* identity_label_;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Textfield* identity_textfield_;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* identity_anonymous_label_;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Textfield* identity_anonymous_textfield_;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Checkbox* save_credentials_checkbox_;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Checkbox* share_network_checkbox_;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* shared_network_label_;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<internal::SecurityComboboxModel> security_combobox_model_;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Combobox* security_combobox_;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* passphrase_label_;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Textfield* passphrase_textfield_;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::ToggleImageButton* passphrase_visible_button_;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* error_label_;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::WeakPtrFactory<WifiConfigView> weak_ptr_factory_;
196ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WifiConfigView);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_OPTIONS_WIFI_CONFIG_VIEW_H_
203