Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromeos/network/managed_network_configuration_handler_impl.h" | 5 #include "chromeos/network/managed_network_configuration_handler_impl.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 #include "chromeos/network/network_ui_data.h" | 31 #include "chromeos/network/network_ui_data.h" |
| 32 #include "chromeos/network/network_util.h" | 32 #include "chromeos/network/network_util.h" |
| 33 #include "chromeos/network/onc/onc_merger.h" | 33 #include "chromeos/network/onc/onc_merger.h" |
| 34 #include "chromeos/network/onc/onc_signature.h" | 34 #include "chromeos/network/onc/onc_signature.h" |
| 35 #include "chromeos/network/onc/onc_translator.h" | 35 #include "chromeos/network/onc/onc_translator.h" |
| 36 #include "chromeos/network/onc/onc_utils.h" | 36 #include "chromeos/network/onc/onc_utils.h" |
| 37 #include "chromeos/network/onc/onc_validator.h" | 37 #include "chromeos/network/onc/onc_validator.h" |
| 38 #include "chromeos/network/policy_util.h" | 38 #include "chromeos/network/policy_util.h" |
| 39 #include "chromeos/network/prohibited_technologies_handler.h" | 39 #include "chromeos/network/prohibited_technologies_handler.h" |
| 40 #include "chromeos/network/shill_property_util.h" | 40 #include "chromeos/network/shill_property_util.h" |
| 41 #include "chromeos/network/tether_constants.h" | |
| 41 #include "components/onc/onc_constants.h" | 42 #include "components/onc/onc_constants.h" |
| 42 #include "third_party/cros_system_api/dbus/service_constants.h" | 43 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 43 | 44 |
| 44 namespace chromeos { | 45 namespace chromeos { |
| 45 | 46 |
| 46 namespace { | 47 namespace { |
| 47 | 48 |
| 48 using GuidToPolicyMap = ManagedNetworkConfigurationHandler::GuidToPolicyMap; | 49 using GuidToPolicyMap = ManagedNetworkConfigurationHandler::GuidToPolicyMap; |
| 49 | 50 |
| 50 // These are error strings used for error callbacks. None of these error | 51 // These are error strings used for error callbacks. None of these error |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 136 const std::string& userhash, | 137 const std::string& userhash, |
| 137 const network_handler::DictionaryResultCallback& callback, | 138 const network_handler::DictionaryResultCallback& callback, |
| 138 const network_handler::ErrorCallback& error_callback, | 139 const network_handler::ErrorCallback& error_callback, |
| 139 const std::string& service_path, | 140 const std::string& service_path, |
| 140 std::unique_ptr<base::DictionaryValue> shill_properties) { | 141 std::unique_ptr<base::DictionaryValue> shill_properties) { |
| 141 std::string profile_path; | 142 std::string profile_path; |
| 142 shill_properties->GetStringWithoutPathExpansion(shill::kProfileProperty, | 143 shill_properties->GetStringWithoutPathExpansion(shill::kProfileProperty, |
| 143 &profile_path); | 144 &profile_path); |
| 144 const NetworkProfile* profile = | 145 const NetworkProfile* profile = |
| 145 network_profile_handler_->GetProfileForPath(profile_path); | 146 network_profile_handler_->GetProfileForPath(profile_path); |
| 146 if (!profile) | 147 if (!profile && !onc::IsTetherShillDictionary(*shill_properties)) { |
| 148 // Tether networks are not expected to have an associated profile; only | |
| 149 // log an error if the provided properties do not correspond to a | |
| 150 // Tether network. | |
| 147 NET_LOG_ERROR("No profile for service: " + profile_path, service_path); | 151 NET_LOG_ERROR("No profile for service: " + profile_path, service_path); |
| 152 } | |
| 148 | 153 |
| 149 std::unique_ptr<NetworkUIData> ui_data = | 154 std::unique_ptr<NetworkUIData> ui_data = |
| 150 shill_property_util::GetUIDataFromProperties(*shill_properties); | 155 shill_property_util::GetUIDataFromProperties(*shill_properties); |
| 151 | 156 |
| 152 const base::DictionaryValue* user_settings = NULL; | 157 const base::DictionaryValue* user_settings = NULL; |
| 153 | 158 |
| 154 if (ui_data && profile) { | 159 if (ui_data && profile) { |
| 155 user_settings = ui_data->user_settings(); | 160 user_settings = ui_data->user_settings(); |
| 156 } else if (profile) { | 161 } else if (profile) { |
| 157 NET_LOG_DEBUG("Service contains empty or invalid UIData", service_path); | 162 NET_LOG_DEBUG("Service contains empty or invalid UIData", service_path); |
| 158 // TODO(pneubeck): add a conversion of user configured entries of old | 163 // TODO(pneubeck): add a conversion of user configured entries of old |
| 159 // ChromeOS versions. We will have to use a heuristic to determine which | 164 // ChromeOS versions. We will have to use a heuristic to determine which |
| 160 // properties _might_ be user configured. | 165 // properties _might_ be user configured. |
| 161 } | 166 } |
| 162 | 167 |
| 163 std::string guid; | 168 std::string guid; |
| 164 shill_properties->GetStringWithoutPathExpansion(shill::kGuidProperty, &guid); | 169 shill_properties->GetStringWithoutPathExpansion(shill::kGuidProperty, &guid); |
| 165 | 170 |
| 166 ::onc::ONCSource onc_source; | 171 ::onc::ONCSource onc_source; |
| 167 FindPolicyByGUID(userhash, guid, &onc_source); | 172 FindPolicyByGUID(userhash, guid, &onc_source); |
| 168 const NetworkState* network_state = | 173 const NetworkState* network_state = |
| 169 network_state_handler_->GetNetworkState(service_path); | 174 network_state_handler_->GetNetworkState(service_path); |
| 170 std::unique_ptr<base::DictionaryValue> active_settings( | 175 std::unique_ptr<base::DictionaryValue> active_settings( |
| 171 onc::TranslateShillServiceToONCPart(*shill_properties, onc_source, | 176 onc::TranslateShillServiceToONCPart(*shill_properties, onc_source, |
| 172 &onc::kNetworkWithStateSignature, | 177 &onc::kNetworkWithStateSignature, |
| 173 network_state)); | 178 network_state)); |
| 174 | 179 |
| 175 const base::DictionaryValue* network_policy = NULL; | |
| 176 const base::DictionaryValue* global_policy = NULL; | |
| 177 if (profile) { | 180 if (profile) { |
| 178 const Policies* policies = GetPoliciesForProfile(*profile); | 181 const Policies* policies = GetPoliciesForProfile(*profile); |
| 179 if (!policies) { | 182 if (!policies) { |
| 180 InvokeErrorCallback( | 183 InvokeErrorCallback( |
| 181 service_path, error_callback, kPoliciesNotInitialized); | 184 service_path, error_callback, kPoliciesNotInitialized); |
| 182 return; | 185 return; |
| 183 } | 186 } |
| 184 if (!guid.empty()) | 187 |
| 185 network_policy = GetByGUID(policies->per_network_config, guid); | 188 const base::DictionaryValue* network_policy = |
| 186 global_policy = &policies->global_network_config; | 189 guid.empty() ? nullptr : GetByGUID(policies->per_network_config, guid); |
| 190 const base::DictionaryValue* global_policy = | |
| 191 &policies->global_network_config; | |
| 192 | |
| 193 std::unique_ptr<base::DictionaryValue> augmented_properties( | |
| 194 policy_util::CreateManagedONC(global_policy, network_policy, | |
| 195 user_settings, active_settings.get(), | |
| 196 profile)); | |
| 197 callback.Run(service_path, *augmented_properties); | |
| 198 } else { | |
| 199 callback.Run(service_path, *active_settings); | |
| 187 } | 200 } |
| 188 | |
| 189 std::unique_ptr<base::DictionaryValue> augmented_properties( | |
| 190 policy_util::CreateManagedONC(global_policy, network_policy, | |
| 191 user_settings, active_settings.get(), | |
| 192 profile)); | |
|
stevenjb
2017/04/24 17:15:52
This always needs to be called, even if profile is
Kyle Horimoto
2017/04/24 19:49:38
Done.
| |
| 193 callback.Run(service_path, *augmented_properties); | |
| 194 } | 201 } |
| 195 | 202 |
| 196 // GetProperties | 203 // GetProperties |
| 197 | 204 |
| 198 void ManagedNetworkConfigurationHandlerImpl::GetProperties( | 205 void ManagedNetworkConfigurationHandlerImpl::GetProperties( |
| 199 const std::string& userhash, | 206 const std::string& userhash, |
| 200 const std::string& service_path, | 207 const std::string& service_path, |
| 201 const network_handler::DictionaryResultCallback& callback, | 208 const network_handler::DictionaryResultCallback& callback, |
| 202 const network_handler::ErrorCallback& error_callback) { | 209 const network_handler::ErrorCallback& error_callback) { |
| 203 NET_LOG_USER("GetProperties", service_path); | 210 NET_LOG_USER("GetProperties", service_path); |
| (...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 906 std::unique_ptr<base::DictionaryValue> network_properties, | 913 std::unique_ptr<base::DictionaryValue> network_properties, |
| 907 GetDevicePropertiesCallback send_callback, | 914 GetDevicePropertiesCallback send_callback, |
| 908 const std::string& error_name, | 915 const std::string& error_name, |
| 909 std::unique_ptr<base::DictionaryValue> error_data) { | 916 std::unique_ptr<base::DictionaryValue> error_data) { |
| 910 NET_LOG_ERROR("Error getting device properties", service_path); | 917 NET_LOG_ERROR("Error getting device properties", service_path); |
| 911 send_callback.Run(service_path, std::move(network_properties)); | 918 send_callback.Run(service_path, std::move(network_properties)); |
| 912 } | 919 } |
| 913 | 920 |
| 914 | 921 |
| 915 } // namespace chromeos | 922 } // namespace chromeos |
| OLD | NEW |