Commit 2054aecd authored by Fabian Sommer's avatar Fabian Sommer Committed by Commit Bot

Extend observer of CertificateProviderService

The observer for CertificateProviderService now also observes when an
extension updates the certificates it provides.

Add equality comparator for CertificateInfo for testing purposes.

Bug: 1131450
Change-Id: I7efdb3f2b372e3aba279d52fda8e123050403af2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2481022Reviewed-by: default avatarMaksim Ivanov <emaxx@chromium.org>
Commit-Queue: Fabian Sommer <fabiansommer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#819288}
parent f7e31c9d
......@@ -4,6 +4,8 @@
#include "chrome/browser/chromeos/certificate_provider/certificate_info.h"
#include "net/cert/x509_certificate.h"
namespace chromeos {
namespace certificate_provider {
......@@ -13,5 +15,13 @@ CertificateInfo::CertificateInfo(const CertificateInfo& other) = default;
CertificateInfo::~CertificateInfo() {}
bool CertificateInfo::operator==(const CertificateInfo& other) const {
return net::X509Certificate::CalculateFingerprint256(
this->certificate->cert_buffer()) ==
net::X509Certificate::CalculateFingerprint256(
other.certificate->cert_buffer()) &&
this->supported_algorithms == other.supported_algorithms;
}
} // namespace certificate_provider
} // namespace chromeos
......@@ -23,6 +23,8 @@ struct CertificateInfo {
CertificateInfo(const CertificateInfo& other);
~CertificateInfo();
bool operator==(const CertificateInfo& other) const;
scoped_refptr<net::X509Certificate> certificate;
// Contains the list of supported signature algorithms, using TLS 1.3's
// SignatureScheme values. See net::SSLPrivateKey documentation for details.
......
......@@ -221,6 +221,8 @@ void CertificateProviderService::SetCertificatesProvidedByExtension(
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
certificate_map_.UpdateCertificatesForExtension(extension_id,
certificate_infos);
for (auto& observer : observers_)
observer.OnCertificatesUpdated(extension_id, certificate_infos);
}
bool CertificateProviderService::SetExtensionCertificateReplyReceived(
......
......@@ -99,6 +99,11 @@ class CertificateProviderService : public KeyedService {
class Observer : public base::CheckedObserver {
public:
// Called when an extension updates the certificates it provides.
virtual void OnCertificatesUpdated(
const std::string& extension_id,
const CertificateInfoList& certificate_infos) {}
// Called when a sign request gets successfully completed.
virtual void OnSignCompleted(
const scoped_refptr<net::X509Certificate>& certificate,
......
......@@ -138,6 +138,10 @@ class TestDelegate : public CertificateProviderService::Delegate {
class MockObserver : public CertificateProviderService::Observer {
public:
MOCK_METHOD2(
OnCertificatesUpdated,
void(const std::string& extension_id,
const certificate_provider::CertificateInfoList& certificate_infos));
MOCK_METHOD2(OnSignCompleted,
void(const scoped_refptr<net::X509Certificate>& certificate,
const std::string& extension_id));
......@@ -209,6 +213,7 @@ class CertificateProviderServiceTest : public testing::Test {
const certificate_provider::CertificateInfo& cert_info) {
certificate_provider::CertificateInfoList infos;
infos.push_back(cert_info);
EXPECT_CALL(observer_, OnCertificatesUpdated(extension_id, infos));
service_->SetCertificatesProvidedByExtension(extension_id, infos);
service_->SetExtensionCertificateReplyReceived(extension_id,
cert_request_id);
......@@ -316,6 +321,9 @@ TEST_F(CertificateProviderServiceTest, LookUpCertificate) {
test_delegate_->provider_extensions_.insert(kExtension2);
{
const int cert_request_id = RequestCertificatesFromExtensions(nullptr);
EXPECT_CALL(observer_,
OnCertificatesUpdated(
kExtension1, certificate_provider::CertificateInfoList()));
service_->SetCertificatesProvidedByExtension(
kExtension1, certificate_provider::CertificateInfoList());
service_->SetExtensionCertificateReplyReceived(kExtension1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment