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/network_config_view.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell.h" 105e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/user.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/options/network_property_ui_data.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/options/vpn_config_view.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/options/wifi_config_view.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/options/wimax_config_view.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/host_desktop.h" 23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chromeos/login/login_state.h" 24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_state.h" 25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_state_handler.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/locale_settings.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h" 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/accessibility/ax_view_state.h" 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/button/label_button.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/image_view.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/layout_constants.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using views::Widget; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)gfx::NativeWindow GetParentForUnhostedDialog() { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (chromeos::LoginDisplayHostImpl::default_host()) { 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return chromeos::LoginDisplayHostImpl::default_host()->GetNativeWindow(); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser* browser = chrome::FindTabbedBrowser( 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileManager::GetPrimaryUserProfile(), 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return browser->window()->GetNativeWindow(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Avoid global static initializer. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chromeos::NetworkConfigView** GetActiveDialogPointer() { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static chromeos::NetworkConfigView* active_dialog = NULL; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &active_dialog; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chromeos::NetworkConfigView* GetActiveDialog() { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *(GetActiveDialogPointer()); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetActiveDialog(chromeos::NetworkConfigView* dialog) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *(GetActiveDialogPointer()) = dialog; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int ChildNetworkConfigView::kInputFieldMinWidth = 270; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochNetworkConfigView::NetworkConfigView() 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : child_config_view_(NULL), 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_(NULL), 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) advanced_button_(NULL) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(GetActiveDialog() == NULL); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetActiveDialog(this); 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool NetworkConfigView::InitWithNetworkState(const NetworkState* network) { 89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DCHECK(network); 90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string service_path = network->path(); 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (network->type() == shill::kTypeWifi || 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch network->type() == shill::kTypeEthernet) { 93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch child_config_view_ = new WifiConfigView(this, service_path, false); 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else if (network->type() == shill::kTypeWimax) { 95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch child_config_view_ = new WimaxConfigView(this, service_path); 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else if (network->type() == shill::kTypeVPN) { 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch child_config_view_ = new VPNConfigView(this, service_path); 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return child_config_view_ != NULL; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool NetworkConfigView::InitWithType(const std::string& type) { 10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (type == shill::kTypeWifi) { 104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch child_config_view_ = new WifiConfigView(this, 105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" /* service_path */, 106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch false /* show_8021x */); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) advanced_button_ = new views::LabelButton(this, l10n_util::GetStringUTF16( 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_ADVANCED_BUTTON)); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) advanced_button_->SetStyle(views::Button::STYLE_BUTTON); 11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } else if (type == shill::kTypeVPN) { 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch child_config_view_ = new VPNConfigView(this, 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" /* service_path */); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return child_config_view_ != NULL; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetworkConfigView::~NetworkConfigView() { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(GetActiveDialog() == this); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetActiveDialog(NULL); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid NetworkConfigView::Show(const std::string& service_path, 124ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch gfx::NativeWindow parent) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetActiveDialog() != NULL) 1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 127ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch NetworkConfigView* view = new NetworkConfigView(); 128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> 129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GetNetworkState(service_path); 130ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!network) { 131ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch LOG(ERROR) << "NetworkConfigView::Show called with invalid service_path"; 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 133ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!view->InitWithNetworkState(network)) { 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LOG(ERROR) << "NetworkConfigView::Show called with invalid network type: " 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << network->type(); 1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delete view; 1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return; 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view->ShowDialog(parent); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// static 144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid NetworkConfigView::ShowForType(const std::string& type, 1452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch gfx::NativeWindow parent) { 1462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch if (GetActiveDialog() != NULL) 1472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return; 148ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch NetworkConfigView* view = new NetworkConfigView(); 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!view->InitWithType(type)) { 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LOG(ERROR) << "NetworkConfigView::ShowForType called with invalid type: " 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) << type; 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delete view; 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return; 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch view->ShowDialog(parent); 1562385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 1572385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow NetworkConfigView::GetNativeWindow() const { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->GetNativeWindow(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 NetworkConfigView::GetDialogButtonLabel( 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::DialogButton button) const { 164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (button == ui::DIALOG_BUTTON_OK) { 165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (child_config_view_->IsConfigureDialog()) 166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_CONFIGURE); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_CONNECT); 168effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return views::DialogDelegateView::GetDialogButtonLabel(button); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetworkConfigView::IsDialogButtonEnabled(ui::DialogButton button) const { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable connect button if cannot login. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (button == ui::DIALOG_BUTTON_OK) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return child_config_view_->CanLogin(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetworkConfigView::Cancel() { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnDialogCancelled(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_config_view_->Cancel(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetworkConfigView::Accept() { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not attempt login if it is guaranteed to fail, keep the dialog open. 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!child_config_view_->CanLogin()) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = child_config_view_->Login(); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result && delegate_) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnDialogAccepted(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)views::View* NetworkConfigView::CreateExtraView() { 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return advanced_button_; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::View* NetworkConfigView::GetInitiallyFocusedView() { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return child_config_view_->GetInitiallyFocusedView(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 NetworkConfigView::GetWindowTitle() const { 20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DCHECK(!child_config_view_->GetTitle().empty()); 20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return child_config_view_->GetTitle(); 20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ui::ModalType NetworkConfigView::GetModalType() const { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::MODAL_TYPE_SYSTEM; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 213a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NetworkConfigView::GetAccessibleState(ui::AXViewState* state) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state->name = 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_OTHER_WIFI_NETWORKS); 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) state->role = ui::AX_ROLE_DIALOG; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkConfigView::ButtonPressed(views::Button* sender, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Event& event) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (advanced_button_ && sender == advanced_button_) { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) advanced_button_->SetVisible(false); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowAdvancedView(); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkConfigView::ShowAdvancedView() { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear out the old widgets and build new ones. 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveChildView(child_config_view_); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete child_config_view_; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For now, there is only an advanced view for Wi-Fi 802.1X. 232ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch child_config_view_ = new WifiConfigView(this, 233ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "" /* service_path */, 234ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch true /* show_8021x */); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(child_config_view_); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resize the window to be able to hold the new widgets. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size = views::Widget::GetLocalizedContentsSize( 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_JOIN_WIFI_NETWORK_DIALOG_ADVANCED_WIDTH_CHARS, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_JOIN_WIFI_NETWORK_DIALOG_ADVANCED_MINIMUM_HEIGHT_LINES); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the new bounds with desired size at the same center point. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds = GetWidget()->GetWindowBoundsInScreen(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int horiz_padding = bounds.width() - size.width(); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int vert_padding = bounds.height() - size.height(); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bounds.Inset(horiz_padding / 2, vert_padding / 2, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) horiz_padding / 2, vert_padding / 2); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->SetBoundsConstrained(bounds); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Layout(); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_config_view_->InitFocus(); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkConfigView::Layout() { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_config_view_->SetBounds(0, 0, width(), height()); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::Size NetworkConfigView::GetPreferredSize() const { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size result(views::Widget::GetLocalizedContentsSize( 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_JOIN_WIFI_NETWORK_DIALOG_WIDTH_CHARS, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_JOIN_WIFI_NETWORK_DIALOG_MINIMUM_HEIGHT_LINES)); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size = child_config_view_->GetPreferredSize(); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result.set_height(size.height()); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size.width() > result.width()) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result.set_width(size.width()); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkConfigView::ViewHierarchyChanged( 267a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const ViewHierarchyChangedDetails& details) { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Can't init before we're inserted into a Container, because we require 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a HWND to parent native child controls to. 270a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (details.is_add && details.child == this) { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(child_config_view_); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkConfigView::ShowDialog(gfx::NativeWindow parent) { 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (parent == NULL) 277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) parent = GetParentForUnhostedDialog(); 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Failed connections may result in a pop-up with no natural parent window, 279d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // so provide a fallback context on the primary display. This is necessary 280d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // becase one of parent or context must be non NULL. 281d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) gfx::NativeWindow context = 282d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) parent ? NULL : ash::Shell::GetPrimaryRootWindow(); 28390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Widget* window = DialogDelegate::CreateDialogWidget(this, context, parent); 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetAlwaysOnTop(true); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->Show(); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 288ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// ChildNetworkConfigView 289ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 290ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochChildNetworkConfigView::ChildNetworkConfigView( 291ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch NetworkConfigView* parent, 292ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::string& service_path) 293ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch : parent_(parent), 294ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch service_path_(service_path) { 295ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 296ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 297ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochChildNetworkConfigView::~ChildNetworkConfigView() { 298ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 299ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 300effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool ChildNetworkConfigView::IsConfigureDialog() { 301effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return false; 302effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 303effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 304a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// static 305a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid ChildNetworkConfigView::GetShareStateForLoginState(bool* default_value, 306a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool* modifiable) { 307a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch *default_value = !LoginState::Get()->UserHasNetworkProfile(); 308a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Allow only authenticated user to change the share state. 309a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch *modifiable = LoginState::Get()->IsUserAuthenticated(); 310a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 311a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 312ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// ControlledSettingIndicatorView 313ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ControlledSettingIndicatorView::ControlledSettingIndicatorView() 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : managed_(false), 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_view_(NULL) { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Init(); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ControlledSettingIndicatorView::ControlledSettingIndicatorView( 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NetworkPropertyUIData& ui_data) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : managed_(false), 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_view_(NULL) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Init(); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Update(ui_data); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ControlledSettingIndicatorView::~ControlledSettingIndicatorView() {} 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ControlledSettingIndicatorView::Update( 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NetworkPropertyUIData& ui_data) { 33290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (managed_ == ui_data.IsManaged()) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) managed_ = ui_data.IsManaged(); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PreferredSizeChanged(); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::Size ControlledSettingIndicatorView::GetPreferredSize() const { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (managed_ && visible()) ? image_view_->GetPreferredSize() 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : gfx::Size(); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ControlledSettingIndicatorView::Layout() { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_view_->SetBounds(0, 0, width(), height()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ControlledSettingIndicatorView::Init() { 349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) image_ = ResourceBundle::GetSharedInstance().GetImageNamed( 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDR_CONTROLLED_SETTING_MANDATORY).ToImageSkia(); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_view_ = new views::ImageView(); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable |image_view_| so mouse events propagate to the parent. 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_view_->SetEnabled(false); 354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) image_view_->SetImage(image_); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) image_view_->SetTooltipText( 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_OPTIONS_CONTROLLED_SETTING_POLICY)); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(image_view_); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 361