Index: net/http/transport_security_state.h |
diff --git a/net/http/transport_security_state.h b/net/http/transport_security_state.h |
index f9e82c7553c137873cd5b5fb3df19b8fe554501b..6a4615ca88d0e413b78d8e5cb8632eb233aca462 100644 |
--- a/net/http/transport_security_state.h |
+++ b/net/http/transport_security_state.h |
@@ -50,6 +50,10 @@ class NET_EXPORT TransportSecurityState |
// A DomainState describes the transport security state (required upgrade |
// to HTTPS, and/or any public key pins). |
+ // |
+ // TODO(davidben): STSState and PKPState are queried and processed |
+ // independently (with the exception of ShouldSSLErrorsBeFatal triggering on |
+ // both and on-disk storage). DomainState should be split into the two. |
class NET_EXPORT DomainState { |
public: |
enum UpgradeMode { |
@@ -62,6 +66,9 @@ class NET_EXPORT TransportSecurityState |
~DomainState(); |
struct STSState { |
+ STSState(); |
+ ~STSState(); |
+ |
// The absolute time (UTC) when the |upgrade_mode| (and other state) was |
// observed. |
base::Time last_observed; |
@@ -74,6 +81,10 @@ class NET_EXPORT TransportSecurityState |
// Are subdomains subject to this policy state? |
bool include_subdomains; |
+ |
+ // The domain which matched during a search for this DomainState entry. |
+ // Updated by |GetDynamicDomainState| and |GetStaticDomainState|. |
+ std::string domain; |
}; |
struct PKPState { |
@@ -97,6 +108,10 @@ class NET_EXPORT TransportSecurityState |
// Are subdomains subject to this policy state? |
bool include_subdomains; |
+ |
+ // The domain which matched during a search for this DomainState entry. |
+ // Updated by |GetDynamicDomainState| and |GetStaticDomainState|. |
+ std::string domain; |
}; |
// Takes a set of SubjectPublicKeyInfo |hashes| and returns true if: |
@@ -133,12 +148,6 @@ class NET_EXPORT TransportSecurityState |
STSState sts; |
PKPState pkp; |
- |
- // The following members are not valid when stored in |enabled_hosts_|: |
- |
- // The domain which matched during a search for this DomainState entry. |
- // Updated by |GetDynamicDomainState| and |GetStaticDomainState|. |
- std::string domain; |
}; |
class NET_EXPORT Iterator { |
@@ -207,24 +216,21 @@ class NET_EXPORT TransportSecurityState |
bool DeleteDynamicDataForHost(const std::string& host); |
// Returns true and updates |*result| iff there is a static (built-in) |
- // DomainState for |host|. |
- // |
- // If |host| matches both an exact entry and is a subdomain of another entry, |
- // the exact match determines the return value. |
- // |
- // Note that this method is not const because it opportunistically removes |
- // entries that have expired. |
+ // DomainState for |host|. If multiple entries match |host|, the most specific |
+ // match determines the return value. |
bool GetStaticDomainState(const std::string& host, DomainState* result) const; |
- // Returns true and updates |*result| iff there is a dynamic DomainState |
- // (learned from HSTS or HPKP headers, or set by the user, or other means) for |
- // |host|. |
- // |
- // If |host| matches both an exact entry and is a subdomain of another entry, |
- // the exact match determines the return value. |
+ // Returns true and updates |*result| iff |host| has HSTS or HPKP state (or |
+ // both). The two are queried independently and combined into a single |
+ // DomainState. If multiple HSTS (respectively, HPKP) entries match |host|, |
+ // the most specific match determines the HSTS (respectively, HPKP) portion of |
+ // the return value. |
// |
// Note that this method is not const because it opportunistically removes |
// entries that have expired. |
+ // |
+ // TODO(davidben): STSState and PKPState should be queried independently at |
+ // the API level too. |
bool GetDynamicDomainState(const std::string& host, DomainState* result); |
// Processes an HSTS header value from the host, adding entries to |
@@ -239,13 +245,16 @@ class NET_EXPORT TransportSecurityState |
// Adds explicitly-specified data as if it was processed from an |
// HSTS header (used for net-internals and unit tests). |
- bool AddHSTS(const std::string& host, const base::Time& expiry, |
+ void AddHSTS(const std::string& host, |
+ const base::Time& expiry, |
bool include_subdomains); |
// Adds explicitly-specified data as if it was processed from an |
// HPKP header (used for net-internals and unit tests). |
- bool AddHPKP(const std::string& host, const base::Time& expiry, |
- bool include_subdomains, const HashValueVector& hashes); |
+ void AddHPKP(const std::string& host, |
+ const base::Time& expiry, |
+ bool include_subdomains, |
+ const HashValueVector& hashes); |
// Returns true iff we have any static public key pins for the |host| and |
// iff its set of required pins is the set we expect for Google |
@@ -290,6 +299,19 @@ class NET_EXPORT TransportSecurityState |
// changed. |
void DirtyNotify(); |
+ // Adds HSTS state to |host|. |
+ void AddHSTSInternal(const std::string& host, |
+ DomainState::UpgradeMode upgrade_mode, |
+ const base::Time& expiry, |
+ bool include_subdomains); |
+ |
+ // Adds HPKP state to |host|. |
+ void AddHPKPInternal(const std::string& host, |
+ const base::Time& last_observed, |
+ const base::Time& expiry, |
+ bool include_subdomains, |
+ const HashValueVector& hashes); |
+ |
// Enable TransportSecurity for |host|. |state| supercedes any previous |
// state for the |host|, including static entries. |
// |
@@ -301,7 +323,9 @@ class NET_EXPORT TransportSecurityState |
// the result. |
static std::string CanonicalizeHost(const std::string& hostname); |
- // The set of hosts that have enabled TransportSecurity. |
+ // The set of hosts that have enabled TransportSecurity. |sts.domain| and |
+ // |pkp.domain| will always be empty for a DomainState in this map; the domain |
+ // comes from the map key instead. |
DomainStateMap enabled_hosts_; |
Delegate* delegate_; |