OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/net/onc_utils.h" | 5 #include "chrome/browser/chromeos/net/onc_utils.h" |
6 | 6 |
7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
8 #include "base/json/json_writer.h" | 8 #include "base/json/json_writer.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
11 #include "base/values.h" | 11 #include "base/values.h" |
12 #include "chrome/browser/chromeos/login/users/user.h" | 12 #include "chrome/browser/chromeos/login/users/user.h" |
13 #include "chrome/browser/chromeos/login/users/user_manager.h" | 13 #include "chrome/browser/chromeos/login/users/user_manager.h" |
14 #include "chrome/browser/chromeos/ui_proxy_config.h" | 14 #include "chrome/browser/chromeos/ui_proxy_config.h" |
15 #include "chrome/browser/prefs/proxy_config_dictionary.h" | 15 #include "chrome/browser/prefs/proxy_config_dictionary.h" |
16 #include "chrome/common/pref_names.h" | 16 #include "chrome/common/pref_names.h" |
17 #include "chromeos/network/favorite_state.h" | |
18 #include "chromeos/network/managed_network_configuration_handler.h" | 17 #include "chromeos/network/managed_network_configuration_handler.h" |
19 #include "chromeos/network/network_configuration_handler.h" | 18 #include "chromeos/network/network_configuration_handler.h" |
20 #include "chromeos/network/network_handler.h" | 19 #include "chromeos/network/network_handler.h" |
21 #include "chromeos/network/network_profile.h" | 20 #include "chromeos/network/network_profile.h" |
22 #include "chromeos/network/network_profile_handler.h" | 21 #include "chromeos/network/network_profile_handler.h" |
23 #include "chromeos/network/network_state.h" | 22 #include "chromeos/network/network_state.h" |
24 #include "chromeos/network/network_state_handler.h" | 23 #include "chromeos/network/network_state_handler.h" |
25 #include "chromeos/network/network_ui_data.h" | 24 #include "chromeos/network/network_ui_data.h" |
26 #include "chromeos/network/onc/onc_normalizer.h" | 25 #include "chromeos/network/onc/onc_normalizer.h" |
27 #include "chromeos/network/onc/onc_signature.h" | 26 #include "chromeos/network/onc/onc_signature.h" |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 ethernet->GetStringWithoutPathExpansion(::onc::ethernet::kAuthentication, | 340 ethernet->GetStringWithoutPathExpansion(::onc::ethernet::kAuthentication, |
342 &auth); | 341 &auth); |
343 if (auth == ::onc::ethernet::kNone) | 342 if (auth == ::onc::ethernet::kNone) |
344 return network; | 343 return network; |
345 } | 344 } |
346 return NULL; | 345 return NULL; |
347 } | 346 } |
348 | 347 |
349 const base::DictionaryValue* GetNetworkConfigForNetworkFromOnc( | 348 const base::DictionaryValue* GetNetworkConfigForNetworkFromOnc( |
350 const base::ListValue& network_configs, | 349 const base::ListValue& network_configs, |
351 const FavoriteState& favorite) { | 350 const NetworkState& network) { |
352 // In all cases except Ethernet, we use the GUID of |network|. | 351 // In all cases except Ethernet, we use the GUID of |network|. |
353 if (!favorite.Matches(NetworkTypePattern::Ethernet())) | 352 if (!network.Matches(NetworkTypePattern::Ethernet())) |
354 return GetNetworkConfigByGUID(network_configs, favorite.guid()); | 353 return GetNetworkConfigByGUID(network_configs, network.guid()); |
355 | 354 |
356 // Ethernet is always shared and thus cannot store a GUID per user. Thus we | 355 // Ethernet is always shared and thus cannot store a GUID per user. Thus we |
357 // search for any Ethernet policy intead of a matching GUID. | 356 // search for any Ethernet policy intead of a matching GUID. |
358 // EthernetEAP service contains only the EAP parameters and stores the GUID of | 357 // EthernetEAP service contains only the EAP parameters and stores the GUID of |
359 // the respective ONC policy. The EthernetEAP service itself is however never | 358 // the respective ONC policy. The EthernetEAP service itself is however never |
360 // in state "connected". An EthernetEAP policy must be applied, if an Ethernet | 359 // in state "connected". An EthernetEAP policy must be applied, if an Ethernet |
361 // service is connected using the EAP parameters. | 360 // service is connected using the EAP parameters. |
362 const FavoriteState* ethernet_eap = NULL; | 361 const NetworkState* ethernet_eap = NULL; |
363 if (NetworkHandler::IsInitialized()) { | 362 if (NetworkHandler::IsInitialized()) { |
364 ethernet_eap = | 363 ethernet_eap = |
365 NetworkHandler::Get()->network_state_handler()->GetEAPForEthernet( | 364 NetworkHandler::Get()->network_state_handler()->GetEAPForEthernet( |
366 favorite.path()); | 365 network.path()); |
367 } | 366 } |
368 | 367 |
369 // The GUID associated with the EthernetEAP service refers to the ONC policy | 368 // The GUID associated with the EthernetEAP service refers to the ONC policy |
370 // with "Authentication: 8021X". | 369 // with "Authentication: 8021X". |
371 if (ethernet_eap) | 370 if (ethernet_eap) |
372 return GetNetworkConfigByGUID(network_configs, ethernet_eap->guid()); | 371 return GetNetworkConfigByGUID(network_configs, ethernet_eap->guid()); |
373 | 372 |
374 // Otherwise, EAP is not used and instead the Ethernet policy with | 373 // Otherwise, EAP is not used and instead the Ethernet policy with |
375 // "Authentication: None" applies. | 374 // "Authentication: None" applies. |
376 return GetNetworkConfigForEthernetWithoutEAP(network_configs); | 375 return GetNetworkConfigForEthernetWithoutEAP(network_configs); |
377 } | 376 } |
378 | 377 |
379 const base::DictionaryValue* GetPolicyForNetworkFromPref( | 378 const base::DictionaryValue* GetPolicyForNetworkFromPref( |
380 const PrefService* pref_service, | 379 const PrefService* pref_service, |
381 const char* pref_name, | 380 const char* pref_name, |
382 const FavoriteState& favorite) { | 381 const NetworkState& network) { |
383 if (!pref_service) { | 382 if (!pref_service) { |
384 VLOG(2) << "No pref service"; | 383 VLOG(2) << "No pref service"; |
385 return NULL; | 384 return NULL; |
386 } | 385 } |
387 | 386 |
388 const PrefService::Preference* preference = | 387 const PrefService::Preference* preference = |
389 pref_service->FindPreference(pref_name); | 388 pref_service->FindPreference(pref_name); |
390 if (!preference) { | 389 if (!preference) { |
391 VLOG(2) << "No preference " << pref_name; | 390 VLOG(2) << "No preference " << pref_name; |
392 // The preference may not exist in tests. | 391 // The preference may not exist in tests. |
(...skipping 13 matching lines...) Expand all Loading... |
406 return NULL; | 405 return NULL; |
407 } | 406 } |
408 VLOG(2) << "Preference with policy found."; | 407 VLOG(2) << "Preference with policy found."; |
409 const base::Value* onc_policy_value = preference->GetValue(); | 408 const base::Value* onc_policy_value = preference->GetValue(); |
410 DCHECK(onc_policy_value); | 409 DCHECK(onc_policy_value); |
411 | 410 |
412 const base::ListValue* onc_policy = NULL; | 411 const base::ListValue* onc_policy = NULL; |
413 onc_policy_value->GetAsList(&onc_policy); | 412 onc_policy_value->GetAsList(&onc_policy); |
414 DCHECK(onc_policy); | 413 DCHECK(onc_policy); |
415 | 414 |
416 return GetNetworkConfigForNetworkFromOnc(*onc_policy, favorite); | 415 return GetNetworkConfigForNetworkFromOnc(*onc_policy, network); |
417 } | 416 } |
418 | 417 |
419 } // namespace | 418 } // namespace |
420 | 419 |
421 const base::DictionaryValue* GetPolicyForFavoriteNetwork( | 420 const base::DictionaryValue* GetPolicyForNetwork( |
422 const PrefService* profile_prefs, | 421 const PrefService* profile_prefs, |
423 const PrefService* local_state_prefs, | 422 const PrefService* local_state_prefs, |
424 const FavoriteState& favorite, | 423 const NetworkState& network, |
425 ::onc::ONCSource* onc_source) { | 424 ::onc::ONCSource* onc_source) { |
426 VLOG(2) << "GetPolicyForFavoriteNetwork: " << favorite.path(); | 425 VLOG(2) << "GetPolicyForNetwork: " << network.path(); |
427 *onc_source = ::onc::ONC_SOURCE_NONE; | 426 *onc_source = ::onc::ONC_SOURCE_NONE; |
428 | 427 |
429 const base::DictionaryValue* network_policy = GetPolicyForNetworkFromPref( | 428 const base::DictionaryValue* network_policy = GetPolicyForNetworkFromPref( |
430 profile_prefs, prefs::kOpenNetworkConfiguration, favorite); | 429 profile_prefs, prefs::kOpenNetworkConfiguration, network); |
431 if (network_policy) { | 430 if (network_policy) { |
432 VLOG(1) << "Network " << favorite.path() << " is managed by user policy."; | 431 VLOG(1) << "Network " << network.path() << " is managed by user policy."; |
433 *onc_source = ::onc::ONC_SOURCE_USER_POLICY; | 432 *onc_source = ::onc::ONC_SOURCE_USER_POLICY; |
434 return network_policy; | 433 return network_policy; |
435 } | 434 } |
436 network_policy = GetPolicyForNetworkFromPref( | 435 network_policy = GetPolicyForNetworkFromPref( |
437 local_state_prefs, prefs::kDeviceOpenNetworkConfiguration, favorite); | 436 local_state_prefs, prefs::kDeviceOpenNetworkConfiguration, network); |
438 if (network_policy) { | 437 if (network_policy) { |
439 VLOG(1) << "Network " << favorite.path() << " is managed by device policy."; | 438 VLOG(1) << "Network " << network.path() << " is managed by device policy."; |
440 *onc_source = ::onc::ONC_SOURCE_DEVICE_POLICY; | 439 *onc_source = ::onc::ONC_SOURCE_DEVICE_POLICY; |
441 return network_policy; | 440 return network_policy; |
442 } | 441 } |
443 VLOG(2) << "Network " << favorite.path() << " is unmanaged."; | 442 VLOG(2) << "Network " << network.path() << " is unmanaged."; |
444 return NULL; | 443 return NULL; |
445 } | 444 } |
446 | 445 |
447 bool HasPolicyForFavoriteNetwork(const PrefService* profile_prefs, | 446 bool HasPolicyForNetwork(const PrefService* profile_prefs, |
448 const PrefService* local_state_prefs, | 447 const PrefService* local_state_prefs, |
449 const FavoriteState& network) { | 448 const NetworkState& network) { |
450 ::onc::ONCSource ignored_onc_source; | 449 ::onc::ONCSource ignored_onc_source; |
451 const base::DictionaryValue* policy = onc::GetPolicyForFavoriteNetwork( | 450 const base::DictionaryValue* policy = onc::GetPolicyForNetwork( |
452 profile_prefs, local_state_prefs, network, &ignored_onc_source); | 451 profile_prefs, local_state_prefs, network, &ignored_onc_source); |
453 return policy != NULL; | 452 return policy != NULL; |
454 } | 453 } |
455 | 454 |
456 } // namespace onc | 455 } // namespace onc |
457 } // namespace chromeos | 456 } // namespace chromeos |
OLD | NEW |