| 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/client_cert_resolver.h" | 5 #include "chromeos/network/client_cert_resolver.h" |
| 6 | 6 |
| 7 #include <cert.h> | 7 #include <cert.h> |
| 8 #include <certt.h> // for (SECCertUsageEnum) certUsageAnyCA | 8 #include <certt.h> // for (SECCertUsageEnum) certUsageAnyCA |
| 9 #include <pk11pub.h> | 9 #include <pk11pub.h> |
| 10 | 10 |
| 11 #include <algorithm> | 11 #include <algorithm> |
| 12 | 12 |
| 13 #include "base/bind.h" | 13 #include "base/bind.h" |
| 14 #include "base/location.h" | 14 #include "base/location.h" |
| 15 #include "base/logging.h" | 15 #include "base/logging.h" |
| 16 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
| 17 #include "base/strings/string_util.h" | 17 #include "base/strings/string_util.h" |
| 18 #include "base/task_runner.h" | 18 #include "base/task_scheduler/post_task.h" |
| 19 #include "base/threading/worker_pool.h" | |
| 20 #include "base/time/clock.h" | 19 #include "base/time/clock.h" |
| 21 #include "chromeos/dbus/dbus_thread_manager.h" | 20 #include "chromeos/dbus/dbus_thread_manager.h" |
| 22 #include "chromeos/dbus/shill_service_client.h" | 21 #include "chromeos/dbus/shill_service_client.h" |
| 23 #include "chromeos/network/managed_network_configuration_handler.h" | 22 #include "chromeos/network/managed_network_configuration_handler.h" |
| 24 #include "chromeos/network/network_state.h" | 23 #include "chromeos/network/network_state.h" |
| 25 #include "components/onc/onc_constants.h" | 24 #include "components/onc/onc_constants.h" |
| 26 #include "dbus/object_path.h" | 25 #include "dbus/object_path.h" |
| 27 #include "net/cert/scoped_nss_types.h" | 26 #include "net/cert/scoped_nss_types.h" |
| 28 #include "net/cert/x509_certificate.h" | 27 #include "net/cert/x509_certificate.h" |
| 29 #include "net/cert/x509_util_nss.h" | 28 #include "net/cert/x509_util_nss.h" |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 network_state_handler_ = network_state_handler; | 303 network_state_handler_ = network_state_handler; |
| 305 network_state_handler_->AddObserver(this, FROM_HERE); | 304 network_state_handler_->AddObserver(this, FROM_HERE); |
| 306 | 305 |
| 307 DCHECK(managed_network_config_handler); | 306 DCHECK(managed_network_config_handler); |
| 308 managed_network_config_handler_ = managed_network_config_handler; | 307 managed_network_config_handler_ = managed_network_config_handler; |
| 309 managed_network_config_handler_->AddObserver(this); | 308 managed_network_config_handler_->AddObserver(this); |
| 310 | 309 |
| 311 CertLoader::Get()->AddObserver(this); | 310 CertLoader::Get()->AddObserver(this); |
| 312 } | 311 } |
| 313 | 312 |
| 314 void ClientCertResolver::SetSlowTaskRunnerForTest( | |
| 315 const scoped_refptr<base::TaskRunner>& task_runner) { | |
| 316 slow_task_runner_for_test_ = task_runner; | |
| 317 } | |
| 318 | |
| 319 void ClientCertResolver::AddObserver(Observer* observer) { | 313 void ClientCertResolver::AddObserver(Observer* observer) { |
| 320 observers_.AddObserver(observer); | 314 observers_.AddObserver(observer); |
| 321 } | 315 } |
| 322 | 316 |
| 323 void ClientCertResolver::RemoveObserver(Observer* observer) { | 317 void ClientCertResolver::RemoveObserver(Observer* observer) { |
| 324 observers_.RemoveObserver(observer); | 318 observers_.RemoveObserver(observer); |
| 325 } | 319 } |
| 326 | 320 |
| 327 bool ClientCertResolver::IsAnyResolveTaskRunning() const { | 321 bool ClientCertResolver::IsAnyResolveTaskRunning() const { |
| 328 return resolve_task_running_; | 322 return resolve_task_running_; |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 if (resolve_task_running_) { | 485 if (resolve_task_running_) { |
| 492 VLOG(1) << "A resolve task is already running. Queue this request."; | 486 VLOG(1) << "A resolve task is already running. Queue this request."; |
| 493 for (const NetworkAndCertPattern& network_and_pattern : | 487 for (const NetworkAndCertPattern& network_and_pattern : |
| 494 *networks_to_resolve) { | 488 *networks_to_resolve) { |
| 495 queued_networks_to_resolve_.insert(network_and_pattern.service_path); | 489 queued_networks_to_resolve_.insert(network_and_pattern.service_path); |
| 496 } | 490 } |
| 497 return; | 491 return; |
| 498 } | 492 } |
| 499 | 493 |
| 500 VLOG(2) << "Start task for resolving client cert patterns."; | 494 VLOG(2) << "Start task for resolving client cert patterns."; |
| 501 base::TaskRunner* task_runner = slow_task_runner_for_test_.get(); | |
| 502 if (!task_runner) | |
| 503 task_runner = | |
| 504 base::WorkerPool::GetTaskRunner(true /* task is slow */).get(); | |
| 505 | |
| 506 resolve_task_running_ = true; | 495 resolve_task_running_ = true; |
| 507 NetworkCertMatches* matches = new NetworkCertMatches; | 496 NetworkCertMatches* matches = new NetworkCertMatches; |
| 508 task_runner->PostTaskAndReply( | 497 base::PostTaskWithTraitsAndReply( |
| 509 FROM_HERE, | 498 FROM_HERE, base::TaskTraits() |
| 499 .WithShutdownBehavior( |
| 500 base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN) |
| 501 .MayBlock(), |
| 510 base::Bind(&FindCertificateMatches, CertLoader::Get()->cert_list(), | 502 base::Bind(&FindCertificateMatches, CertLoader::Get()->cert_list(), |
| 511 base::Owned(networks_to_resolve.release()), Now(), matches), | 503 base::Owned(networks_to_resolve.release()), Now(), matches), |
| 512 base::Bind(&ClientCertResolver::ConfigureCertificates, | 504 base::Bind(&ClientCertResolver::ConfigureCertificates, |
| 513 weak_ptr_factory_.GetWeakPtr(), base::Owned(matches))); | 505 weak_ptr_factory_.GetWeakPtr(), base::Owned(matches))); |
| 514 } | 506 } |
| 515 | 507 |
| 516 void ClientCertResolver::ResolvePendingNetworks() { | 508 void ClientCertResolver::ResolvePendingNetworks() { |
| 517 NetworkStateHandler::NetworkStateList networks; | 509 NetworkStateHandler::NetworkStateList networks; |
| 518 network_state_handler_->GetNetworkListByType(NetworkTypePattern::Default(), | 510 network_state_handler_->GetNetworkListByType(NetworkTypePattern::Default(), |
| 519 true /* configured_only */, | 511 true /* configured_only */, |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 observer.ResolveRequestCompleted(changed); | 565 observer.ResolveRequestCompleted(changed); |
| 574 } | 566 } |
| 575 | 567 |
| 576 base::Time ClientCertResolver::Now() const { | 568 base::Time ClientCertResolver::Now() const { |
| 577 if (testing_clock_) | 569 if (testing_clock_) |
| 578 return testing_clock_->Now(); | 570 return testing_clock_->Now(); |
| 579 return base::Time::Now(); | 571 return base::Time::Now(); |
| 580 } | 572 } |
| 581 | 573 |
| 582 } // namespace chromeos | 574 } // namespace chromeos |
| OLD | NEW |