Index: net/http/transport_security_state.h |
diff --git a/net/http/transport_security_state.h b/net/http/transport_security_state.h |
index a4c52e7ecfeabbd4b285aca4c01db397c0d1dbac..a441783cc03b91bd513171821c0555190e033f0a 100644 |
--- a/net/http/transport_security_state.h |
+++ b/net/http/transport_security_state.h |
@@ -206,6 +206,22 @@ class NET_EXPORT TransportSecurityState |
virtual ~ReportSender() {} |
}; |
+ // An interface for building and asynchronously sending reports when a |
+ // site expects valid Certificate Transparency information but it |
+ // wasn't supplied. |
+ class NET_EXPORT ExpectCTReporter { |
+ public: |
+ // Called when the host in |host_port_pair| has opted in to have |
+ // reports about Expect CT policy violations sent to |report_uri|, |
+ // and such a violation has occurred. |
+ virtual void OnExpectCTFailed(const net::HostPortPair& host_port_pair, |
+ const GURL& report_uri, |
+ const net::SSLInfo& ssl_info) = 0; |
+ |
+ protected: |
+ virtual ~ExpectCTReporter() {} |
+ }; |
+ |
// Indicates whether or not a public key pin check should send a |
// report if a violation is detected. |
enum PublicKeyPinReportStatus { ENABLE_PIN_REPORTS, DISABLE_PIN_REPORTS }; |
@@ -237,6 +253,8 @@ class NET_EXPORT TransportSecurityState |
void SetReportSender(ReportSender* report_sender); |
+ void SetExpectCTReporter(ExpectCTReporter* expect_ct_reporter); |
+ |
// Clears all dynamic data (e.g. HSTS and HPKP data). |
// |
// Does NOT persist changes using the Delegate, as this function is only |
@@ -288,11 +306,6 @@ class NET_EXPORT TransportSecurityState |
// deployed. |
bool IsGooglePinnedHost(const std::string& host) const; |
- // Returns true and updates |*expect_ct_result| iff there is a static |
- // (built-in) state for |host| with expect_ct=true. |
- bool GetStaticExpectCTState(const std::string& host, |
- ExpectCTState* expect_ct_result) const; |
- |
// Returns true and updates |*result| iff |host| has HSTS (respectively, HPKP) |
// state. If multiple HSTS (respectively, HPKP) entries match |host|, the |
// most specific match determines the HSTS (respectively, HPKP) return value. |
@@ -336,6 +349,18 @@ class NET_EXPORT TransportSecurityState |
const HostPortPair& host_port_pair, |
const SSLInfo& ssl_info); |
+ // Parses |value| as a Expect CT header value and sends an Expect CT |
+ // report for |host_port_pair| if the following conditions are true: |
+ // 1. The header value is "preload", indicating that the site wants to |
+ // be opted in to Expect CT. |
+ // 2. The given host is present on the Expect CT preload list with a |
+ // valid report-uri, and the build is timely (i.e. preload list is fresh). |
+ // 3. |ssl_info| indicates that the connection violated the Expect CT policy. |
+ // 4. An Expect CT reporter has been provided with SetExpectCTReporter(). |
+ void ProcessExpectCTHeader(const std::string& value, |
+ const HostPortPair& host_port_pair, |
+ const SSLInfo& ssl_info); |
+ |
// The maximum number of seconds for which we'll cache an HSTS request. |
static const long int kMaxHSTSAgeSecs; |
@@ -344,6 +369,7 @@ class NET_EXPORT TransportSecurityState |
FRIEND_TEST_ALL_PREFIXES(HttpSecurityHeadersTest, UpdateDynamicPKPOnly); |
FRIEND_TEST_ALL_PREFIXES(HttpSecurityHeadersTest, UpdateDynamicPKPMaxAge0); |
FRIEND_TEST_ALL_PREFIXES(HttpSecurityHeadersTest, NoClobberPins); |
+ FRIEND_TEST_ALL_PREFIXES(URLRequestTestHTTP, ExpectCTHeader); |
typedef std::map<std::string, STSState> STSStateMap; |
typedef std::map<std::string, PKPState> PKPStateMap; |
@@ -413,6 +439,11 @@ class NET_EXPORT TransportSecurityState |
const TransportSecurityState::PublicKeyPinReportStatus report_status, |
std::string* failure_log); |
+ // Returns true and updates |*expect_ct_result| iff there is a static |
+ // (built-in) state for |host| with expect_ct=true. |
+ bool GetStaticExpectCTState(const std::string& host, |
+ ExpectCTState* expect_ct_result) const; |
+ |
// The sets of hosts that have enabled TransportSecurity. |domain| will always |
// be empty for a STSState or PKPState in these maps; the domain |
// comes from the map keys instead. In addition, |upgrade_mode| in the |
@@ -431,6 +462,8 @@ class NET_EXPORT TransportSecurityState |
// True if static expect-CT state should be used. |
bool enable_static_expect_ct_; |
+ ExpectCTReporter* expect_ct_reporter_; |
+ |
// Keeps track of reports that have been sent recently for |
// rate-limiting. |
ExpiringCache<std::string, bool, base::TimeTicks, std::less<base::TimeTicks>> |