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)#include "chrome/browser/chromeos/options/wifi_config_view.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/chromeos/network/network_connect.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/bind.h"
95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h"
105e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h"
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/enrollment_dialog_view.h"
133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/chromeos/net/onc_utils.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/options/passphrase_textfield.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/generated_resources.h"
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/theme_resources.h"
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/login/login_state.h"
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/network/client_cert_util.h"
20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_configuration_handler.h"
21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_event_log.h"
22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_handler.h"
23ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_state.h"
24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_state_handler.h"
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_ui_data.h"
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/network/shill_property_util.h"
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h"
28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "third_party/cros_system_api/dbus/service_constants.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/checkbox.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/image_button.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/combobox/combobox.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/layout_constants.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/window/dialog_client_view.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Combobox that supports a preferred width.  Used by Server CA combobox
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// because the strings inside it are too wide.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ComboboxWithWidth : public views::Combobox {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ComboboxWithWidth(ui::ComboboxModel* model, int width)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : Combobox(model),
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        width_(width) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ComboboxWithWidth() {}
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gfx::Size size = Combobox::GetPreferredSize();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size.set_width(width_);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return size;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int width_;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ComboboxWithWidth);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SecurityComboboxIndex {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SECURITY_INDEX_NONE  = 0,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SECURITY_INDEX_WEP   = 1,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SECURITY_INDEX_PSK   = 2,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SECURITY_INDEX_COUNT = 3
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Methods in alphabetical order.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum EAPMethodComboboxIndex {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EAP_METHOD_INDEX_NONE  = 0,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EAP_METHOD_INDEX_LEAP  = 1,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EAP_METHOD_INDEX_PEAP  = 2,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EAP_METHOD_INDEX_TLS   = 3,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EAP_METHOD_INDEX_TTLS  = 4,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EAP_METHOD_INDEX_COUNT = 5
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum Phase2AuthComboboxIndex {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PHASE_2_AUTH_INDEX_AUTO     = 0,  // LEAP, EAP-TLS have only this auth.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PHASE_2_AUTH_INDEX_MD5      = 1,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PHASE_2_AUTH_INDEX_MSCHAPV2 = 2,  // PEAP has up to this auth.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PHASE_2_AUTH_INDEX_MSCHAP   = 3,
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PHASE_2_AUTH_INDEX_PAP      = 4,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PHASE_2_AUTH_INDEX_CHAP     = 5,  // EAP-TTLS has up to this auth.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PHASE_2_AUTH_INDEX_COUNT    = 6
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid ShillError(const std::string& function,
93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                const std::string& error_name,
94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                scoped_ptr<base::DictionaryValue> error_data) {
95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  NET_LOG_ERROR("Shill Error from WifiConfigView: " + error_name, function);
96ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SecurityComboboxModel : public ui::ComboboxModel {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SecurityComboboxModel();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~SecurityComboboxModel();
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from ui::ComboboxModel:
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetItemCount() const OVERRIDE;
109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetItemAt(int index) OVERRIDE;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SecurityComboboxModel);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EAPMethodComboboxModel : public ui::ComboboxModel {
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EAPMethodComboboxModel();
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~EAPMethodComboboxModel();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from ui::ComboboxModel:
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetItemCount() const OVERRIDE;
122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetItemAt(int index) OVERRIDE;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EAPMethodComboboxModel);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Phase2AuthComboboxModel : public ui::ComboboxModel {
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit Phase2AuthComboboxModel(views::Combobox* eap_method_combobox);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~Phase2AuthComboboxModel();
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from ui::ComboboxModel:
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetItemCount() const OVERRIDE;
135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetItemAt(int index) OVERRIDE;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Combobox* eap_method_combobox_;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(Phase2AuthComboboxModel);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ServerCACertComboboxModel : public ui::ComboboxModel {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ServerCACertComboboxModel();
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ServerCACertComboboxModel();
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from ui::ComboboxModel:
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetItemCount() const OVERRIDE;
150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetItemAt(int index) OVERRIDE;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ServerCACertComboboxModel);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserCertComboboxModel : public ui::ComboboxModel {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
158424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  explicit UserCertComboboxModel(WifiConfigView* owner);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UserCertComboboxModel();
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from ui::ComboboxModel:
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetItemCount() const OVERRIDE;
163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetItemAt(int index) OVERRIDE;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
166424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  WifiConfigView* owner_;
167424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(UserCertComboboxModel);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SecurityComboboxModel -------------------------------------------------------
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SecurityComboboxModel::SecurityComboboxModel() {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SecurityComboboxModel::~SecurityComboboxModel() {
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int SecurityComboboxModel::GetItemCount() const {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return SECURITY_INDEX_COUNT;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 SecurityComboboxModel::GetItemAt(int index) {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (index == SECURITY_INDEX_NONE)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SECURITY_NONE);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == SECURITY_INDEX_WEP)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SECURITY_WEP);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == SECURITY_INDEX_PSK)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SECURITY_PSK);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return base::string16();
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// EAPMethodComboboxModel ------------------------------------------------------
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EAPMethodComboboxModel::EAPMethodComboboxModel() {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EAPMethodComboboxModel::~EAPMethodComboboxModel() {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int EAPMethodComboboxModel::GetItemCount() const {
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return EAP_METHOD_INDEX_COUNT;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 EAPMethodComboboxModel::GetItemAt(int index) {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (index == EAP_METHOD_INDEX_NONE)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_EAP_METHOD_NONE);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == EAP_METHOD_INDEX_LEAP)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_EAP_METHOD_LEAP);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == EAP_METHOD_INDEX_PEAP)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_EAP_METHOD_PEAP);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == EAP_METHOD_INDEX_TLS)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_EAP_METHOD_TLS);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == EAP_METHOD_INDEX_TTLS)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_EAP_METHOD_TTLS);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return base::string16();
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Phase2AuthComboboxModel -----------------------------------------------------
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Phase2AuthComboboxModel::Phase2AuthComboboxModel(
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    views::Combobox* eap_method_combobox)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : eap_method_combobox_(eap_method_combobox) {
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Phase2AuthComboboxModel::~Phase2AuthComboboxModel() {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int Phase2AuthComboboxModel::GetItemCount() const {
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (eap_method_combobox_->selected_index()) {
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAP_METHOD_INDEX_NONE:
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAP_METHOD_INDEX_TLS:
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAP_METHOD_INDEX_LEAP:
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return PHASE_2_AUTH_INDEX_AUTO + 1;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAP_METHOD_INDEX_PEAP:
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return PHASE_2_AUTH_INDEX_MSCHAPV2 + 1;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAP_METHOD_INDEX_TTLS:
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return PHASE_2_AUTH_INDEX_CHAP + 1;
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 Phase2AuthComboboxModel::GetItemAt(int index) {
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (index == PHASE_2_AUTH_INDEX_AUTO)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PHASE_2_AUTH_AUTO);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == PHASE_2_AUTH_INDEX_MD5)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PHASE_2_AUTH_MD5);
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == PHASE_2_AUTH_INDEX_MSCHAPV2)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PHASE_2_AUTH_MSCHAPV2);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == PHASE_2_AUTH_INDEX_MSCHAP)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PHASE_2_AUTH_MSCHAP);
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == PHASE_2_AUTH_INDEX_PAP)
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PHASE_2_AUTH_PAP);
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (index == PHASE_2_AUTH_INDEX_CHAP)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PHASE_2_AUTH_CHAP);
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return base::string16();
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ServerCACertComboboxModel ---------------------------------------------------
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ServerCACertComboboxModel::ServerCACertComboboxModel() {
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ServerCACertComboboxModel::~ServerCACertComboboxModel() {
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ServerCACertComboboxModel::GetItemCount() const {
284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (CertLibrary::Get()->CertificatesLoading())
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 1;  // "Loading"
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // First "Default", then the certs, then "Do not check".
287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return CertLibrary::Get()->NumCertificates(
288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      CertLibrary::CERT_TYPE_SERVER_CA) + 2;
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 ServerCACertComboboxModel::GetItemAt(int index) {
292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (CertLibrary::Get()->CertificatesLoading())
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_LOADING);
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (index == 0)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_SERVER_CA_DEFAULT);
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (index == GetItemCount() - 1)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_SERVER_CA_DO_NOT_CHECK);
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int cert_index = index - 1;
302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return CertLibrary::Get()->GetCertDisplayStringAt(
303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      CertLibrary::CERT_TYPE_SERVER_CA, cert_index);
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UserCertComboboxModel -------------------------------------------------------
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
308424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)UserCertComboboxModel::UserCertComboboxModel(WifiConfigView* owner)
309424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : owner_(owner) {
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UserCertComboboxModel::~UserCertComboboxModel() {
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int UserCertComboboxModel::GetItemCount() const {
316424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!owner_->UserCertActive())
31723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    return 1;  // "None installed" (combobox must have at least 1 entry)
318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (CertLibrary::Get()->CertificatesLoading())
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 1;  // "Loading"
320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int num_certs =
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      CertLibrary::Get()->NumCertificates(CertLibrary::CERT_TYPE_USER);
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (num_certs == 0)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 1;  // "None installed"
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return num_certs;
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
327a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 UserCertComboboxModel::GetItemAt(int index) {
328424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!owner_->UserCertActive())
32923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    return l10n_util::GetStringUTF16(
33023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_USER_CERT_NONE_INSTALLED);
331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (CertLibrary::Get()->CertificatesLoading())
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_LOADING);
334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (CertLibrary::Get()->NumCertificates(CertLibrary::CERT_TYPE_USER) == 0)
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return l10n_util::GetStringUTF16(
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_USER_CERT_NONE_INSTALLED);
337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return CertLibrary::Get()->GetCertDisplayStringAt(
338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      CertLibrary::CERT_TYPE_USER, index);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace internal
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
343ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochWifiConfigView::WifiConfigView(NetworkConfigView* parent,
344ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                               const std::string& service_path,
345ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                               bool show_8021x)
346ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    : ChildNetworkConfigView(parent, service_path),
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ssid_textfield_(NULL),
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      eap_method_combobox_(NULL),
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      phase_2_auth_label_(NULL),
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      phase_2_auth_combobox_(NULL),
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      user_cert_label_(NULL),
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      user_cert_combobox_(NULL),
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      server_ca_cert_label_(NULL),
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      server_ca_cert_combobox_(NULL),
3553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      subject_match_label_(NULL),
3563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      subject_match_textfield_(NULL),
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      identity_label_(NULL),
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      identity_textfield_(NULL),
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      identity_anonymous_label_(NULL),
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      identity_anonymous_textfield_(NULL),
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      save_credentials_checkbox_(NULL),
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      share_network_checkbox_(NULL),
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      shared_network_label_(NULL),
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      security_combobox_(NULL),
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      passphrase_label_(NULL),
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      passphrase_textfield_(NULL),
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      passphrase_visible_button_(NULL),
368ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      error_label_(NULL),
369ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      weak_ptr_factory_(this) {
370ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  Init(show_8021x);
371ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  NetworkHandler::Get()->network_state_handler()->AddObserver(this, FROM_HERE);
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WifiConfigView::~WifiConfigView() {
3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  RemoveAllChildViews(true);  // Destroy children before models
376ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (NetworkHandler::IsInitialized()) {
377ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    NetworkHandler::Get()->network_state_handler()->RemoveObserver(
378ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        this, FROM_HERE);
379ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  }
380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CertLibrary::Get()->RemoveObserver(this);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
383a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 WifiConfigView::GetTitle() const {
384effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const NetworkState* network = GetNetworkState();
385effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (network && network->type() == shill::kTypeEthernet)
386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_CONFIGURE_ETHERNET);
38790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_JOIN_WIFI_NETWORKS);
38890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
38990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* WifiConfigView::GetInitiallyFocusedView() {
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return a reasonable widget for initial focus,
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // depending on what we're showing.
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ssid_textfield_)
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return ssid_textfield_;
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (eap_method_combobox_)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return eap_method_combobox_;
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (passphrase_textfield_ && passphrase_textfield_->enabled())
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return passphrase_textfield_;
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::CanLogin() {
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const size_t kMinWirelessPasswordLen = 5;
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
406effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // We either have an existing network or the user entered an SSID.
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (service_path_.empty() && GetSsid().empty())
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If the network requires a passphrase, make sure it is the right length.
41158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (passphrase_textfield_ != NULL &&
41258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      passphrase_textfield_->enabled() &&
41358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      !passphrase_textfield_->show_fake() &&
41458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      passphrase_textfield_->text().length() < kMinWirelessPasswordLen)
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If we're using EAP, we must have a method.
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (eap_method_combobox_ &&
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      eap_method_combobox_->selected_index() == EAP_METHOD_INDEX_NONE)
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Block login if certs are required but user has none.
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (UserCertRequired() && (!HaveUserCerts() || !IsUserCertValid()))
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::UserCertRequired() const {
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return UserCertActive();
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::HaveUserCerts() const {
434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return CertLibrary::Get()->NumCertificates(CertLibrary::CERT_TYPE_USER) > 0;
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::IsUserCertValid() const {
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!UserCertActive())
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int index = user_cert_combobox_->selected_index();
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (index < 0)
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Currently only hardware-backed user certificates are valid.
444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (CertLibrary::Get()->IsHardwareBacked() &&
445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      !CertLibrary::Get()->IsCertHardwareBackedAt(
446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          CertLibrary::CERT_TYPE_USER, index))
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::Phase2AuthActive() const {
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (phase_2_auth_combobox_)
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return phase_2_auth_combobox_->model()->GetItemCount() > 1;
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::PassphraseActive() const {
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (eap_method_combobox_) {
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // No password for EAP-TLS.
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int index = eap_method_combobox_->selected_index();
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return index != EAP_METHOD_INDEX_NONE && index != EAP_METHOD_INDEX_TLS;
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (security_combobox_) {
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return security_combobox_->selected_index() != SECURITY_INDEX_NONE;
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::UserCertActive() const {
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // User certs only for EAP-TLS.
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (eap_method_combobox_)
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return eap_method_combobox_->selected_index() == EAP_METHOD_INDEX_TLS;
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::CaCertActive() const {
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No server CA certs for LEAP.
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (eap_method_combobox_) {
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int index = eap_method_combobox_->selected_index();
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return index != EAP_METHOD_INDEX_NONE && index != EAP_METHOD_INDEX_LEAP;
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiConfigView::UpdateDialogButtons() {
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parent_->GetDialogClientView()->UpdateDialogButtons();
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiConfigView::RefreshEapFields() {
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If EAP method changes, the phase 2 auth choices may have changed also.
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  phase_2_auth_combobox_->ModelChanged();
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  phase_2_auth_combobox_->SetSelectedIndex(0);
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool phase_2_auth_enabled = Phase2AuthActive();
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  phase_2_auth_combobox_->SetEnabled(phase_2_auth_enabled &&
49590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                     phase_2_auth_ui_data_.IsEditable());
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  phase_2_auth_label_->SetEnabled(phase_2_auth_enabled);
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Passphrase.
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool passphrase_enabled = PassphraseActive();
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  passphrase_textfield_->SetEnabled(passphrase_enabled &&
50190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                    passphrase_ui_data_.IsEditable());
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  passphrase_label_->SetEnabled(passphrase_enabled);
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!passphrase_enabled)
504a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    passphrase_textfield_->SetText(base::string16());
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // User cert.
507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool certs_loading = CertLibrary::Get()->CertificatesLoading();
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool user_cert_enabled = UserCertActive();
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_cert_label_->SetEnabled(user_cert_enabled);
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool have_user_certs = !certs_loading && HaveUserCerts();
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_cert_combobox_->SetEnabled(user_cert_enabled &&
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  have_user_certs &&
51390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                  user_cert_ui_data_.IsEditable());
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_cert_combobox_->ModelChanged();
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_cert_combobox_->SetSelectedIndex(0);
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Server CA.
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ca_cert_enabled = CaCertActive();
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  server_ca_cert_label_->SetEnabled(ca_cert_enabled);
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  server_ca_cert_combobox_->SetEnabled(ca_cert_enabled &&
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       !certs_loading &&
52290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                       server_ca_cert_ui_data_.IsEditable());
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  server_ca_cert_combobox_->ModelChanged();
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  server_ca_cert_combobox_->SetSelectedIndex(0);
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Subject Match
5273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool subject_match_enabled =
5283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      ca_cert_enabled && eap_method_combobox_ &&
5293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      eap_method_combobox_->selected_index() == EAP_METHOD_INDEX_TLS;
5303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  subject_match_label_->SetEnabled(subject_match_enabled);
5313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  subject_match_textfield_->SetEnabled(subject_match_enabled);
5323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (!subject_match_enabled)
533a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    subject_match_textfield_->SetText(base::string16());
5343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No anonymous identity if no phase 2 auth.
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool identity_anonymous_enabled = phase_2_auth_enabled;
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  identity_anonymous_textfield_->SetEnabled(
53890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      identity_anonymous_enabled && identity_anonymous_ui_data_.IsEditable());
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  identity_anonymous_label_->SetEnabled(identity_anonymous_enabled);
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!identity_anonymous_enabled)
541a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    identity_anonymous_textfield_->SetText(base::string16());
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RefreshShareCheckbox();
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiConfigView::RefreshShareCheckbox() {
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!share_network_checkbox_)
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (security_combobox_ &&
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      security_combobox_->selected_index() == SECURITY_INDEX_NONE) {
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    share_network_checkbox_->SetEnabled(false);
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    share_network_checkbox_->SetChecked(true);
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (eap_method_combobox_ &&
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             (eap_method_combobox_->selected_index() == EAP_METHOD_INDEX_TLS ||
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              user_cert_combobox_->selected_index() != 0)) {
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Can not share TLS network (requires certificate), or any network where
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // user certificates are enabled.
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    share_network_checkbox_->SetEnabled(false);
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    share_network_checkbox_->SetChecked(false);
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
562a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    bool value = false;
563a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    bool enabled = false;
564a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    ChildNetworkConfigView::GetShareStateForLoginState(&value, &enabled);
565a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
566a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    share_network_checkbox_->SetChecked(value);
567a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    share_network_checkbox_->SetEnabled(enabled);
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiConfigView::UpdateErrorLabel() {
572ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::string16 error_msg;
573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (UserCertRequired() && CertLibrary::Get()->CertificatesLoaded()) {
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!HaveUserCerts()) {
575a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      if (!LoginState::Get()->IsUserLoggedIn() ||
5766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          LoginState::Get()->IsGuestSessionUser()) {
577ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        error_msg = l10n_util::GetStringUTF16(
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_LOGIN_FOR_USER_CERT);
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
580ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        error_msg = l10n_util::GetStringUTF16(
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PLEASE_INSTALL_USER_CERT);
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else if (!IsUserCertValid()) {
584ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      error_msg = l10n_util::GetStringUTF16(
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_REQUIRE_HARDWARE_BACKED);
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (error_msg.empty() && !service_path_.empty()) {
589effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    const NetworkState* network = GetNetworkState();
590effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    if (network && network->connection_state() == shill::kStateFailure) {
5914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      error_msg = ash::network_connect::ErrorString(
592effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          network->last_error(), network->path());
593effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!error_msg.empty()) {
596ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    error_label_->SetText(error_msg);
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    error_label_->SetVisible(true);
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    error_label_->SetVisible(false);
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiConfigView::ContentsChanged(views::Textfield* sender,
604a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                     const base::string16& new_contents) {
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UpdateDialogButtons();
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::HandleKeyEvent(views::Textfield* sender,
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const ui::KeyEvent& key_event) {
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (sender == passphrase_textfield_ &&
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      key_event.key_code() == ui::VKEY_RETURN) {
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    parent_->GetDialogClientView()->AcceptWindow();
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiConfigView::ButtonPressed(views::Button* sender,
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const ui::Event& event) {
6195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (sender == passphrase_visible_button_ && passphrase_textfield_) {
6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (passphrase_textfield_->GetTextInputType() == ui::TEXT_INPUT_TYPE_TEXT) {
6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      passphrase_textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD);
6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      passphrase_visible_button_->SetToggled(false);
6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    } else {
6245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      passphrase_textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_TEXT);
6255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      passphrase_visible_button_->SetToggled(true);
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void WifiConfigView::OnPerformAction(views::Combobox* combobox) {
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (combobox == security_combobox_) {
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool passphrase_enabled = PassphraseActive();
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_label_->SetEnabled(passphrase_enabled);
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_textfield_->SetEnabled(passphrase_enabled &&
63790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                      passphrase_ui_data_.IsEditable());
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!passphrase_enabled)
6395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      passphrase_textfield_->SetText(base::string16());
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RefreshShareCheckbox();
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (combobox == user_cert_combobox_) {
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RefreshShareCheckbox();
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (combobox == eap_method_combobox_) {
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RefreshEapFields();
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UpdateDialogButtons();
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UpdateErrorLabel();
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiConfigView::OnCertificatesLoaded(bool initial_load) {
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RefreshEapFields();
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UpdateDialogButtons();
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UpdateErrorLabel();
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::Login() {
657effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const NetworkState* network = GetNetworkState();
6588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
6598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Set configuration properties.
6608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  base::DictionaryValue properties;
6618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
662a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Default shared state for non-private networks is true.
663effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const bool share_default = !network || !network->IsPrivate();
664a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool share_network = GetShareNetwork(share_default);
6658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool only_policy_autoconnect =
6668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      onc::PolicyAllowsOnlyPolicyNetworksToAutoconnect(!share_network);
6678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  if (only_policy_autoconnect) {
6688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    properties.SetBooleanWithoutPathExpansion(shill::kAutoConnectProperty,
6698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                              false);
6708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  }
6718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (service_path_.empty()) {
673effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    // TODO(stevenjb): Support modifying existing EAP configurations.
674effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    // Will probably wait to do this in WebUI instead.
675ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    properties.SetStringWithoutPathExpansion(
67668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kTypeProperty, shill::kTypeWifi);
6774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    shill_property_util::SetSSID(GetSsid(), &properties);
678ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    properties.SetStringWithoutPathExpansion(
67968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kModeProperty, shill::kModeManaged);
680ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    properties.SetBooleanWithoutPathExpansion(
68168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kSaveCredentialsProperty, GetSaveCredentials());
68268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    std::string security = shill::kSecurityNone;
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!eap_method_combobox_) {
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      switch (security_combobox_->selected_index()) {
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        case SECURITY_INDEX_NONE:
68668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          security = shill::kSecurityNone;
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          break;
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        case SECURITY_INDEX_WEP:
68968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          security = shill::kSecurityWep;
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          break;
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        case SECURITY_INDEX_PSK:
69268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          security = shill::kSecurityPsk;
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          break;
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
695ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      std::string passphrase = GetPassphrase();
696ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      if (!passphrase.empty()) {
697ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        properties.SetStringWithoutPathExpansion(
69868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)            shill::kPassphraseProperty, GetPassphrase());
699ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      }
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
70168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      security = shill::kSecurity8021x;
702ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      SetEapProperties(&properties);
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
704ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    properties.SetStringWithoutPathExpansion(
70568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kSecurityProperty, security);
706ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
707ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    // Configure and connect to network.
7088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    ash::network_connect::CreateConfigurationAndConnect(&properties,
7098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                                        share_network);
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
711effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    if (!network) {
712effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      // Shill no longer knows about this network (edge case).
713ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      // TODO(stevenjb): Add notification for this.
714ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      NET_LOG_ERROR("Network not found", service_path_);
715ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      return true;  // Close dialog
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (eap_method_combobox_) {
718ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      SetEapProperties(&properties);
719ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      properties.SetBooleanWithoutPathExpansion(
72068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          shill::kSaveCredentialsProperty, GetSaveCredentials());
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string passphrase = GetPassphrase();
723ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      if (!passphrase.empty()) {
724ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        properties.SetStringWithoutPathExpansion(
72568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)            shill::kPassphraseProperty, passphrase);
726ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      }
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
728effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    if (network->type() == shill::kTypeEthernet) {
729effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      // When configuring an ethernet service, we actually configure the
730effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      // EthernetEap service, which exists in the Profile only.
731effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      // See crbug.com/126870 for more info.
732effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      properties.SetStringWithoutPathExpansion(shill::kTypeProperty,
733effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                               shill::kTypeEthernetEap);
734effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      share_network = false;
735effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ash::network_connect::CreateConfiguration(&properties, share_network);
736effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    } else {
737effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ash::network_connect::ConfigureNetworkAndConnect(
738effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          service_path_, properties, share_network);
739effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;  // dialog will be closed
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string WifiConfigView::GetSsid() const {
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string result;
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ssid_textfield_ != NULL) {
7475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    std::string untrimmed = base::UTF16ToUTF8(ssid_textfield_->text());
748a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    base::TrimWhitespaceASCII(untrimmed, base::TRIM_ALL, &result);
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return result;
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string WifiConfigView::GetPassphrase() const {
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string result;
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (passphrase_textfield_ != NULL)
7565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    result = base::UTF16ToUTF8(passphrase_textfield_->text());
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return result;
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::GetSaveCredentials() const {
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!save_credentials_checkbox_)
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;  // share networks by default (e.g. non 8021x).
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return save_credentials_checkbox_->checked();
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::GetShareNetwork(bool share_default) const {
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!share_network_checkbox_)
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return share_default;
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return share_network_checkbox_->checked();
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
772ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochstd::string WifiConfigView::GetEapMethod() const {
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(eap_method_combobox_);
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (eap_method_combobox_->selected_index()) {
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAP_METHOD_INDEX_PEAP:
77668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return shill::kEapMethodPEAP;
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAP_METHOD_INDEX_TLS:
77868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return shill::kEapMethodTLS;
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAP_METHOD_INDEX_TTLS:
78068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return shill::kEapMethodTTLS;
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case EAP_METHOD_INDEX_LEAP:
78268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return shill::kEapMethodLEAP;
783ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    case EAP_METHOD_INDEX_NONE:
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
785ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      return "";
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
789ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochstd::string WifiConfigView::GetEapPhase2Auth() const {
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(phase_2_auth_combobox_);
79168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  bool is_peap = (GetEapMethod() == shill::kEapMethodPEAP);
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (phase_2_auth_combobox_->selected_index()) {
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PHASE_2_AUTH_INDEX_MD5:
79468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return is_peap ? shill::kEapPhase2AuthPEAPMD5
79568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          : shill::kEapPhase2AuthTTLSMD5;
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PHASE_2_AUTH_INDEX_MSCHAPV2:
79768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return is_peap ? shill::kEapPhase2AuthPEAPMSCHAPV2
79868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          : shill::kEapPhase2AuthTTLSMSCHAPV2;
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PHASE_2_AUTH_INDEX_MSCHAP:
80068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return shill::kEapPhase2AuthTTLSMSCHAP;
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PHASE_2_AUTH_INDEX_PAP:
80268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return shill::kEapPhase2AuthTTLSPAP;
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PHASE_2_AUTH_INDEX_CHAP:
80468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return shill::kEapPhase2AuthTTLSCHAP;
805ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    case PHASE_2_AUTH_INDEX_AUTO:
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
807ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      return "";
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
811eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstd::string WifiConfigView::GetEapServerCaCertPEM() const {
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(server_ca_cert_combobox_);
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int index = server_ca_cert_combobox_->selected_index();
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (index == 0) {
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // First item is "Default".
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return std::string();
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (index == server_ca_cert_combobox_->model()->GetItemCount() - 1) {
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Last item is "Do not check".
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return std::string();
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int cert_index = index - 1;
822c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return CertLibrary::Get()->GetServerCACertPEMAt(cert_index);
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WifiConfigView::GetEapUseSystemCas() const {
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(server_ca_cert_combobox_);
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Only use system CAs if the first item ("Default") is selected.
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return server_ca_cert_combobox_->selected_index() == 0;
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)std::string WifiConfigView::GetEapSubjectMatch() const {
8333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  DCHECK(subject_match_textfield_);
8345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF16ToUTF8(subject_match_textfield_->text());
8353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
8363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
8375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void WifiConfigView::SetEapClientCertProperties(
8385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    base::DictionaryValue* properties) const {
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(user_cert_combobox_);
840424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!HaveUserCerts() || !UserCertActive()) {
8415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // No certificate selected or not required.
8425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    client_cert::SetEmptyShillProperties(client_cert::CONFIG_TYPE_EAP,
8435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                         properties);
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Certificates are listed in the order they appear in the model.
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int index = user_cert_combobox_->selected_index();
8475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int slot_id = -1;
8485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string pkcs11_id =
8495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        CertLibrary::Get()->GetUserCertPkcs11IdAt(index, &slot_id);
8505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    client_cert::SetShillProperties(
8515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        client_cert::CONFIG_TYPE_EAP, slot_id, pkcs11_id, properties);
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string WifiConfigView::GetEapIdentity() const {
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(identity_textfield_);
8575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF16ToUTF8(identity_textfield_->text());
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string WifiConfigView::GetEapAnonymousIdentity() const {
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(identity_anonymous_textfield_);
8625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF16ToUTF8(identity_anonymous_textfield_->text());
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid WifiConfigView::SetEapProperties(base::DictionaryValue* properties) {
866ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties->SetStringWithoutPathExpansion(
86768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      shill::kEapIdentityProperty, GetEapIdentity());
868ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties->SetStringWithoutPathExpansion(
86968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      shill::kEapMethodProperty, GetEapMethod());
870ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties->SetStringWithoutPathExpansion(
87168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      shill::kEapPhase2AuthProperty, GetEapPhase2Auth());
872ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties->SetStringWithoutPathExpansion(
87368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      shill::kEapAnonymousIdentityProperty, GetEapAnonymousIdentity());
8743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  properties->SetStringWithoutPathExpansion(
8753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      shill::kEapSubjectMatchProperty, GetEapSubjectMatch());
876ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
8775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SetEapClientCertProperties(properties);
878ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
879ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties->SetBooleanWithoutPathExpansion(
88068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      shill::kEapUseSystemCasProperty, GetEapUseSystemCas());
881ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties->SetStringWithoutPathExpansion(
88268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      shill::kEapPasswordProperty, GetPassphrase());
883ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
884ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::ListValue* pem_list = new base::ListValue;
88503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  std::string ca_cert_pem = GetEapServerCaCertPEM();
88603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (!ca_cert_pem.empty())
88703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    pem_list->AppendString(ca_cert_pem);
888ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties->SetWithoutPathExpansion(
889ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      shill::kEapCaCertPemProperty, pem_list);
890ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
891ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiConfigView::Cancel() {
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid WifiConfigView::Init(bool show_8021x) {
896effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const NetworkState* network = GetNetworkState();
897effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (network) {
898effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    if (network->type() == shill::kTypeWifi) {
899effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      if (network->security() == shill::kSecurity8021x)
900effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        show_8021x = true;
901effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    } else if (network->type() == shill::kTypeEthernet) {
902ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      show_8021x = true;
903effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    } else {
904effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      NOTREACHED() << "Unexpected network type for WifiConfigView: "
905effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                   << network->type() << " Path: " << service_path_;
906effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
907effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ParseEAPUIProperty(&eap_method_ui_data_, network, ::onc::eap::kOuter);
908effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ParseEAPUIProperty(&phase_2_auth_ui_data_, network, ::onc::eap::kInner);
909effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ParseEAPUIProperty(
910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        &user_cert_ui_data_, network, ::onc::client_cert::kClientCertRef);
911effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ParseEAPUIProperty(
912effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        &server_ca_cert_ui_data_, network, ::onc::eap::kServerCARef);
91390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    if (server_ca_cert_ui_data_.IsManaged()) {
914effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ParseEAPUIProperty(
915effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          &server_ca_cert_ui_data_, network, ::onc::eap::kUseSystemCAs);
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
917effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ParseEAPUIProperty(&identity_ui_data_, network, ::onc::eap::kIdentity);
918effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ParseEAPUIProperty(
919effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        &identity_anonymous_ui_data_, network, ::onc::eap::kAnonymousIdentity);
920effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ParseEAPUIProperty(
921effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        &save_credentials_ui_data_, network, ::onc::eap::kSaveCredentials);
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (show_8021x)
923effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ParseEAPUIProperty(&passphrase_ui_data_, network, ::onc::eap::kPassword);
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    else
925effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ParseUIProperty(&passphrase_ui_data_, network, ::onc::wifi::kPassphrase);
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::GridLayout* layout = views::GridLayout::CreatePanel(this);
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLayoutManager(layout);
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int column_view_set_id = 0;
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id);
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPasswordVisibleWidth = 20;
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Label
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 1,
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        views::GridLayout::USE_PREF, 0, 0);
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddPaddingColumn(0, views::kRelatedControlSmallHorizontalSpacing);
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Textfield, combobox.
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        views::GridLayout::USE_PREF, 0,
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        ChildNetworkConfigView::kInputFieldMinWidth);
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddPaddingColumn(0, views::kRelatedControlSmallHorizontalSpacing);
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Password visible button / policy indicator.
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddColumn(views::GridLayout::CENTER, views::GridLayout::FILL, 1,
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        views::GridLayout::USE_PREF, 0, kPasswordVisibleWidth);
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SSID input
948effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!network || network->type() != shill::kTypeEthernet) {
949effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->StartRow(0, column_view_set_id);
950effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddView(new views::Label(l10n_util::GetStringUTF16(
951effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_ID)));
952effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    if (!network) {
953effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ssid_textfield_ = new views::Textfield();
954effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ssid_textfield_->set_controller(this);
955effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ssid_textfield_->SetAccessibleName(l10n_util::GetStringUTF16(
956effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_ID));
957effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      layout->AddView(ssid_textfield_);
958effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    } else {
959effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      views::Label* label =
960effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          new views::Label(base::UTF8ToUTF16(network->name()));
961effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
962effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      layout->AddView(label);
963effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
964effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Security select
968effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!network && !show_8021x) {
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
970a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 label_text = l10n_util::GetStringUTF16(
971c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SECURITY);
972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->AddView(new views::Label(label_text));
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    security_combobox_model_.reset(new internal::SecurityComboboxModel);
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    security_combobox_ = new views::Combobox(security_combobox_model_.get());
975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    security_combobox_->SetAccessibleName(label_text);
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    security_combobox_->set_listener(this);
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(security_combobox_);
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Only enumerate certificates in the data model for 802.1X networks.
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (show_8021x) {
983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Observer any changes to the certificate list.
984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CertLibrary::Get()->AddObserver(this);
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // EAP method
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
988a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 eap_label_text = l10n_util::GetStringUTF16(
989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_EAP_METHOD);
990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->AddView(new views::Label(eap_label_text));
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    eap_method_combobox_model_.reset(new internal::EAPMethodComboboxModel);
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    eap_method_combobox_ = new views::Combobox(
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        eap_method_combobox_model_.get());
994c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    eap_method_combobox_->SetAccessibleName(eap_label_text);
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    eap_method_combobox_->set_listener(this);
99690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    eap_method_combobox_->SetEnabled(eap_method_ui_data_.IsEditable());
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(eap_method_combobox_);
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(new ControlledSettingIndicatorView(eap_method_ui_data_));
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Phase 2 authentication
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
1003a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 phase_2_label_text = l10n_util::GetStringUTF16(
1004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PHASE_2_AUTH);
1005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    phase_2_auth_label_ = new views::Label(phase_2_label_text);
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(phase_2_auth_label_);
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    phase_2_auth_combobox_model_.reset(
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new internal::Phase2AuthComboboxModel(eap_method_combobox_));
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    phase_2_auth_combobox_ = new views::Combobox(
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        phase_2_auth_combobox_model_.get());
1011c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    phase_2_auth_combobox_->SetAccessibleName(phase_2_label_text);
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    phase_2_auth_label_->SetEnabled(false);
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    phase_2_auth_combobox_->SetEnabled(false);
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    phase_2_auth_combobox_->set_listener(this);
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(phase_2_auth_combobox_);
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(new ControlledSettingIndicatorView(phase_2_auth_ui_data_));
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Server CA certificate
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
1021a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 server_ca_cert_label_text = l10n_util::GetStringUTF16(
1022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_SERVER_CA);
1023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    server_ca_cert_label_ = new views::Label(server_ca_cert_label_text);
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(server_ca_cert_label_);
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    server_ca_cert_combobox_model_.reset(
1026c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        new internal::ServerCACertComboboxModel());
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    server_ca_cert_combobox_ = new ComboboxWithWidth(
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        server_ca_cert_combobox_model_.get(),
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ChildNetworkConfigView::kInputFieldMinWidth);
1030c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    server_ca_cert_combobox_->SetAccessibleName(server_ca_cert_label_text);
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    server_ca_cert_label_->SetEnabled(false);
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    server_ca_cert_combobox_->SetEnabled(false);
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    server_ca_cert_combobox_->set_listener(this);
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(server_ca_cert_combobox_);
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new ControlledSettingIndicatorView(server_ca_cert_ui_data_));
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    // Subject Match
10403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
1041a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 subject_match_label_text = l10n_util::GetStringUTF16(
10423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_EAP_SUBJECT_MATCH);
10433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    subject_match_label_ = new views::Label(subject_match_label_text);
10443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    layout->AddView(subject_match_label_);
10455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    subject_match_textfield_ = new views::Textfield();
10463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    subject_match_textfield_->SetAccessibleName(subject_match_label_text);
10475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    subject_match_textfield_->set_controller(this);
10483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    layout->AddView(subject_match_textfield_);
10493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
10503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // User certificate
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
1053a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 user_cert_label_text = l10n_util::GetStringUTF16(
1054c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT);
1055c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_cert_label_ = new views::Label(user_cert_label_text);
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(user_cert_label_);
1057424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    user_cert_combobox_model_.reset(new internal::UserCertComboboxModel(this));
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    user_cert_combobox_ = new views::Combobox(user_cert_combobox_model_.get());
1059c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_cert_combobox_->SetAccessibleName(user_cert_label_text);
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    user_cert_label_->SetEnabled(false);
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    user_cert_combobox_->SetEnabled(false);
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    user_cert_combobox_->set_listener(this);
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(user_cert_combobox_);
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(new ControlledSettingIndicatorView(user_cert_ui_data_));
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Identity
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
1069a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 identity_label_text = l10n_util::GetStringUTF16(
1070c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_IDENTITY);
1071c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    identity_label_ = new views::Label(identity_label_text);
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(identity_label_);
10735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    identity_textfield_ = new views::Textfield();
1074c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    identity_textfield_->SetAccessibleName(identity_label_text);
10755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    identity_textfield_->set_controller(this);
107690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    identity_textfield_->SetEnabled(identity_ui_data_.IsEditable());
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(identity_textfield_);
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(new ControlledSettingIndicatorView(identity_ui_data_));
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Passphrase input
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->StartRow(0, column_view_set_id);
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int label_text_id = IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PASSPHRASE;
1085a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 passphrase_label_text =
1086a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      l10n_util::GetStringUTF16(label_text_id);
1087c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  passphrase_label_ = new views::Label(passphrase_label_text);
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->AddView(passphrase_label_);
108958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  passphrase_textfield_ = new PassphraseTextfield();
10905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  passphrase_textfield_->set_controller(this);
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Disable passphrase input initially for other network.
1092effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  passphrase_label_->SetEnabled(network);
1093effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  passphrase_textfield_->SetEnabled(network &&
1094effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                    passphrase_ui_data_.IsEditable());
1095c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  passphrase_textfield_->SetAccessibleName(passphrase_label_text);
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->AddView(passphrase_textfield_);
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
109890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (passphrase_ui_data_.IsManaged()) {
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(new ControlledSettingIndicatorView(passphrase_ui_data_));
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Password visible button.
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_visible_button_ = new views::ToggleImageButton(this);
11035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    passphrase_visible_button_->SetFocusable(true);
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_visible_button_->SetTooltipText(
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PASSPHRASE_SHOW));
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_visible_button_->SetToggledTooltipText(
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PASSPHRASE_HIDE));
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_visible_button_->SetImage(
11112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        views::ImageButton::STATE_NORMAL,
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ResourceBundle::GetSharedInstance().
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetImageSkiaNamed(IDR_NETWORK_SHOW_PASSWORD));
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_visible_button_->SetImage(
11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        views::ImageButton::STATE_HOVERED,
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ResourceBundle::GetSharedInstance().
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetImageSkiaNamed(IDR_NETWORK_SHOW_PASSWORD_HOVER));
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_visible_button_->SetToggledImage(
11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        views::ImageButton::STATE_NORMAL,
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ResourceBundle::GetSharedInstance().
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetImageSkiaNamed(IDR_NETWORK_HIDE_PASSWORD));
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_visible_button_->SetToggledImage(
11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        views::ImageButton::STATE_HOVERED,
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ResourceBundle::GetSharedInstance().
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetImageSkiaNamed(IDR_NETWORK_HIDE_PASSWORD_HOVER));
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    passphrase_visible_button_->SetImageAlignment(
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        views::ImageButton::ALIGN_CENTER, views::ImageButton::ALIGN_MIDDLE);
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(passphrase_visible_button_);
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (show_8021x) {
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Anonymous identity
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    identity_anonymous_label_ =
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new views::Label(l10n_util::GetStringUTF16(
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_IDENTITY_ANONYMOUS));
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(identity_anonymous_label_);
11405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    identity_anonymous_textfield_ = new views::Textfield();
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    identity_anonymous_label_->SetEnabled(false);
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    identity_anonymous_textfield_->SetEnabled(false);
11435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    identity_anonymous_textfield_->set_controller(this);
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(identity_anonymous_textfield_);
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new ControlledSettingIndicatorView(identity_anonymous_ui_data_));
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Checkboxes.
11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Save credentials
11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (show_8021x) {
11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    save_credentials_checkbox_ = new views::Checkbox(
11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(
11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SAVE_CREDENTIALS));
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    save_credentials_checkbox_->SetEnabled(
115990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        save_credentials_ui_data_.IsEditable());
11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->SkipColumns(1);
11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(save_credentials_checkbox_);
11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new ControlledSettingIndicatorView(save_credentials_ui_data_));
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Share network
1167effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!network || network->profile_path().empty()) {
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->StartRow(0, column_view_set_id);
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    share_network_checkbox_ = new views::Checkbox(
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        l10n_util::GetStringUTF16(
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SHARE_NETWORK));
11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->SkipColumns(1);
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    layout->AddView(share_network_checkbox_);
11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create an error label.
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->StartRow(0, column_view_set_id);
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->SkipColumns(1);
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  error_label_ = new views::Label();
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  error_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  error_label_->SetEnabledColor(SK_ColorRED);
11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->AddView(error_label_);
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initialize the field and checkbox values.
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!network && show_8021x)
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RefreshEapFields();
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1190ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  RefreshShareCheckbox();
1191ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  UpdateErrorLabel();
11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (network) {
1194ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    NetworkHandler::Get()->network_configuration_handler()->GetProperties(
1195ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        service_path_,
1196ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        base::Bind(&WifiConfigView::InitFromProperties,
1197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                   weak_ptr_factory_.GetWeakPtr(),
1198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                   show_8021x),
1199ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        base::Bind(&ShillError, "GetProperties"));
1200ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  }
1201ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1202ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1203ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid WifiConfigView::InitFromProperties(
1204ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    bool show_8021x,
1205ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const std::string& service_path,
1206ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const base::DictionaryValue& properties) {
120758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (!show_8021x) {
120858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    std::string passphrase;
120958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    properties.GetStringWithoutPathExpansion(
121068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kPassphraseProperty, &passphrase);
12115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    passphrase_textfield_->SetText(base::UTF8ToUTF16(passphrase));
1212ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    return;
121358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
1214ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1215ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // EAP Method
1216ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  std::string eap_method;
1217ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties.GetStringWithoutPathExpansion(
121868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      shill::kEapMethodProperty, &eap_method);
121968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (eap_method == shill::kEapMethodPEAP)
1220ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_PEAP);
122168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  else if (eap_method == shill::kEapMethodTTLS)
1222ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_TTLS);
122368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  else if (eap_method == shill::kEapMethodTLS)
1224ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_TLS);
122568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  else if (eap_method == shill::kEapMethodLEAP)
1226ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    eap_method_combobox_->SetSelectedIndex(EAP_METHOD_INDEX_LEAP);
1227ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  RefreshEapFields();
1228ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1229ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Phase 2 authentication and anonymous identity.
1230ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (Phase2AuthActive()) {
1231ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    std::string eap_phase_2_auth;
1232ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    properties.GetStringWithoutPathExpansion(
123368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kEapPhase2AuthProperty, &eap_phase_2_auth);
123468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    if (eap_phase_2_auth == shill::kEapPhase2AuthTTLSMD5)
1235ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_MD5);
123668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    else if (eap_phase_2_auth == shill::kEapPhase2AuthTTLSMSCHAPV2)
1237ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_MSCHAPV2);
123868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    else if (eap_phase_2_auth == shill::kEapPhase2AuthTTLSMSCHAP)
1239ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_MSCHAP);
124068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    else if (eap_phase_2_auth == shill::kEapPhase2AuthTTLSPAP)
1241ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_PAP);
124268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    else if (eap_phase_2_auth == shill::kEapPhase2AuthTTLSCHAP)
1243ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      phase_2_auth_combobox_->SetSelectedIndex(PHASE_2_AUTH_INDEX_CHAP);
1244ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1245ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    std::string eap_anonymous_identity;
1246ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    properties.GetStringWithoutPathExpansion(
124768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kEapAnonymousIdentityProperty, &eap_anonymous_identity);
12485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    identity_anonymous_textfield_->SetText(
12495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        base::UTF8ToUTF16(eap_anonymous_identity));
1250ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  }
1251ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
12523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Subject match
12533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::string subject_match;
12543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  properties.GetStringWithoutPathExpansion(
12553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      shill::kEapSubjectMatchProperty, &subject_match);
12565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  subject_match_textfield_->SetText(base::UTF8ToUTF16(subject_match));
12573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1258ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Server CA certificate.
1259ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (CaCertActive()) {
1260ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    std::string eap_ca_cert_pem;
1261ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    const base::ListValue* pems = NULL;
1262ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    if (properties.GetListWithoutPathExpansion(
1263ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch            shill::kEapCaCertPemProperty, &pems))
1264ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      pems->GetString(0, &eap_ca_cert_pem);
1265ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    if (eap_ca_cert_pem.empty()) {
1266ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      bool eap_use_system_cas = false;
1267ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      properties.GetBooleanWithoutPathExpansion(
126868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          shill::kEapUseSystemCasProperty, &eap_use_system_cas);
1269ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      if (eap_use_system_cas) {
1270ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        // "Default"
1271ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        server_ca_cert_combobox_->SetSelectedIndex(0);
12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
1273ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        // "Do not check".
1274ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        server_ca_cert_combobox_->SetSelectedIndex(
1275ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch            server_ca_cert_combobox_->model()->GetItemCount() - 1);
12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1277ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    } else {
1278ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      // Select the certificate if available.
1279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      int cert_index =
1280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          CertLibrary::Get()->GetServerCACertIndexByPEM(eap_ca_cert_pem);
1281ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      if (cert_index >= 0) {
1282ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        // Skip item for "Default".
1283ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        server_ca_cert_combobox_->SetSelectedIndex(1 + cert_index);
1284d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      } else {
1285d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        // "Default"
1286d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        server_ca_cert_combobox_->SetSelectedIndex(0);
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1289ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  }
12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1291ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // User certificate.
1292ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (UserCertActive()) {
1293ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    std::string eap_cert_id;
1294ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    properties.GetStringWithoutPathExpansion(
129568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kEapCertIdProperty, &eap_cert_id);
129603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    int unused_slot_id = 0;
129703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    std::string pkcs11_id = client_cert::GetPkcs11AndSlotIdFromEapCertId(
129803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        eap_cert_id, &unused_slot_id);
12995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (!pkcs11_id.empty()) {
1300c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      int cert_index =
13015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          CertLibrary::Get()->GetUserCertIndexByPkcs11Id(pkcs11_id);
1302ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      if (cert_index >= 0)
1303ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        user_cert_combobox_->SetSelectedIndex(cert_index);
13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1305ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  }
13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1307ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Identity is always active.
1308ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  std::string eap_identity;
1309ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties.GetStringWithoutPathExpansion(
131068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      shill::kEapIdentityProperty, &eap_identity);
13115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  identity_textfield_->SetText(base::UTF8ToUTF16(eap_identity));
1312ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1313ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Passphrase
1314ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (PassphraseActive()) {
1315ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    std::string eap_password;
1316ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    properties.GetStringWithoutPathExpansion(
131768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kEapPasswordProperty, &eap_password);
13185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    passphrase_textfield_->SetText(base::UTF8ToUTF16(eap_password));
131958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // If 'Connectable' is True, show a fake passphrase to indicate that it
132058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // has already been set.
132158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    bool connectable = false;
132258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    properties.GetBooleanWithoutPathExpansion(
132368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        shill::kConnectableProperty, &connectable);
132458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    passphrase_textfield_->SetShowFake(connectable);
13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1327ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Save credentials
1328ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool save_credentials = false;
1329ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  properties.GetBooleanWithoutPathExpansion(
133068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      shill::kSaveCredentialsProperty, &save_credentials);
1331ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  save_credentials_checkbox_->SetChecked(save_credentials);
1332ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1333d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  UpdateDialogButtons();
13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RefreshShareCheckbox();
13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UpdateErrorLabel();
13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WifiConfigView::InitFocus() {
13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::View* view_to_focus = GetInitiallyFocusedView();
13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (view_to_focus)
13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    view_to_focus->RequestFocus();
13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1344effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool WifiConfigView::IsConfigureDialog() {
1345effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const NetworkState* network = GetNetworkState();
1346effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return network && network->type() == shill::kTypeEthernet;
1347effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1348effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1349ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid WifiConfigView::NetworkPropertiesUpdated(const NetworkState* network) {
1350ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (network->path() != service_path_)
1351ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    return;
1352ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  UpdateErrorLabel();
1353ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
1354ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
1355effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst NetworkState* WifiConfigView::GetNetworkState() const {
1356effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (service_path_.empty())
1357effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return NULL;
1358effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return NetworkHandler::Get()->network_state_handler()->GetNetworkState(
1359effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      service_path_);
1360effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1361effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
1363effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid WifiConfigView::ParseUIProperty(NetworkPropertyUIData* property_ui_data,
1364effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                     const NetworkState* network,
1365effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                     const std::string& key) {
13664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ::onc::ONCSource onc_source = ::onc::ONC_SOURCE_NONE;
1367ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  const base::DictionaryValue* onc =
13683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      onc::FindPolicyForActiveUser(network->guid(), &onc_source);
1369effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  std::string onc_tag = network->type() == shill::kTypeEthernet
137046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                            ? ::onc::network_config::kEthernet
137146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                            : ::onc::network_config::kWiFi;
1372effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  property_ui_data->ParseOncProperty(onc_source, onc, onc_tag + '.' + key);
13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
1376effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid WifiConfigView::ParseEAPUIProperty(NetworkPropertyUIData* property_ui_data,
1377effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                        const NetworkState* network,
1378effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                        const std::string& key) {
1379effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  std::string onc_tag = network->type() == shill::kTypeEthernet
1380effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            ? ::onc::ethernet::kEAP
1381effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            : ::onc::wifi::kEAP;
1382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ParseUIProperty(property_ui_data, network, onc_tag + '.' + key);
13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1386