Chromium Code Reviews| Index: net/base/origin_bound_cert_service.cc |
| diff --git a/net/base/origin_bound_cert_service.cc b/net/base/origin_bound_cert_service.cc |
| index 8901e26b9c2a031a83fdb283eb4e862b016527c9..1177c396bbe7c0dbc80afb67006d071dd8cf2e6f 100644 |
| --- a/net/base/origin_bound_cert_service.cc |
| +++ b/net/base/origin_bound_cert_service.cc |
| @@ -19,6 +19,7 @@ |
| #include "base/stl_util.h" |
| #include "base/threading/worker_pool.h" |
| #include "crypto/ec_private_key.h" |
| +#include "googleurl/src/gurl.h" |
| #include "net/base/net_errors.h" |
| #include "net/base/origin_bound_cert_store.h" |
| #include "net/base/registry_controlled_domain.h" |
| @@ -98,10 +99,10 @@ class OriginBoundCertServiceRequest { |
| class OriginBoundCertServiceWorker { |
| public: |
| OriginBoundCertServiceWorker( |
| - const std::string& origin, |
| + const std::string& domain, |
| SSLClientCertType type, |
| OriginBoundCertService* origin_bound_cert_service) |
| - : origin_(origin), |
| + : domain_(domain), |
| type_(type), |
| serial_number_(base::RandInt(0, std::numeric_limits<int>::max())), |
| origin_loop_(MessageLoop::current()), |
| @@ -130,7 +131,7 @@ class OriginBoundCertServiceWorker { |
| private: |
| void Run() { |
| // Runs on a worker thread. |
| - error_ = OriginBoundCertService::GenerateCert(origin_, |
| + error_ = OriginBoundCertService::GenerateCert(domain_, |
| type_, |
| serial_number_, |
| &creation_time_, |
| @@ -161,7 +162,7 @@ class OriginBoundCertServiceWorker { |
| base::AutoLock locked(lock_); |
| if (!canceled_) { |
| origin_bound_cert_service_->HandleResult( |
| - origin_, error_, type_, creation_time_, expiration_time_, |
| + domain_, error_, type_, creation_time_, expiration_time_, |
| private_key_, cert_); |
| } |
| } |
| @@ -193,7 +194,7 @@ class OriginBoundCertServiceWorker { |
| delete this; |
| } |
| - const std::string origin_; |
| + const std::string domain_; |
| const SSLClientCertType type_; |
| // Note that serial_number_ must be initialized on a non-worker thread |
| // (see documentation for OriginBoundCertService::GenerateCert). |
| @@ -320,6 +321,8 @@ int OriginBoundCertService::GetOriginBoundCert( |
| return ERR_INVALID_ARGUMENT; |
| } |
| + std::string domain = GetDomainForHost(GURL(origin).host()); |
|
wtc
2012/03/08 02:13:45
Should we also check domain.empty()? See the orig
mattm
2012/03/15 01:48:44
Done.
|
| + |
| SSLClientCertType preferred_type = CLIENT_CERT_INVALID_TYPE; |
| for (size_t i = 0; i < requested_types.size(); ++i) { |
| if (IsSupportedCertType(requested_types[i])) { |
| @@ -334,35 +337,35 @@ int OriginBoundCertService::GetOriginBoundCert( |
| requests_++; |
| - // Check if an origin bound cert of an acceptable type already exists for this |
| - // origin, and that it has not expired. |
| + // Check if a domain bound cert of an acceptable type already exists for this |
| + // domain, and that it has not expired. |
| base::Time now = base::Time::Now(); |
| base::Time creation_time; |
| base::Time expiration_time; |
| - if (origin_bound_cert_store_->GetOriginBoundCert(origin, |
| + if (origin_bound_cert_store_->GetOriginBoundCert(domain, |
| type, |
| &creation_time, |
| &expiration_time, |
| private_key, |
| cert)) { |
| if (expiration_time < now) { |
| - DVLOG(1) << "Cert store had expired cert for " << origin; |
| + DVLOG(1) << "Cert store had expired cert for " << domain; |
| } else if (!IsSupportedCertType(*type) || |
| std::find(requested_types.begin(), requested_types.end(), |
| *type) == requested_types.end()) { |
| DVLOG(1) << "Cert store had cert of wrong type " << *type << " for " |
| - << origin; |
| + << domain; |
| } else { |
| cert_store_hits_++; |
| return OK; |
| } |
| } |
| - // |origin_bound_cert_store_| has no cert for this origin. See if an |
| + // |origin_bound_cert_store_| has no cert for this domain. See if an |
| // identical request is currently in flight. |
| OriginBoundCertServiceJob* job = NULL; |
| std::map<std::string, OriginBoundCertServiceJob*>::const_iterator j; |
| - j = inflight_.find(origin); |
| + j = inflight_.find(domain); |
| if (j != inflight_.end()) { |
| // An identical request is in flight already. We'll just attach our |
| // callback. |
| @@ -371,10 +374,10 @@ int OriginBoundCertService::GetOriginBoundCert( |
| if (std::find(requested_types.begin(), requested_types.end(), job->type()) |
| == requested_types.end()) { |
| DVLOG(1) << "Found inflight job of wrong type " << job->type() |
| - << " for " << origin; |
| + << " for " << domain; |
| // If we get here, the server is asking for different types of certs in |
| // short succession. This probably means the server is broken or |
| - // misconfigured. Since we only store one type of cert per origin, we |
| + // misconfigured. Since we only store one type of cert per domain, we |
| // are unable to handle this well. Just return an error and let the first |
| // job finish. |
| return ERR_ORIGIN_BOUND_CERT_GENERATION_TYPE_MISMATCH; |
| @@ -383,7 +386,7 @@ int OriginBoundCertService::GetOriginBoundCert( |
| } else { |
| // Need to make a new request. |
| OriginBoundCertServiceWorker* worker = new OriginBoundCertServiceWorker( |
| - origin, |
| + domain, |
| preferred_type, |
| this); |
| job = new OriginBoundCertServiceJob(worker, preferred_type); |
| @@ -394,7 +397,7 @@ int OriginBoundCertService::GetOriginBoundCert( |
| LOG(ERROR) << "OriginBoundCertServiceWorker couldn't be started."; |
| return ERR_INSUFFICIENT_RESOURCES; // Just a guess. |
| } |
| - inflight_[origin] = job; |
| + inflight_[domain] = job; |
| } |
| OriginBoundCertServiceRequest* request = |
| @@ -409,7 +412,7 @@ OriginBoundCertStore* OriginBoundCertService::GetCertStore() { |
| } |
| // static |
| -int OriginBoundCertService::GenerateCert(const std::string& origin, |
| +int OriginBoundCertService::GenerateCert(const std::string& domain, |
| SSLClientCertType type, |
| uint32 serial_number, |
| base::Time* creation_time, |
| @@ -430,7 +433,7 @@ int OriginBoundCertService::GenerateCert(const std::string& origin, |
| } |
| if (!x509_util::CreateOriginBoundCertEC( |
| key.get(), |
| - origin, |
| + domain, |
| serial_number, |
| now, |
| not_valid_after, |
| @@ -471,7 +474,7 @@ void OriginBoundCertService::CancelRequest(RequestHandle req) { |
| // HandleResult is called by OriginBoundCertServiceWorker on the origin message |
| // loop. It deletes OriginBoundCertServiceJob. |
| -void OriginBoundCertService::HandleResult(const std::string& origin, |
| +void OriginBoundCertService::HandleResult(const std::string& domain, |
| int error, |
| SSLClientCertType type, |
| base::Time creation_time, |
| @@ -481,10 +484,10 @@ void OriginBoundCertService::HandleResult(const std::string& origin, |
| DCHECK(CalledOnValidThread()); |
| origin_bound_cert_store_->SetOriginBoundCert( |
| - origin, type, creation_time, expiration_time, private_key, cert); |
| + domain, type, creation_time, expiration_time, private_key, cert); |
| std::map<std::string, OriginBoundCertServiceJob*>::iterator j; |
| - j = inflight_.find(origin); |
| + j = inflight_.find(domain); |
| if (j == inflight_.end()) { |
| NOTREACHED(); |
| return; |