OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/policy/browser_policy_connector_chromeos.h" | 5 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "chrome/browser/chromeos/policy/affiliated_cloud_policy_invalidator.h" | 23 #include "chrome/browser/chromeos/policy/affiliated_cloud_policy_invalidator.h" |
24 #include "chrome/browser/chromeos/policy/affiliated_invalidation_service_provide
r.h" | 24 #include "chrome/browser/chromeos/policy/affiliated_invalidation_service_provide
r.h" |
25 #include "chrome/browser/chromeos/policy/affiliated_invalidation_service_provide
r_impl.h" | 25 #include "chrome/browser/chromeos/policy/affiliated_invalidation_service_provide
r_impl.h" |
26 #include "chrome/browser/chromeos/policy/bluetooth_policy_handler.h" | 26 #include "chrome/browser/chromeos/policy/bluetooth_policy_handler.h" |
27 #include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h" | 27 #include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h" |
28 #include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h" | 28 #include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h" |
29 #include "chrome/browser/chromeos/policy/device_local_account.h" | 29 #include "chrome/browser/chromeos/policy/device_local_account.h" |
30 #include "chrome/browser/chromeos/policy/device_local_account_policy_service.h" | 30 #include "chrome/browser/chromeos/policy/device_local_account_policy_service.h" |
31 #include "chrome/browser/chromeos/policy/device_network_configuration_updater.h" | 31 #include "chrome/browser/chromeos/policy/device_network_configuration_updater.h" |
32 #include "chrome/browser/chromeos/policy/enrollment_config.h" | 32 #include "chrome/browser/chromeos/policy/enrollment_config.h" |
33 #include "chrome/browser/chromeos/policy/enterprise_install_attributes.h" | |
34 #include "chrome/browser/chromeos/policy/remote_commands/affiliated_remote_comma
nds_invalidator.h" | 33 #include "chrome/browser/chromeos/policy/remote_commands/affiliated_remote_comma
nds_invalidator.h" |
35 #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h" | 34 #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h" |
36 #include "chrome/browser/chromeos/settings/cros_settings.h" | 35 #include "chrome/browser/chromeos/settings/cros_settings.h" |
37 #include "chrome/browser/chromeos/settings/device_settings_service.h" | 36 #include "chrome/browser/chromeos/settings/device_settings_service.h" |
| 37 #include "chrome/browser/chromeos/settings/install_attributes.h" |
38 #include "chrome/browser/policy/device_management_service_configuration.h" | 38 #include "chrome/browser/policy/device_management_service_configuration.h" |
39 #include "chrome/common/pref_names.h" | 39 #include "chrome/common/pref_names.h" |
40 #include "chromeos/attestation/attestation_flow.h" | 40 #include "chromeos/attestation/attestation_flow.h" |
41 #include "chromeos/chromeos_paths.h" | 41 #include "chromeos/chromeos_paths.h" |
42 #include "chromeos/chromeos_switches.h" | 42 #include "chromeos/chromeos_switches.h" |
43 #include "chromeos/cryptohome/async_method_caller.h" | 43 #include "chromeos/cryptohome/async_method_caller.h" |
44 #include "chromeos/cryptohome/system_salt_getter.h" | 44 #include "chromeos/cryptohome/system_salt_getter.h" |
45 #include "chromeos/dbus/cryptohome_client.h" | 45 #include "chromeos/dbus/cryptohome_client.h" |
46 #include "chromeos/dbus/dbus_thread_manager.h" | 46 #include "chromeos/dbus/dbus_thread_manager.h" |
47 #include "chromeos/network/network_handler.h" | 47 #include "chromeos/network/network_handler.h" |
(...skipping 10 matching lines...) Expand all Loading... |
58 #include "google_apis/gaia/gaia_auth_util.h" | 58 #include "google_apis/gaia/gaia_auth_util.h" |
59 #include "net/url_request/url_request_context_getter.h" | 59 #include "net/url_request/url_request_context_getter.h" |
60 | 60 |
61 using content::BrowserThread; | 61 using content::BrowserThread; |
62 | 62 |
63 namespace policy { | 63 namespace policy { |
64 | 64 |
65 namespace { | 65 namespace { |
66 | 66 |
67 // Install attributes for tests. | 67 // Install attributes for tests. |
68 EnterpriseInstallAttributes* g_testing_install_attributes = nullptr; | 68 chromeos::InstallAttributes* g_testing_install_attributes = nullptr; |
69 | 69 |
70 // Helper that returns a new SequencedTaskRunner backed by the blocking pool. | 70 // Helper that returns a new SequencedTaskRunner backed by the blocking pool. |
71 // Each SequencedTaskRunner returned is independent from the others. | 71 // Each SequencedTaskRunner returned is independent from the others. |
72 scoped_refptr<base::SequencedTaskRunner> GetBackgroundTaskRunner() { | 72 scoped_refptr<base::SequencedTaskRunner> GetBackgroundTaskRunner() { |
73 base::SequencedWorkerPool* pool = BrowserThread::GetBlockingPool(); | 73 base::SequencedWorkerPool* pool = BrowserThread::GetBlockingPool(); |
74 CHECK(pool); | 74 CHECK(pool); |
75 return pool->GetSequencedTaskRunnerWithShutdownBehavior( | 75 return pool->GetSequencedTaskRunnerWithShutdownBehavior( |
76 pool->GetSequenceToken(), base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); | 76 pool->GetSequenceToken(), base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
77 } | 77 } |
78 | 78 |
79 } // namespace | 79 } // namespace |
80 | 80 |
81 BrowserPolicyConnectorChromeOS::BrowserPolicyConnectorChromeOS() | 81 BrowserPolicyConnectorChromeOS::BrowserPolicyConnectorChromeOS() |
82 : device_cloud_policy_manager_(nullptr), | 82 : device_cloud_policy_manager_(nullptr), |
83 global_user_cloud_policy_provider_(nullptr), | 83 global_user_cloud_policy_provider_(nullptr), |
84 weak_ptr_factory_(this) { | 84 weak_ptr_factory_(this) { |
85 if (g_testing_install_attributes) { | 85 if (g_testing_install_attributes) { |
86 install_attributes_.reset(g_testing_install_attributes); | 86 install_attributes_.reset(g_testing_install_attributes); |
87 g_testing_install_attributes = nullptr; | 87 g_testing_install_attributes = nullptr; |
88 } | 88 } |
89 | 89 |
90 // SystemSaltGetter or DBusThreadManager may be uninitialized on unit tests. | 90 // SystemSaltGetter or DBusThreadManager may be uninitialized on unit tests. |
91 | 91 |
92 // TODO(satorux): Remove SystemSaltGetter::IsInitialized() when it's ready | 92 // TODO(satorux): Remove SystemSaltGetter::IsInitialized() when it's ready |
93 // (removing it now breaks tests). crbug.com/141016. | 93 // (removing it now breaks tests). crbug.com/141016. |
94 if (chromeos::SystemSaltGetter::IsInitialized() && | 94 if (chromeos::SystemSaltGetter::IsInitialized() && |
95 chromeos::DBusThreadManager::IsInitialized()) { | 95 chromeos::DBusThreadManager::IsInitialized()) { |
96 state_keys_broker_.reset(new ServerBackedStateKeysBroker( | 96 state_keys_broker_ = base::MakeUnique<ServerBackedStateKeysBroker>( |
97 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(), | 97 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(), |
98 base::ThreadTaskRunnerHandle::Get())); | 98 base::ThreadTaskRunnerHandle::Get()); |
99 | 99 |
100 chromeos::CryptohomeClient* cryptohome_client = | 100 chromeos::CryptohomeClient* cryptohome_client = |
101 chromeos::DBusThreadManager::Get()->GetCryptohomeClient(); | 101 chromeos::DBusThreadManager::Get()->GetCryptohomeClient(); |
102 | 102 |
103 // Don't initialize install attributes if g_testing_install_attributes have | 103 // Don't initialize install attributes if g_testing_install_attributes have |
104 // been injected. | 104 // been injected. |
105 if (!install_attributes_) { | 105 if (!install_attributes_) { |
106 install_attributes_.reset( | 106 install_attributes_ = |
107 new EnterpriseInstallAttributes(cryptohome_client)); | 107 base::MakeUnique<chromeos::InstallAttributes>(cryptohome_client); |
108 base::FilePath install_attrs_file; | 108 base::FilePath install_attrs_file; |
109 CHECK(PathService::Get(chromeos::FILE_INSTALL_ATTRIBUTES, | 109 CHECK(PathService::Get(chromeos::FILE_INSTALL_ATTRIBUTES, |
110 &install_attrs_file)); | 110 &install_attrs_file)); |
111 install_attributes_->Init(install_attrs_file); | 111 install_attributes_->Init(install_attrs_file); |
112 } | 112 } |
113 | 113 |
114 std::unique_ptr<DeviceCloudPolicyStoreChromeOS> device_cloud_policy_store( | 114 std::unique_ptr<DeviceCloudPolicyStoreChromeOS> device_cloud_policy_store = |
115 new DeviceCloudPolicyStoreChromeOS( | 115 base::MakeUnique<DeviceCloudPolicyStoreChromeOS>( |
116 chromeos::DeviceSettingsService::Get(), install_attributes_.get(), | 116 chromeos::DeviceSettingsService::Get(), install_attributes_.get(), |
117 GetBackgroundTaskRunner())); | 117 GetBackgroundTaskRunner()); |
118 device_cloud_policy_manager_ = new DeviceCloudPolicyManagerChromeOS( | 118 device_cloud_policy_manager_ = new DeviceCloudPolicyManagerChromeOS( |
119 std::move(device_cloud_policy_store), | 119 std::move(device_cloud_policy_store), |
120 base::ThreadTaskRunnerHandle::Get(), state_keys_broker_.get()); | 120 base::ThreadTaskRunnerHandle::Get(), state_keys_broker_.get()); |
121 AddPolicyProvider(std::unique_ptr<ConfigurationPolicyProvider>( | 121 AddPolicyProvider(std::unique_ptr<ConfigurationPolicyProvider>( |
122 device_cloud_policy_manager_)); | 122 device_cloud_policy_manager_)); |
123 } | 123 } |
124 | 124 |
125 global_user_cloud_policy_provider_ = new ProxyPolicyProvider(); | 125 global_user_cloud_policy_provider_ = new ProxyPolicyProvider(); |
126 AddPolicyProvider(std::unique_ptr<ConfigurationPolicyProvider>( | 126 AddPolicyProvider(std::unique_ptr<ConfigurationPolicyProvider>( |
127 global_user_cloud_policy_provider_)); | 127 global_user_cloud_policy_provider_)); |
128 } | 128 } |
129 | 129 |
130 BrowserPolicyConnectorChromeOS::~BrowserPolicyConnectorChromeOS() {} | 130 BrowserPolicyConnectorChromeOS::~BrowserPolicyConnectorChromeOS() {} |
131 | 131 |
132 void BrowserPolicyConnectorChromeOS::Init( | 132 void BrowserPolicyConnectorChromeOS::Init( |
133 PrefService* local_state, | 133 PrefService* local_state, |
134 scoped_refptr<net::URLRequestContextGetter> request_context) { | 134 scoped_refptr<net::URLRequestContextGetter> request_context) { |
135 local_state_ = local_state; | 135 local_state_ = local_state; |
136 ChromeBrowserPolicyConnector::Init(local_state, request_context); | 136 ChromeBrowserPolicyConnector::Init(local_state, request_context); |
137 | 137 |
138 affiliated_invalidation_service_provider_.reset( | 138 affiliated_invalidation_service_provider_ = |
139 new AffiliatedInvalidationServiceProviderImpl); | 139 base::MakeUnique<AffiliatedInvalidationServiceProviderImpl>(); |
140 | 140 |
141 if (device_cloud_policy_manager_) { | 141 if (device_cloud_policy_manager_) { |
142 // Note: for now the |device_cloud_policy_manager_| is using the global | 142 // Note: for now the |device_cloud_policy_manager_| is using the global |
143 // schema registry. Eventually it will have its own registry, once device | 143 // schema registry. Eventually it will have its own registry, once device |
144 // cloud policy for extensions is introduced. That means it'd have to be | 144 // cloud policy for extensions is introduced. That means it'd have to be |
145 // initialized from here instead of BrowserPolicyConnector::Init(). | 145 // initialized from here instead of BrowserPolicyConnector::Init(). |
146 | 146 |
147 device_cloud_policy_manager_->Initialize(local_state); | 147 device_cloud_policy_manager_->Initialize(local_state); |
148 device_cloud_policy_manager_->AddDeviceCloudPolicyManagerObserver(this); | 148 device_cloud_policy_manager_->AddDeviceCloudPolicyManagerObserver(this); |
149 RestartDeviceCloudPolicyInitializer(); | 149 RestartDeviceCloudPolicyInitializer(); |
150 } | 150 } |
151 | 151 |
152 device_local_account_policy_service_.reset( | 152 device_local_account_policy_service_ = |
153 new DeviceLocalAccountPolicyService( | 153 base::MakeUnique<DeviceLocalAccountPolicyService>( |
154 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(), | 154 chromeos::DBusThreadManager::Get()->GetSessionManagerClient(), |
155 chromeos::DeviceSettingsService::Get(), chromeos::CrosSettings::Get(), | 155 chromeos::DeviceSettingsService::Get(), chromeos::CrosSettings::Get(), |
156 affiliated_invalidation_service_provider_.get(), | 156 affiliated_invalidation_service_provider_.get(), |
157 GetBackgroundTaskRunner(), GetBackgroundTaskRunner(), | 157 GetBackgroundTaskRunner(), GetBackgroundTaskRunner(), |
158 GetBackgroundTaskRunner(), | 158 GetBackgroundTaskRunner(), |
159 content::BrowserThread::GetTaskRunnerForThread( | 159 content::BrowserThread::GetTaskRunnerForThread( |
160 content::BrowserThread::IO), | 160 content::BrowserThread::IO), |
161 request_context)); | 161 request_context); |
162 device_local_account_policy_service_->Connect(device_management_service()); | 162 device_local_account_policy_service_->Connect(device_management_service()); |
163 if (device_cloud_policy_manager_) { | 163 if (device_cloud_policy_manager_) { |
164 device_cloud_policy_invalidator_.reset(new AffiliatedCloudPolicyInvalidator( | 164 device_cloud_policy_invalidator_ = |
165 enterprise_management::DeviceRegisterRequest::DEVICE, | 165 base::MakeUnique<AffiliatedCloudPolicyInvalidator>( |
166 device_cloud_policy_manager_->core(), | 166 enterprise_management::DeviceRegisterRequest::DEVICE, |
167 affiliated_invalidation_service_provider_.get())); | |
168 device_remote_commands_invalidator_.reset( | |
169 new AffiliatedRemoteCommandsInvalidator( | |
170 device_cloud_policy_manager_->core(), | 167 device_cloud_policy_manager_->core(), |
171 affiliated_invalidation_service_provider_.get())); | 168 affiliated_invalidation_service_provider_.get()); |
| 169 device_remote_commands_invalidator_ = |
| 170 base::MakeUnique<AffiliatedRemoteCommandsInvalidator>( |
| 171 device_cloud_policy_manager_->core(), |
| 172 affiliated_invalidation_service_provider_.get()); |
172 } | 173 } |
173 | 174 |
174 SetTimezoneIfPolicyAvailable(); | 175 SetTimezoneIfPolicyAvailable(); |
175 | 176 |
176 network_configuration_updater_ = | 177 network_configuration_updater_ = |
177 DeviceNetworkConfigurationUpdater::CreateForDevicePolicy( | 178 DeviceNetworkConfigurationUpdater::CreateForDevicePolicy( |
178 GetPolicyService(), | 179 GetPolicyService(), |
179 chromeos::NetworkHandler::Get() | 180 chromeos::NetworkHandler::Get() |
180 ->managed_network_configuration_handler(), | 181 ->managed_network_configuration_handler(), |
181 chromeos::NetworkHandler::Get()->network_device_handler(), | 182 chromeos::NetworkHandler::Get()->network_device_handler(), |
182 chromeos::CrosSettings::Get()); | 183 chromeos::CrosSettings::Get()); |
183 | 184 |
184 bluetooth_policy_handler_.reset( | 185 bluetooth_policy_handler_ = |
185 new BluetoothPolicyHandler(chromeos::CrosSettings::Get())); | 186 base::MakeUnique<BluetoothPolicyHandler>(chromeos::CrosSettings::Get()); |
186 } | 187 } |
187 | 188 |
188 void BrowserPolicyConnectorChromeOS::PreShutdown() { | 189 void BrowserPolicyConnectorChromeOS::PreShutdown() { |
189 // Let the |affiliated_invalidation_service_provider_| unregister itself as an | 190 // Let the |affiliated_invalidation_service_provider_| unregister itself as an |
190 // observer of per-Profile InvalidationServices and the device-global | 191 // observer of per-Profile InvalidationServices and the device-global |
191 // invalidation::TiclInvalidationService it may have created as an observer of | 192 // invalidation::TiclInvalidationService it may have created as an observer of |
192 // the DeviceOAuth2TokenService that is destroyed before Shutdown() is called. | 193 // the DeviceOAuth2TokenService that is destroyed before Shutdown() is called. |
193 if (affiliated_invalidation_service_provider_) | 194 if (affiliated_invalidation_service_provider_) |
194 affiliated_invalidation_service_provider_->Shutdown(); | 195 affiliated_invalidation_service_provider_->Shutdown(); |
195 } | 196 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 global_user_cloud_policy_provider_->SetDelegate(user_policy_provider); | 256 global_user_cloud_policy_provider_->SetDelegate(user_policy_provider); |
256 } | 257 } |
257 | 258 |
258 void BrowserPolicyConnectorChromeOS::SetDeviceCloudPolicyInitializerForTesting( | 259 void BrowserPolicyConnectorChromeOS::SetDeviceCloudPolicyInitializerForTesting( |
259 std::unique_ptr<DeviceCloudPolicyInitializer> initializer) { | 260 std::unique_ptr<DeviceCloudPolicyInitializer> initializer) { |
260 device_cloud_policy_initializer_ = std::move(initializer); | 261 device_cloud_policy_initializer_ = std::move(initializer); |
261 } | 262 } |
262 | 263 |
263 // static | 264 // static |
264 void BrowserPolicyConnectorChromeOS::SetInstallAttributesForTesting( | 265 void BrowserPolicyConnectorChromeOS::SetInstallAttributesForTesting( |
265 EnterpriseInstallAttributes* attributes) { | 266 chromeos::InstallAttributes* attributes) { |
266 DCHECK(!g_testing_install_attributes); | 267 DCHECK(!g_testing_install_attributes); |
267 g_testing_install_attributes = attributes; | 268 g_testing_install_attributes = attributes; |
268 } | 269 } |
269 | 270 |
270 // static | 271 // static |
271 void BrowserPolicyConnectorChromeOS::RemoveInstallAttributesForTesting() { | 272 void BrowserPolicyConnectorChromeOS::RemoveInstallAttributesForTesting() { |
272 if (g_testing_install_attributes) { | 273 if (g_testing_install_attributes) { |
273 delete g_testing_install_attributes; | 274 delete g_testing_install_attributes; |
274 g_testing_install_attributes = nullptr; | 275 g_testing_install_attributes = nullptr; |
275 } | 276 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 std::string timezone; | 313 std::string timezone; |
313 if (chromeos::CrosSettings::Get()->GetString(chromeos::kSystemTimezonePolicy, | 314 if (chromeos::CrosSettings::Get()->GetString(chromeos::kSystemTimezonePolicy, |
314 &timezone) && | 315 &timezone) && |
315 !timezone.empty()) { | 316 !timezone.empty()) { |
316 chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( | 317 chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( |
317 base::UTF8ToUTF16(timezone)); | 318 base::UTF8ToUTF16(timezone)); |
318 } | 319 } |
319 } | 320 } |
320 | 321 |
321 void BrowserPolicyConnectorChromeOS::RestartDeviceCloudPolicyInitializer() { | 322 void BrowserPolicyConnectorChromeOS::RestartDeviceCloudPolicyInitializer() { |
322 device_cloud_policy_initializer_.reset(new DeviceCloudPolicyInitializer( | 323 device_cloud_policy_initializer_ = |
323 local_state_, device_management_service(), GetBackgroundTaskRunner(), | 324 base::MakeUnique<DeviceCloudPolicyInitializer>( |
324 install_attributes_.get(), state_keys_broker_.get(), | 325 local_state_, device_management_service(), GetBackgroundTaskRunner(), |
325 device_cloud_policy_manager_->device_store(), | 326 install_attributes_.get(), state_keys_broker_.get(), |
326 device_cloud_policy_manager_, | 327 device_cloud_policy_manager_->device_store(), |
327 cryptohome::AsyncMethodCaller::GetInstance(), CreateAttestationFlow())); | 328 device_cloud_policy_manager_, |
| 329 cryptohome::AsyncMethodCaller::GetInstance(), |
| 330 CreateAttestationFlow()); |
328 device_cloud_policy_initializer_->Init(); | 331 device_cloud_policy_initializer_->Init(); |
329 } | 332 } |
330 | 333 |
331 std::unique_ptr<chromeos::attestation::AttestationFlow> | 334 std::unique_ptr<chromeos::attestation::AttestationFlow> |
332 BrowserPolicyConnectorChromeOS::CreateAttestationFlow() { | 335 BrowserPolicyConnectorChromeOS::CreateAttestationFlow() { |
333 return base::MakeUnique<chromeos::attestation::AttestationFlow>( | 336 return base::MakeUnique<chromeos::attestation::AttestationFlow>( |
334 cryptohome::AsyncMethodCaller::GetInstance(), | 337 cryptohome::AsyncMethodCaller::GetInstance(), |
335 chromeos::DBusThreadManager::Get()->GetCryptohomeClient(), | 338 chromeos::DBusThreadManager::Get()->GetCryptohomeClient(), |
336 base::MakeUnique<chromeos::attestation::AttestationCAClient>()); | 339 base::MakeUnique<chromeos::attestation::AttestationCAClient>()); |
337 } | 340 } |
338 | 341 |
339 chromeos::AffiliationIDSet | 342 chromeos::AffiliationIDSet |
340 BrowserPolicyConnectorChromeOS::GetDeviceAffiliationIDs() const { | 343 BrowserPolicyConnectorChromeOS::GetDeviceAffiliationIDs() const { |
341 chromeos::AffiliationIDSet affiliation_ids; | 344 chromeos::AffiliationIDSet affiliation_ids; |
342 if (device_cloud_policy_manager_) { | 345 if (device_cloud_policy_manager_) { |
343 const enterprise_management::PolicyData* const policy_data = | 346 const enterprise_management::PolicyData* const policy_data = |
344 device_cloud_policy_manager_->device_store()->policy(); | 347 device_cloud_policy_manager_->device_store()->policy(); |
345 if (policy_data) { | 348 if (policy_data) { |
346 affiliation_ids.insert(policy_data->device_affiliation_ids().begin(), | 349 affiliation_ids.insert(policy_data->device_affiliation_ids().begin(), |
347 policy_data->device_affiliation_ids().end()); | 350 policy_data->device_affiliation_ids().end()); |
348 } | 351 } |
349 } | 352 } |
350 return affiliation_ids; | 353 return affiliation_ids; |
351 } | 354 } |
352 | 355 |
353 } // namespace policy | 356 } // namespace policy |
OLD | NEW |