| Index: net/http/transport_security_state_unittest.cc
|
| diff --git a/net/http/transport_security_state_unittest.cc b/net/http/transport_security_state_unittest.cc
|
| index 61d291251754db82772f959468a0ad66581da2c5..cc51e7297a58a246c423600020afb37b6fd9df56 100644
|
| --- a/net/http/transport_security_state_unittest.cc
|
| +++ b/net/http/transport_security_state_unittest.cc
|
| @@ -71,6 +71,64 @@ class TransportSecurityStateTest : public testing::Test {
|
| }
|
| };
|
|
|
| +TEST_F(TransportSecurityStateTest, DomainNameOddities) {
|
| + TransportSecurityState state;
|
| + const base::Time current_time(base::Time::Now());
|
| + const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
|
| +
|
| + // DNS suffix search tests. Some DNS resolvers allow a terminal "." to
|
| + // indicate not perform DNS suffix searching. Ensure that regardless
|
| + // of how this is treated at the resolver layer, or at the URL/origin
|
| + // layer (that is, whether they are treated as equivalent or distinct),
|
| + // ensure that for policy matching, something lacking a terminal "."
|
| + // is equivalent to something with a terminal "."
|
| + EXPECT_FALSE(state.ShouldUpgradeToSSL("example.com"));
|
| +
|
| + state.AddHSTS("example.com", expiry, true /* include_subdomains */);
|
| + EXPECT_TRUE(state.ShouldUpgradeToSSL("example.com"));
|
| + // Trailing '.' should be equivalent; it's just a resolver hint
|
| + EXPECT_TRUE(state.ShouldUpgradeToSSL("example.com."));
|
| + // Leading '.' should be invalid
|
| + EXPECT_FALSE(state.ShouldUpgradeToSSL(".example.com"));
|
| + // Subdomains should work regardless
|
| + EXPECT_TRUE(state.ShouldUpgradeToSSL("sub.example.com"));
|
| + EXPECT_TRUE(state.ShouldUpgradeToSSL("sub.example.com."));
|
| + // But invalid subdomains should be rejected
|
| + EXPECT_FALSE(state.ShouldUpgradeToSSL("sub..example.com"));
|
| + EXPECT_FALSE(state.ShouldUpgradeToSSL("sub..example.com."));
|
| +
|
| + // Now try the inverse form
|
| + TransportSecurityState state2;
|
| + state2.AddHSTS("example.net.", expiry, true /* include_subdomains */);
|
| + EXPECT_TRUE(state2.ShouldUpgradeToSSL("example.net."));
|
| + EXPECT_TRUE(state2.ShouldUpgradeToSSL("example.net"));
|
| + EXPECT_TRUE(state2.ShouldUpgradeToSSL("sub.example.net."));
|
| + EXPECT_TRUE(state2.ShouldUpgradeToSSL("sub.example.net"));
|
| +
|
| + // Finally, test weird things
|
| + TransportSecurityState state3;
|
| + state3.AddHSTS("", expiry, true /* include_subdomains */);
|
| + EXPECT_FALSE(state3.ShouldUpgradeToSSL(""));
|
| + EXPECT_FALSE(state3.ShouldUpgradeToSSL("."));
|
| + EXPECT_FALSE(state3.ShouldUpgradeToSSL("..."));
|
| + // Make sure it didn't somehow apply HSTS to the world
|
| + EXPECT_FALSE(state3.ShouldUpgradeToSSL("example.org"));
|
| +
|
| + TransportSecurityState state4;
|
| + state4.AddHSTS(".", expiry, true /* include_subdomains */);
|
| + EXPECT_FALSE(state4.ShouldUpgradeToSSL(""));
|
| + EXPECT_FALSE(state4.ShouldUpgradeToSSL("."));
|
| + EXPECT_FALSE(state4.ShouldUpgradeToSSL("..."));
|
| + EXPECT_FALSE(state4.ShouldUpgradeToSSL("example.org"));
|
| +
|
| + // Now do the same for preloaded entries
|
| + TransportSecurityState state5;
|
| + EXPECT_TRUE(state5.ShouldUpgradeToSSL("accounts.google.com"));
|
| + EXPECT_TRUE(state5.ShouldUpgradeToSSL("accounts.google.com."));
|
| + EXPECT_FALSE(state5.ShouldUpgradeToSSL("accounts..google.com"));
|
| + EXPECT_FALSE(state5.ShouldUpgradeToSSL("accounts..google.com."));
|
| +}
|
| +
|
| TEST_F(TransportSecurityStateTest, SimpleMatches) {
|
| TransportSecurityState state;
|
| const base::Time current_time(base::Time::Now());
|
| @@ -123,10 +181,15 @@ TEST_F(TransportSecurityStateTest, MatchesCase2) {
|
| const base::Time current_time(base::Time::Now());
|
| const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
|
|
|
| + // Check dynamic entries
|
| EXPECT_FALSE(state.ShouldUpgradeToSSL("YAhoo.coM"));
|
| bool include_subdomains = false;
|
| state.AddHSTS("yahoo.com", expiry, include_subdomains);
|
| EXPECT_TRUE(state.ShouldUpgradeToSSL("YAhoo.coM"));
|
| +
|
| + // Check static entries
|
| + EXPECT_TRUE(state.ShouldUpgradeToSSL("AccounTs.GooGle.com"));
|
| + EXPECT_TRUE(state.ShouldUpgradeToSSL("mail.google.COM"));
|
| }
|
|
|
| TEST_F(TransportSecurityStateTest, SubdomainMatches) {
|
|
|