| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/chromeos/options/network_connect.h" | |
| 6 | |
| 7 #include "ash/shell.h" | |
| 8 #include "ash/shell_delegate.h" | |
| 9 #include "ash/system/chromeos/network/network_connect.h" | |
| 10 #include "ash/system/chromeos/network/network_observer.h" | |
| 11 #include "ash/system/tray/system_tray_notifier.h" | |
| 12 #include "base/command_line.h" | |
| 13 #include "base/strings/stringprintf.h" | |
| 14 #include "base/strings/utf_string_conversions.h" | |
| 15 #include "chrome/browser/chromeos/enrollment_dialog_view.h" | |
| 16 #include "chrome/browser/chromeos/login/user.h" | |
| 17 #include "chrome/browser/chromeos/login/user_manager.h" | |
| 18 #include "chrome/browser/chromeos/options/network_config_view.h" | |
| 19 #include "chrome/browser/profiles/profile_manager.h" | |
| 20 #include "chrome/browser/ui/browser_finder.h" | |
| 21 #include "chrome/browser/ui/chrome_pages.h" | |
| 22 #include "chrome/browser/ui/webui/chromeos/mobile_setup_dialog.h" | |
| 23 #include "chrome/common/url_constants.h" | |
| 24 #include "chromeos/chromeos_switches.h" | |
| 25 #include "chromeos/network/certificate_pattern.h" | |
| 26 #include "chromeos/network/managed_network_configuration_handler.h" | |
| 27 #include "chromeos/network/network_event_log.h" | |
| 28 #include "chromeos/network/network_handler.h" | |
| 29 #include "chromeos/network/network_state.h" | |
| 30 #include "chromeos/network/network_state_handler.h" | |
| 31 #include "content/public/browser/user_metrics.h" | |
| 32 #include "grit/generated_resources.h" | |
| 33 #include "net/base/escape.h" | |
| 34 #include "third_party/cros_system_api/dbus/service_constants.h" | |
| 35 #include "ui/base/l10n/l10n_util.h" | |
| 36 | |
| 37 namespace chromeos { | |
| 38 | |
| 39 namespace { | |
| 40 | |
| 41 void EnrollmentComplete(const std::string& service_path) { | |
| 42 NET_LOG_USER("Enrollment Complete", service_path); | |
| 43 } | |
| 44 | |
| 45 } | |
| 46 | |
| 47 namespace network_connect { | |
| 48 | |
| 49 void ShowMobileSetup(const std::string& service_path) { | |
| 50 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); | |
| 51 const NetworkState* cellular = handler->GetNetworkState(service_path); | |
| 52 if (cellular && cellular->type() == flimflam::kTypeCellular && | |
| 53 cellular->activation_state() != flimflam::kActivationStateActivated && | |
| 54 cellular->activate_over_non_cellular_networks() && | |
| 55 !handler->DefaultNetwork()) { | |
| 56 std::string technology = cellular->network_technology(); | |
| 57 ash::NetworkObserver::NetworkType network_type = | |
| 58 (technology == flimflam::kNetworkTechnologyLte || | |
| 59 technology == flimflam::kNetworkTechnologyLteAdvanced) | |
| 60 ? ash::NetworkObserver::NETWORK_CELLULAR_LTE | |
| 61 : ash::NetworkObserver::NETWORK_CELLULAR; | |
| 62 ash::Shell::GetInstance()->system_tray_notifier()->NotifySetNetworkMessage( | |
| 63 NULL, | |
| 64 ash::NetworkObserver::ERROR_CONNECT_FAILED, | |
| 65 network_type, | |
| 66 l10n_util::GetStringUTF16(IDS_NETWORK_ACTIVATION_ERROR_TITLE), | |
| 67 l10n_util::GetStringFUTF16(IDS_NETWORK_ACTIVATION_NEEDS_CONNECTION, | |
| 68 UTF8ToUTF16((cellular->name()))), | |
| 69 std::vector<string16>()); | |
| 70 return; | |
| 71 } | |
| 72 MobileSetupDialog::Show(service_path); | |
| 73 } | |
| 74 | |
| 75 void ShowNetworkSettings(const std::string& service_path) { | |
| 76 std::string page = chrome::kInternetOptionsSubPage; | |
| 77 const NetworkState* network = service_path.empty() ? NULL : | |
| 78 NetworkHandler::Get()->network_state_handler()->GetNetworkState( | |
| 79 service_path); | |
| 80 if (network) { | |
| 81 std::string name(network->name()); | |
| 82 if (name.empty() && network->type() == flimflam::kTypeEthernet) | |
| 83 name = l10n_util::GetStringUTF8(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); | |
| 84 page += base::StringPrintf( | |
| 85 "?servicePath=%s&networkType=%s&networkName=%s", | |
| 86 net::EscapeUrlEncodedData(service_path, true).c_str(), | |
| 87 net::EscapeUrlEncodedData(network->type(), true).c_str(), | |
| 88 net::EscapeUrlEncodedData(name, false).c_str()); | |
| 89 } | |
| 90 content::RecordAction( | |
| 91 content::UserMetricsAction("OpenInternetOptionsDialog")); | |
| 92 Browser* browser = chrome::FindOrCreateTabbedBrowser( | |
| 93 ProfileManager::GetDefaultProfileOrOffTheRecord(), | |
| 94 chrome::HOST_DESKTOP_TYPE_ASH); | |
| 95 chrome::ShowSettingsSubPage(browser, page); | |
| 96 } | |
| 97 | |
| 98 void HandleUnconfiguredNetwork(const std::string& service_path, | |
| 99 gfx::NativeWindow parent_window) { | |
| 100 const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> | |
| 101 GetNetworkState(service_path); | |
| 102 if (!network) { | |
| 103 NET_LOG_ERROR("Configuring unknown network", service_path); | |
| 104 return; | |
| 105 } | |
| 106 | |
| 107 if (network->type() == flimflam::kTypeWifi) { | |
| 108 // Only show the config view for secure networks, otherwise do nothing. | |
| 109 if (network->security() != flimflam::kSecurityNone) | |
| 110 NetworkConfigView::Show(service_path, parent_window); | |
| 111 return; | |
| 112 } | |
| 113 | |
| 114 if (network->type() == flimflam::kTypeWimax || | |
| 115 network->type() == flimflam::kTypeVPN) { | |
| 116 NetworkConfigView::Show(service_path, parent_window); | |
| 117 return; | |
| 118 } | |
| 119 | |
| 120 if (network->type() == flimflam::kTypeCellular) { | |
| 121 if (network->activation_state() != flimflam::kActivationStateActivated) { | |
| 122 ash::network_connect::ActivateCellular(service_path); | |
| 123 return; | |
| 124 } | |
| 125 if (network->cellular_out_of_credits()) { | |
| 126 ShowMobileSetup(service_path); | |
| 127 return; | |
| 128 } | |
| 129 // No special configure or setup for |network|, show the settings UI. | |
| 130 ShowNetworkSettings(service_path); | |
| 131 } | |
| 132 NOTREACHED(); | |
| 133 } | |
| 134 | |
| 135 bool EnrollNetwork(const std::string& service_path, | |
| 136 gfx::NativeWindow parent_window) { | |
| 137 const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> | |
| 138 GetNetworkState(service_path); | |
| 139 if (!network) { | |
| 140 NET_LOG_ERROR("Enrolling Unknown network", service_path); | |
| 141 return false; | |
| 142 } | |
| 143 // We skip certificate patterns for device policy ONC so that an unmanaged | |
| 144 // user can't get to the place where a cert is presented for them | |
| 145 // involuntarily. | |
| 146 if (network->ui_data().onc_source() == onc::ONC_SOURCE_DEVICE_POLICY) | |
| 147 return false; | |
| 148 | |
| 149 const CertificatePattern& certificate_pattern = | |
| 150 network->ui_data().certificate_pattern(); | |
| 151 if (certificate_pattern.Empty()) | |
| 152 return false; | |
| 153 | |
| 154 NET_LOG_USER("Enrolling", service_path); | |
| 155 | |
| 156 EnrollmentDelegate* enrollment = CreateEnrollmentDelegate( | |
| 157 parent_window, network->name(), ProfileManager::GetDefaultProfile()); | |
| 158 return enrollment->Enroll(certificate_pattern.enrollment_uri_list(), | |
| 159 base::Bind(&EnrollmentComplete, service_path)); | |
| 160 } | |
| 161 | |
| 162 const base::DictionaryValue* FindPolicyForActiveUser( | |
| 163 const NetworkState* network, | |
| 164 onc::ONCSource* onc_source) { | |
| 165 const User* user = UserManager::Get()->GetActiveUser(); | |
| 166 std::string username_hash = user ? user->username_hash() : std::string(); | |
| 167 return NetworkHandler::Get()->managed_network_configuration_handler()-> | |
| 168 FindPolicyByGUID(username_hash, network->guid(), onc_source); | |
| 169 } | |
| 170 | |
| 171 } // namespace network_connect | |
| 172 } // namespace chromeos | |
| OLD | NEW |