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/policy/network_configuration_updater_impl_cros
.h" | 5 #include "chrome/browser/chromeos/policy/network_configuration_updater_impl_cros
.h" |
6 | 6 |
7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 ASSERT_TRUE(network_configs_repaired); | 165 ASSERT_TRUE(network_configs_repaired); |
166 | 166 |
167 PolicyMap policy; | 167 PolicyMap policy; |
168 policy.Set(key::kOpenNetworkConfiguration, POLICY_LEVEL_MANDATORY, | 168 policy.Set(key::kOpenNetworkConfiguration, POLICY_LEVEL_MANDATORY, |
169 POLICY_SCOPE_USER, Value::CreateStringValue(onc_policy)); | 169 POLICY_SCOPE_USER, Value::CreateStringValue(onc_policy)); |
170 UpdateProviderPolicy(policy); | 170 UpdateProviderPolicy(policy); |
171 | 171 |
172 EXPECT_CALL(network_library_, AddNetworkProfileObserver(_)); | 172 EXPECT_CALL(network_library_, AddNetworkProfileObserver(_)); |
173 | 173 |
174 // Ignore the device policy update. | 174 // Ignore the device policy update. |
175 EXPECT_CALL(network_library_, LoadOncNetworks(_, _)); | 175 EXPECT_CALL(network_library_, LoadOncNetworks(_, _, _)); |
176 StrictMock<chromeos::MockCertificateHandler>* certificate_handler = | 176 StrictMock<chromeos::MockCertificateHandler>* certificate_handler = |
177 new StrictMock<chromeos::MockCertificateHandler>(); | 177 new StrictMock<chromeos::MockCertificateHandler>(); |
178 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _)); | 178 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _, _)); |
179 | 179 |
180 NetworkConfigurationUpdaterImplCros updater( | 180 NetworkConfigurationUpdaterImplCros updater( |
181 policy_service_.get(), | 181 policy_service_.get(), |
182 &network_library_, | 182 &network_library_, |
183 make_scoped_ptr<chromeos::CertificateHandler>(certificate_handler)); | 183 make_scoped_ptr<chromeos::CertificateHandler>(certificate_handler)); |
184 Mock::VerifyAndClearExpectations(&network_library_); | 184 Mock::VerifyAndClearExpectations(&network_library_); |
185 Mock::VerifyAndClearExpectations(&certificate_handler); | 185 Mock::VerifyAndClearExpectations(&certificate_handler); |
186 | 186 |
187 // After the user policy is initialized, we always push both policies to the | 187 // After the user policy is initialized, we always push both policies to the |
188 // NetworkLibrary. Ignore the device policy. | 188 // NetworkLibrary. Ignore the device policy. |
189 EXPECT_CALL(network_library_, LoadOncNetworks( | 189 EXPECT_CALL(network_library_, LoadOncNetworks( |
190 _, onc::ONC_SOURCE_DEVICE_POLICY)); | 190 _, onc::ONC_SOURCE_DEVICE_POLICY, _)); |
191 EXPECT_CALL(network_library_, LoadOncNetworks( | 191 EXPECT_CALL(network_library_, LoadOncNetworks( |
192 IsEqualTo(network_configs_repaired), | 192 IsEqualTo(network_configs_repaired), |
193 onc::ONC_SOURCE_USER_POLICY)); | 193 onc::ONC_SOURCE_USER_POLICY, |
194 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _)).Times(2); | 194 _)); |
| 195 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _, _)).Times(2); |
195 | 196 |
196 EXPECT_CALL(network_library_, RemoveNetworkProfileObserver(_)); | 197 EXPECT_CALL(network_library_, RemoveNetworkProfileObserver(_)); |
197 | 198 |
198 updater.SetUserPolicyService(false, "hash", policy_service_.get()); | 199 updater.SetUserPolicyService(false, "hash", policy_service_.get()); |
199 updater.UnsetUserPolicyService(); | 200 updater.UnsetUserPolicyService(); |
200 } | 201 } |
201 | 202 |
202 class NetworkConfigurationUpdaterTestWithParam | 203 class NetworkConfigurationUpdaterTestWithParam |
203 : public NetworkConfigurationUpdaterTest, | 204 : public NetworkConfigurationUpdaterTest, |
204 public testing::WithParamInterface<const char*> { | 205 public testing::WithParamInterface<const char*> { |
(...skipping 19 matching lines...) Expand all Loading... |
224 user_networks = empty_network_configs_.get(); | 225 user_networks = empty_network_configs_.get(); |
225 user_certs = empty_certificates_.get(); | 226 user_certs = empty_certificates_.get(); |
226 } else { | 227 } else { |
227 device_networks = empty_network_configs_.get(); | 228 device_networks = empty_network_configs_.get(); |
228 device_certs = empty_certificates_.get(); | 229 device_certs = empty_certificates_.get(); |
229 user_networks = fake_network_configs_.get(); | 230 user_networks = fake_network_configs_.get(); |
230 user_certs = fake_certificates_.get(); | 231 user_certs = fake_certificates_.get(); |
231 } | 232 } |
232 | 233 |
233 EXPECT_CALL(network_library_, LoadOncNetworks( | 234 EXPECT_CALL(network_library_, LoadOncNetworks( |
234 IsEqualTo(device_networks), onc::ONC_SOURCE_DEVICE_POLICY)); | 235 IsEqualTo(device_networks), onc::ONC_SOURCE_DEVICE_POLICY, _)); |
235 StrictMock<chromeos::MockCertificateHandler>* certificate_handler = | 236 StrictMock<chromeos::MockCertificateHandler>* certificate_handler = |
236 new StrictMock<chromeos::MockCertificateHandler>(); | 237 new StrictMock<chromeos::MockCertificateHandler>(); |
237 EXPECT_CALL(*certificate_handler, ImportCertificates( | 238 EXPECT_CALL(*certificate_handler, ImportCertificates( |
238 IsEqualTo(device_certs), onc::ONC_SOURCE_DEVICE_POLICY, _)); | 239 IsEqualTo(device_certs), onc::ONC_SOURCE_DEVICE_POLICY, _, _)); |
239 | 240 |
240 NetworkConfigurationUpdaterImplCros updater( | 241 NetworkConfigurationUpdaterImplCros updater( |
241 policy_service_.get(), | 242 policy_service_.get(), |
242 &network_library_, | 243 &network_library_, |
243 make_scoped_ptr<chromeos::CertificateHandler>(certificate_handler)); | 244 make_scoped_ptr<chromeos::CertificateHandler>(certificate_handler)); |
244 Mock::VerifyAndClearExpectations(&network_library_); | 245 Mock::VerifyAndClearExpectations(&network_library_); |
245 Mock::VerifyAndClearExpectations(&certificate_handler); | 246 Mock::VerifyAndClearExpectations(&certificate_handler); |
246 | 247 |
247 // After the user policy is initialized, we always push both policies to the | 248 // After the user policy is initialized, we always push both policies to the |
248 // NetworkLibrary. | 249 // NetworkLibrary. |
249 EXPECT_CALL(network_library_, LoadOncNetworks( | 250 EXPECT_CALL(network_library_, LoadOncNetworks( |
250 IsEqualTo(device_networks), onc::ONC_SOURCE_DEVICE_POLICY)); | 251 IsEqualTo(device_networks), onc::ONC_SOURCE_DEVICE_POLICY, _)); |
251 EXPECT_CALL(*certificate_handler, ImportCertificates( | 252 EXPECT_CALL(*certificate_handler, ImportCertificates( |
252 IsEqualTo(device_certs), onc::ONC_SOURCE_DEVICE_POLICY, _)); | 253 IsEqualTo(device_certs), onc::ONC_SOURCE_DEVICE_POLICY, _, _)); |
253 | 254 |
254 EXPECT_CALL(network_library_, LoadOncNetworks( | 255 EXPECT_CALL(network_library_, LoadOncNetworks( |
255 IsEqualTo(user_networks), onc::ONC_SOURCE_USER_POLICY)); | 256 IsEqualTo(user_networks), onc::ONC_SOURCE_USER_POLICY, _)); |
256 EXPECT_CALL(*certificate_handler, ImportCertificates( | 257 EXPECT_CALL(*certificate_handler, ImportCertificates( |
257 IsEqualTo(user_certs), onc::ONC_SOURCE_USER_POLICY, _)); | 258 IsEqualTo(user_certs), onc::ONC_SOURCE_USER_POLICY, _, _)); |
258 | 259 |
259 EXPECT_CALL(network_library_, RemoveNetworkProfileObserver(_)); | 260 EXPECT_CALL(network_library_, RemoveNetworkProfileObserver(_)); |
260 | 261 |
261 // We just need an initialized PolicyService, so we can reuse | 262 // We just need an initialized PolicyService, so we can reuse |
262 // |policy_service_|. | 263 // |policy_service_|. |
263 updater.SetUserPolicyService(false, "hash", policy_service_.get()); | 264 updater.SetUserPolicyService(false, "hash", policy_service_.get()); |
264 updater.UnsetUserPolicyService(); | 265 updater.UnsetUserPolicyService(); |
265 } | 266 } |
266 | 267 |
267 TEST_P(NetworkConfigurationUpdaterTestWithParam, | 268 TEST_P(NetworkConfigurationUpdaterTestWithParam, |
268 AllowTrustedCertificatesFromPolicy) { | 269 AllowTrustedCertificatesFromPolicy) { |
269 EXPECT_CALL(network_library_, AddNetworkProfileObserver(_)); | 270 EXPECT_CALL(network_library_, AddNetworkProfileObserver(_)); |
270 | 271 |
271 const net::CertificateList empty_cert_list; | 272 const net::CertificateList empty_cert_list; |
272 | 273 |
273 const net::CertificateList cert_list = | 274 const net::CertificateList cert_list = |
274 net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), | 275 net::CreateCertificateListFromFile(net::GetTestCertsDirectory(), |
275 "ok_cert.pem", | 276 "ok_cert.pem", |
276 net::X509Certificate::FORMAT_AUTO); | 277 net::X509Certificate::FORMAT_AUTO); |
277 ASSERT_EQ(1u, cert_list.size()); | 278 ASSERT_EQ(1u, cert_list.size()); |
278 | 279 |
279 EXPECT_CALL(network_library_, LoadOncNetworks(_, _)).Times(AnyNumber()); | 280 EXPECT_CALL(network_library_, LoadOncNetworks(_, _, _)).Times(AnyNumber()); |
280 StrictMock<chromeos::MockCertificateHandler>* certificate_handler = | 281 StrictMock<chromeos::MockCertificateHandler>* certificate_handler = |
281 new StrictMock<chromeos::MockCertificateHandler>(); | 282 new StrictMock<chromeos::MockCertificateHandler>(); |
282 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _)) | 283 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _, _)) |
283 .WillRepeatedly(SetCertificateList(empty_cert_list)); | 284 .WillRepeatedly(SetCertificateList(empty_cert_list)); |
284 NetworkConfigurationUpdaterImplCros updater( | 285 NetworkConfigurationUpdaterImplCros updater( |
285 policy_service_.get(), | 286 policy_service_.get(), |
286 &network_library_, | 287 &network_library_, |
287 make_scoped_ptr<chromeos::CertificateHandler>(certificate_handler)); | 288 make_scoped_ptr<chromeos::CertificateHandler>(certificate_handler)); |
288 net::CertTrustAnchorProvider* trust_provider = | 289 net::CertTrustAnchorProvider* trust_provider = |
289 updater.GetCertTrustAnchorProvider(); | 290 updater.GetCertTrustAnchorProvider(); |
290 ASSERT_TRUE(trust_provider); | 291 ASSERT_TRUE(trust_provider); |
291 // The initial list of trust anchors is empty. | 292 // The initial list of trust anchors is empty. |
292 content::RunAllPendingInMessageLoop(content::BrowserThread::IO); | 293 content::RunAllPendingInMessageLoop(content::BrowserThread::IO); |
293 EXPECT_TRUE(trust_provider->GetAdditionalTrustAnchors().empty()); | 294 EXPECT_TRUE(trust_provider->GetAdditionalTrustAnchors().empty()); |
294 | 295 |
295 // Initially, certificates imported from policy don't have trust flags. | 296 // Initially, certificates imported from policy don't have trust flags. |
296 updater.SetUserPolicyService(false, "hash", policy_service_.get()); | 297 updater.SetUserPolicyService(false, "hash", policy_service_.get()); |
297 content::RunAllPendingInMessageLoop(content::BrowserThread::IO); | 298 content::RunAllPendingInMessageLoop(content::BrowserThread::IO); |
298 Mock::VerifyAndClearExpectations(&network_library_); | 299 Mock::VerifyAndClearExpectations(&network_library_); |
299 Mock::VerifyAndClearExpectations(&certificate_handler); | 300 Mock::VerifyAndClearExpectations(&certificate_handler); |
300 EXPECT_TRUE(trust_provider->GetAdditionalTrustAnchors().empty()); | 301 EXPECT_TRUE(trust_provider->GetAdditionalTrustAnchors().empty()); |
301 | 302 |
302 // Certificates with the "Web" trust flag set should be forwarded to the | 303 // Certificates with the "Web" trust flag set should be forwarded to the |
303 // trust provider. | 304 // trust provider. |
304 EXPECT_CALL(network_library_, LoadOncNetworks(_, _)); | 305 EXPECT_CALL(network_library_, LoadOncNetworks(_, _, _)); |
305 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _)) | 306 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _, _)) |
306 .WillRepeatedly(SetCertificateList(empty_cert_list)); | 307 .WillRepeatedly(SetCertificateList(empty_cert_list)); |
307 onc::ONCSource current_source = NameToONCSource(GetParam()); | 308 onc::ONCSource current_source = NameToONCSource(GetParam()); |
308 EXPECT_CALL(network_library_, LoadOncNetworks(_, current_source)); | 309 EXPECT_CALL(network_library_, LoadOncNetworks(_, current_source, _)); |
309 EXPECT_CALL(*certificate_handler, ImportCertificates(_, current_source, _)) | 310 EXPECT_CALL(*certificate_handler, ImportCertificates(_, current_source, _, _)) |
310 .WillRepeatedly(SetCertificateList(cert_list)); | 311 .WillRepeatedly(SetCertificateList(cert_list)); |
311 // Trigger a new policy load, and spin the IO message loop to pass the | 312 // Trigger a new policy load, and spin the IO message loop to pass the |
312 // certificates to the |trust_provider| on the IO thread. | 313 // certificates to the |trust_provider| on the IO thread. |
313 updater.SetUserPolicyService(true, "hash", policy_service_.get()); | 314 updater.SetUserPolicyService(true, "hash", policy_service_.get()); |
314 base::RunLoop loop; | 315 base::RunLoop loop; |
315 loop.RunUntilIdle(); | 316 loop.RunUntilIdle(); |
316 Mock::VerifyAndClearExpectations(&network_library_); | 317 Mock::VerifyAndClearExpectations(&network_library_); |
317 Mock::VerifyAndClearExpectations(&certificate_handler); | 318 Mock::VerifyAndClearExpectations(&certificate_handler); |
318 | 319 |
319 // Certificates are only provided as trust anchors if they come from user | 320 // Certificates are only provided as trust anchors if they come from user |
320 // policy. | 321 // policy. |
321 size_t expected_certs = 0u; | 322 size_t expected_certs = 0u; |
322 if (GetParam() == key::kOpenNetworkConfiguration) | 323 if (GetParam() == key::kOpenNetworkConfiguration) |
323 expected_certs = 1u; | 324 expected_certs = 1u; |
324 EXPECT_EQ(expected_certs, | 325 EXPECT_EQ(expected_certs, |
325 trust_provider->GetAdditionalTrustAnchors().size()); | 326 trust_provider->GetAdditionalTrustAnchors().size()); |
326 | 327 |
327 EXPECT_CALL(network_library_, RemoveNetworkProfileObserver(_)); | 328 EXPECT_CALL(network_library_, RemoveNetworkProfileObserver(_)); |
328 updater.UnsetUserPolicyService(); | 329 updater.UnsetUserPolicyService(); |
329 } | 330 } |
330 | 331 |
331 TEST_P(NetworkConfigurationUpdaterTestWithParam, PolicyChange) { | 332 TEST_P(NetworkConfigurationUpdaterTestWithParam, PolicyChange) { |
332 EXPECT_CALL(network_library_, AddNetworkProfileObserver(_)); | 333 EXPECT_CALL(network_library_, AddNetworkProfileObserver(_)); |
333 | 334 |
334 // Ignore the initial updates. | 335 // Ignore the initial updates. |
335 EXPECT_CALL(network_library_, LoadOncNetworks(_, _)) | 336 EXPECT_CALL(network_library_, LoadOncNetworks(_, _, _)) |
336 .Times(AnyNumber()); | 337 .Times(AnyNumber()); |
337 StrictMock<chromeos::MockCertificateHandler>* certificate_handler = | 338 StrictMock<chromeos::MockCertificateHandler>* certificate_handler = |
338 new StrictMock<chromeos::MockCertificateHandler>(); | 339 new StrictMock<chromeos::MockCertificateHandler>(); |
339 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _)) | 340 EXPECT_CALL(*certificate_handler, ImportCertificates(_, _, _, _)) |
340 .Times(AnyNumber()); | 341 .Times(AnyNumber()); |
341 NetworkConfigurationUpdaterImplCros updater( | 342 NetworkConfigurationUpdaterImplCros updater( |
342 policy_service_.get(), | 343 policy_service_.get(), |
343 &network_library_, | 344 &network_library_, |
344 make_scoped_ptr<chromeos::CertificateHandler>(certificate_handler)); | 345 make_scoped_ptr<chromeos::CertificateHandler>(certificate_handler)); |
345 updater.SetUserPolicyService(false, "hash", policy_service_.get()); | 346 updater.SetUserPolicyService(false, "hash", policy_service_.get()); |
346 Mock::VerifyAndClearExpectations(&network_library_); | 347 Mock::VerifyAndClearExpectations(&network_library_); |
347 Mock::VerifyAndClearExpectations(&certificate_handler); | 348 Mock::VerifyAndClearExpectations(&certificate_handler); |
348 | 349 |
349 // We should update if policy changes. | 350 // We should update if policy changes. |
350 EXPECT_CALL(network_library_, LoadOncNetworks( | 351 EXPECT_CALL(network_library_, LoadOncNetworks( |
351 IsEqualTo(fake_network_configs_.get()), NameToONCSource(GetParam()))); | 352 IsEqualTo(fake_network_configs_.get()), NameToONCSource(GetParam()), _)); |
352 EXPECT_CALL(*certificate_handler, ImportCertificates( | 353 EXPECT_CALL(*certificate_handler, ImportCertificates( |
353 IsEqualTo(fake_certificates_.get()), NameToONCSource(GetParam()), _)); | 354 IsEqualTo(fake_certificates_.get()), NameToONCSource(GetParam()), _, _)); |
354 | 355 |
355 // In the current implementation, we always apply both policies. | 356 // In the current implementation, we always apply both policies. |
356 EXPECT_CALL(network_library_, LoadOncNetworks( | 357 EXPECT_CALL(network_library_, LoadOncNetworks( |
357 IsEqualTo(empty_network_configs_.get()), | 358 IsEqualTo(empty_network_configs_.get()), |
358 Ne(NameToONCSource(GetParam())))); | 359 Ne(NameToONCSource(GetParam())), |
| 360 _)); |
359 EXPECT_CALL(*certificate_handler, ImportCertificates( | 361 EXPECT_CALL(*certificate_handler, ImportCertificates( |
360 IsEqualTo(empty_certificates_.get()), | 362 IsEqualTo(empty_certificates_.get()), |
361 Ne(NameToONCSource(GetParam())), | 363 Ne(NameToONCSource(GetParam())), |
362 _)); | 364 _, _)); |
363 | 365 |
364 PolicyMap policy; | 366 PolicyMap policy; |
365 policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 367 policy.Set(GetParam(), POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
366 Value::CreateStringValue(kFakeONC)); | 368 Value::CreateStringValue(kFakeONC)); |
367 UpdateProviderPolicy(policy); | 369 UpdateProviderPolicy(policy); |
368 Mock::VerifyAndClearExpectations(&network_library_); | 370 Mock::VerifyAndClearExpectations(&network_library_); |
369 Mock::VerifyAndClearExpectations(&certificate_handler); | 371 Mock::VerifyAndClearExpectations(&certificate_handler); |
370 | 372 |
371 // Another update is expected if the policy goes away. In the current | 373 // Another update is expected if the policy goes away. In the current |
372 // implementation, we always apply both policies. | 374 // implementation, we always apply both policies. |
373 EXPECT_CALL(network_library_, LoadOncNetworks( | 375 EXPECT_CALL(network_library_, LoadOncNetworks( |
374 IsEqualTo(empty_network_configs_.get()), | 376 IsEqualTo(empty_network_configs_.get()), |
375 onc::ONC_SOURCE_DEVICE_POLICY)); | 377 onc::ONC_SOURCE_DEVICE_POLICY, |
| 378 _)); |
376 EXPECT_CALL(*certificate_handler, ImportCertificates( | 379 EXPECT_CALL(*certificate_handler, ImportCertificates( |
377 IsEqualTo(empty_certificates_.get()), | 380 IsEqualTo(empty_certificates_.get()), |
378 onc::ONC_SOURCE_DEVICE_POLICY, | 381 onc::ONC_SOURCE_DEVICE_POLICY, |
379 _)); | 382 _, _)); |
380 | 383 |
381 EXPECT_CALL(network_library_, LoadOncNetworks( | 384 EXPECT_CALL(network_library_, LoadOncNetworks( |
382 IsEqualTo(empty_network_configs_.get()), | 385 IsEqualTo(empty_network_configs_.get()), |
383 onc::ONC_SOURCE_USER_POLICY)); | 386 onc::ONC_SOURCE_USER_POLICY, |
| 387 _)); |
384 EXPECT_CALL(*certificate_handler, ImportCertificates( | 388 EXPECT_CALL(*certificate_handler, ImportCertificates( |
385 IsEqualTo(empty_certificates_.get()), | 389 IsEqualTo(empty_certificates_.get()), |
386 onc::ONC_SOURCE_USER_POLICY, | 390 onc::ONC_SOURCE_USER_POLICY, |
387 _)); | 391 _, _)); |
388 | 392 |
389 EXPECT_CALL(network_library_, RemoveNetworkProfileObserver(_)); | 393 EXPECT_CALL(network_library_, RemoveNetworkProfileObserver(_)); |
390 | 394 |
391 policy.Erase(GetParam()); | 395 policy.Erase(GetParam()); |
392 UpdateProviderPolicy(policy); | 396 UpdateProviderPolicy(policy); |
393 updater.UnsetUserPolicyService(); | 397 updater.UnsetUserPolicyService(); |
394 } | 398 } |
395 | 399 |
396 INSTANTIATE_TEST_CASE_P( | 400 INSTANTIATE_TEST_CASE_P( |
397 NetworkConfigurationUpdaterTestWithParamInstance, | 401 NetworkConfigurationUpdaterTestWithParamInstance, |
398 NetworkConfigurationUpdaterTestWithParam, | 402 NetworkConfigurationUpdaterTestWithParam, |
399 testing::Values(key::kDeviceOpenNetworkConfiguration, | 403 testing::Values(key::kDeviceOpenNetworkConfiguration, |
400 key::kOpenNetworkConfiguration)); | 404 key::kOpenNetworkConfiguration)); |
401 | 405 |
402 } // namespace policy | 406 } // namespace policy |
OLD | NEW |