• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/chromeos/policy/device_network_configuration_updater.h"
6 
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "chrome/browser/chromeos/settings/cros_settings.h"
10 #include "chromeos/network/managed_network_configuration_handler.h"
11 #include "chromeos/network/network_device_handler.h"
12 #include "chromeos/settings/cros_settings_names.h"
13 #include "chromeos/settings/cros_settings_provider.h"
14 #include "policy/policy_constants.h"
15 
16 namespace policy {
17 
~DeviceNetworkConfigurationUpdater()18 DeviceNetworkConfigurationUpdater::~DeviceNetworkConfigurationUpdater() {}
19 
20 // static
21 scoped_ptr<DeviceNetworkConfigurationUpdater>
CreateForDevicePolicy(PolicyService * policy_service,chromeos::ManagedNetworkConfigurationHandler * network_config_handler,chromeos::NetworkDeviceHandler * network_device_handler,chromeos::CrosSettings * cros_settings)22 DeviceNetworkConfigurationUpdater::CreateForDevicePolicy(
23     PolicyService* policy_service,
24     chromeos::ManagedNetworkConfigurationHandler* network_config_handler,
25     chromeos::NetworkDeviceHandler* network_device_handler,
26     chromeos::CrosSettings* cros_settings) {
27   scoped_ptr<DeviceNetworkConfigurationUpdater> updater(
28       new DeviceNetworkConfigurationUpdater(policy_service,
29                                             network_config_handler,
30                                             network_device_handler,
31                                             cros_settings));
32   updater->Init();
33   return updater.Pass();
34 }
35 
DeviceNetworkConfigurationUpdater(PolicyService * policy_service,chromeos::ManagedNetworkConfigurationHandler * network_config_handler,chromeos::NetworkDeviceHandler * network_device_handler,chromeos::CrosSettings * cros_settings)36 DeviceNetworkConfigurationUpdater::DeviceNetworkConfigurationUpdater(
37     PolicyService* policy_service,
38     chromeos::ManagedNetworkConfigurationHandler* network_config_handler,
39     chromeos::NetworkDeviceHandler* network_device_handler,
40     chromeos::CrosSettings* cros_settings)
41     : NetworkConfigurationUpdater(onc::ONC_SOURCE_DEVICE_POLICY,
42                                   key::kDeviceOpenNetworkConfiguration,
43                                   policy_service,
44                                   network_config_handler),
45       network_device_handler_(network_device_handler),
46       cros_settings_(cros_settings),
47       weak_factory_(this) {
48   DCHECK(network_device_handler_);
49   data_roaming_setting_subscription_ = cros_settings->AddSettingsObserver(
50       chromeos::kSignedDataRoamingEnabled,
51       base::Bind(
52           &DeviceNetworkConfigurationUpdater::OnDataRoamingSettingChanged,
53           base::Unretained(this)));
54 }
55 
Init()56 void DeviceNetworkConfigurationUpdater::Init() {
57   NetworkConfigurationUpdater::Init();
58 
59   // Apply the roaming setting initially.
60   OnDataRoamingSettingChanged();
61 }
62 
ImportCertificates(const base::ListValue & certificates_onc)63 void DeviceNetworkConfigurationUpdater::ImportCertificates(
64     const base::ListValue& certificates_onc) {
65   // Importing CA and server certs from device policy is not  allowed, while
66   // importing client is not yet supported (as a system-wide PKCS#11 token to
67   // which they should be imported does not exists at the time).
68 }
69 
ApplyNetworkPolicy(base::ListValue * network_configs_onc,base::DictionaryValue * global_network_config)70 void DeviceNetworkConfigurationUpdater::ApplyNetworkPolicy(
71     base::ListValue* network_configs_onc,
72     base::DictionaryValue* global_network_config) {
73   network_config_handler_->SetPolicy(onc_source_,
74                                      std::string() /* no username hash */,
75                                      *network_configs_onc,
76                                      *global_network_config);
77 }
78 
OnDataRoamingSettingChanged()79 void DeviceNetworkConfigurationUpdater::OnDataRoamingSettingChanged() {
80   chromeos::CrosSettingsProvider::TrustedStatus trusted_status =
81       cros_settings_->PrepareTrustedValues(base::Bind(
82           &DeviceNetworkConfigurationUpdater::OnDataRoamingSettingChanged,
83           weak_factory_.GetWeakPtr()));
84 
85   if (trusted_status == chromeos::CrosSettingsProvider::TEMPORARILY_UNTRUSTED) {
86     // Return, this function will be called again later by
87     // PrepareTrustedValues.
88     return;
89   }
90 
91   bool data_roaming_setting = false;
92   if (trusted_status == chromeos::CrosSettingsProvider::TRUSTED) {
93     if (!cros_settings_->GetBoolean(chromeos::kSignedDataRoamingEnabled,
94                                     &data_roaming_setting)) {
95       LOG(ERROR) << "Couldn't get device setting "
96                  << chromeos::kSignedDataRoamingEnabled;
97       data_roaming_setting = false;
98     }
99   } else {
100     DCHECK_EQ(trusted_status,
101               chromeos::CrosSettingsProvider::PERMANENTLY_UNTRUSTED);
102     // Roaming is disabled as we can't determine the correct setting.
103   }
104 
105   network_device_handler_->SetCellularAllowRoaming(data_roaming_setting);
106 }
107 
108 }  // namespace policy
109