Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: net/http/transport_security_state_unittest.cc

Issue 103803012: Make HSTS headers not clobber preloaded pins. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase and updated comment. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/http/transport_security_state.h" 5 #include "net/http/transport_security_state.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 const base::Time current_time(base::Time::Now()); 136 const base::Time current_time(base::Time::Now());
137 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000); 137 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
138 const base::Time older = current_time - base::TimeDelta::FromSeconds(1000); 138 const base::Time older = current_time - base::TimeDelta::FromSeconds(1000);
139 139
140 EXPECT_FALSE(state.GetDomainState("yahoo.com", true, &domain_state)); 140 EXPECT_FALSE(state.GetDomainState("yahoo.com", true, &domain_state));
141 bool include_subdomains = false; 141 bool include_subdomains = false;
142 state.AddHSTS("yahoo.com", expiry, include_subdomains); 142 state.AddHSTS("yahoo.com", expiry, include_subdomains);
143 143
144 state.DeleteAllDynamicDataSince(expiry); 144 state.DeleteAllDynamicDataSince(expiry);
145 EXPECT_TRUE(state.GetDomainState("yahoo.com", true, &domain_state)); 145 EXPECT_TRUE(state.GetDomainState("yahoo.com", true, &domain_state));
146 EXPECT_EQ(TransportSecurityState::DomainState::MODE_FORCE_HTTPS,
147 domain_state.dynamic_sts.upgrade_mode);
146 state.DeleteAllDynamicDataSince(older); 148 state.DeleteAllDynamicDataSince(older);
147 EXPECT_FALSE(state.GetDomainState("yahoo.com", true, &domain_state)); 149 EXPECT_TRUE(state.GetDomainState("yahoo.com", true, &domain_state));
150 EXPECT_EQ(TransportSecurityState::DomainState::MODE_DEFAULT,
151 domain_state.dynamic_sts.upgrade_mode);
148 } 152 }
149 153
150 TEST_F(TransportSecurityStateTest, DeleteDynamicDataForHost) { 154 TEST_F(TransportSecurityStateTest, DeleteDynamicDataForHost) {
151 TransportSecurityState state; 155 TransportSecurityState state;
152 TransportSecurityState::DomainState domain_state; 156 TransportSecurityState::DomainState domain_state;
153 const base::Time current_time(base::Time::Now()); 157 const base::Time current_time(base::Time::Now());
154 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000); 158 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
155 bool include_subdomains = false; 159 bool include_subdomains = false;
156 state.AddHSTS("yahoo.com", expiry, include_subdomains); 160 state.AddHSTS("yahoo.com", expiry, include_subdomains);
157 161
(...skipping 10 matching lines...) Expand all
168 const std::string a_www_paypal = CanonicalizeHost("a.www.paypal.com"); 172 const std::string a_www_paypal = CanonicalizeHost("a.www.paypal.com");
169 const std::string abc_paypal = CanonicalizeHost("a.b.c.paypal.com"); 173 const std::string abc_paypal = CanonicalizeHost("a.b.c.paypal.com");
170 const std::string example = CanonicalizeHost("example.com"); 174 const std::string example = CanonicalizeHost("example.com");
171 const std::string aypal = CanonicalizeHost("aypal.com"); 175 const std::string aypal = CanonicalizeHost("aypal.com");
172 176
173 TransportSecurityState state; 177 TransportSecurityState state;
174 TransportSecurityState::DomainState domain_state; 178 TransportSecurityState::DomainState domain_state;
175 179
176 EXPECT_TRUE(GetStaticDomainState(&state, paypal, true, &domain_state)); 180 EXPECT_TRUE(GetStaticDomainState(&state, paypal, true, &domain_state));
177 EXPECT_TRUE(GetStaticDomainState(&state, www_paypal, true, &domain_state)); 181 EXPECT_TRUE(GetStaticDomainState(&state, www_paypal, true, &domain_state));
178 EXPECT_FALSE(domain_state.sts_include_subdomains); 182 EXPECT_FALSE(domain_state.static_sts.include_subdomains);
179 EXPECT_FALSE(domain_state.pkp_include_subdomains); 183 EXPECT_FALSE(domain_state.static_pkp.include_subdomains);
180 EXPECT_FALSE(GetStaticDomainState(&state, a_www_paypal, true, &domain_state)); 184 EXPECT_FALSE(GetStaticDomainState(&state, a_www_paypal, true, &domain_state));
181 EXPECT_FALSE(GetStaticDomainState(&state, abc_paypal, true, &domain_state)); 185 EXPECT_FALSE(GetStaticDomainState(&state, abc_paypal, true, &domain_state));
182 EXPECT_FALSE(GetStaticDomainState(&state, example, true, &domain_state)); 186 EXPECT_FALSE(GetStaticDomainState(&state, example, true, &domain_state));
183 EXPECT_FALSE(GetStaticDomainState(&state, aypal, true, &domain_state)); 187 EXPECT_FALSE(GetStaticDomainState(&state, aypal, true, &domain_state));
184 } 188 }
185 189
186 TEST_F(TransportSecurityStateTest, PreloadedDomainSet) { 190 TEST_F(TransportSecurityStateTest, PreloadedDomainSet) {
187 TransportSecurityState state; 191 TransportSecurityState state;
188 TransportSecurityState::DomainState domain_state; 192 TransportSecurityState::DomainState domain_state;
189 193
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 static bool HasPublicKeyPins(const char* hostname) { 225 static bool HasPublicKeyPins(const char* hostname) {
222 return HasPublicKeyPins(hostname, true); 226 return HasPublicKeyPins(hostname, true);
223 } 227 }
224 228
225 static bool OnlyPinning(const char *hostname) { 229 static bool OnlyPinning(const char *hostname) {
226 TransportSecurityState state; 230 TransportSecurityState state;
227 TransportSecurityState::DomainState domain_state; 231 TransportSecurityState::DomainState domain_state;
228 if (!state.GetDomainState(hostname, true /* SNI ok */, &domain_state)) 232 if (!state.GetDomainState(hostname, true /* SNI ok */, &domain_state))
229 return false; 233 return false;
230 234
231 return (domain_state.static_spki_hashes.size() > 0 || 235 return (domain_state.static_pkp.spki_hashes.size() > 0 ||
232 domain_state.bad_static_spki_hashes.size() > 0 || 236 domain_state.static_pkp.bad_spki_hashes.size() > 0 ||
233 domain_state.dynamic_spki_hashes.size() > 0) && 237 domain_state.dynamic_pkp.spki_hashes.size() > 0) &&
234 !domain_state.ShouldUpgradeToSSL(); 238 !domain_state.ShouldUpgradeToSSL();
235 } 239 }
236 240
237 TEST_F(TransportSecurityStateTest, Preloaded) { 241 TEST_F(TransportSecurityStateTest, Preloaded) {
238 TransportSecurityState state; 242 TransportSecurityState state;
239 TransportSecurityState::DomainState domain_state; 243 TransportSecurityState::DomainState domain_state;
240 244
241 // We do more extensive checks for the first domain. 245 // We do more extensive checks for the first domain.
242 EXPECT_TRUE(state.GetDomainState("www.paypal.com", true, &domain_state)); 246 EXPECT_TRUE(state.GetDomainState("www.paypal.com", true, &domain_state));
243 EXPECT_EQ(domain_state.upgrade_mode, 247 EXPECT_EQ(domain_state.static_sts.upgrade_mode,
244 TransportSecurityState::DomainState::MODE_FORCE_HTTPS); 248 TransportSecurityState::DomainState::MODE_FORCE_HTTPS);
245 EXPECT_FALSE(domain_state.sts_include_subdomains); 249 EXPECT_FALSE(domain_state.static_sts.include_subdomains);
246 EXPECT_FALSE(domain_state.pkp_include_subdomains); 250 EXPECT_FALSE(domain_state.static_pkp.include_subdomains);
247 251
248 EXPECT_TRUE(HasState("paypal.com")); 252 EXPECT_TRUE(HasState("paypal.com"));
249 EXPECT_FALSE(HasState("www2.paypal.com")); 253 EXPECT_FALSE(HasState("www2.paypal.com"));
250 EXPECT_FALSE(HasState("www2.paypal.com")); 254 EXPECT_FALSE(HasState("www2.paypal.com"));
251 255
252 // Google hosts: 256 // Google hosts:
253 257
254 EXPECT_TRUE(ShouldRedirect("chrome.google.com")); 258 EXPECT_TRUE(ShouldRedirect("chrome.google.com"));
255 EXPECT_TRUE(ShouldRedirect("checkout.google.com")); 259 EXPECT_TRUE(ShouldRedirect("checkout.google.com"));
256 EXPECT_TRUE(ShouldRedirect("wallet.google.com")); 260 EXPECT_TRUE(ShouldRedirect("wallet.google.com"));
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 EXPECT_TRUE(ShouldRedirect("foo.simon.butcher.name")); 399 EXPECT_TRUE(ShouldRedirect("foo.simon.butcher.name"));
396 400
397 EXPECT_TRUE(ShouldRedirect("linx.net")); 401 EXPECT_TRUE(ShouldRedirect("linx.net"));
398 EXPECT_TRUE(ShouldRedirect("foo.linx.net")); 402 EXPECT_TRUE(ShouldRedirect("foo.linx.net"));
399 403
400 EXPECT_TRUE(ShouldRedirect("dropcam.com")); 404 EXPECT_TRUE(ShouldRedirect("dropcam.com"));
401 EXPECT_TRUE(ShouldRedirect("www.dropcam.com")); 405 EXPECT_TRUE(ShouldRedirect("www.dropcam.com"));
402 EXPECT_FALSE(HasState("foo.dropcam.com")); 406 EXPECT_FALSE(HasState("foo.dropcam.com"));
403 407
404 EXPECT_TRUE(state.GetDomainState("torproject.org", false, &domain_state)); 408 EXPECT_TRUE(state.GetDomainState("torproject.org", false, &domain_state));
405 EXPECT_FALSE(domain_state.static_spki_hashes.empty()); 409 EXPECT_FALSE(domain_state.static_pkp.spki_hashes.empty());
406 EXPECT_TRUE(state.GetDomainState("www.torproject.org", false, 410 EXPECT_TRUE(state.GetDomainState("www.torproject.org", false,
407 &domain_state)); 411 &domain_state));
408 EXPECT_FALSE(domain_state.static_spki_hashes.empty()); 412 EXPECT_FALSE(domain_state.static_pkp.spki_hashes.empty());
409 EXPECT_TRUE(state.GetDomainState("check.torproject.org", false, 413 EXPECT_TRUE(state.GetDomainState("check.torproject.org", false,
410 &domain_state)); 414 &domain_state));
411 EXPECT_FALSE(domain_state.static_spki_hashes.empty()); 415 EXPECT_FALSE(domain_state.static_pkp.spki_hashes.empty());
412 EXPECT_TRUE(state.GetDomainState("blog.torproject.org", false, 416 EXPECT_TRUE(state.GetDomainState("blog.torproject.org", false,
413 &domain_state)); 417 &domain_state));
414 EXPECT_FALSE(domain_state.static_spki_hashes.empty()); 418 EXPECT_FALSE(domain_state.static_pkp.spki_hashes.empty());
415 EXPECT_TRUE(ShouldRedirect("ebanking.indovinabank.com.vn")); 419 EXPECT_TRUE(ShouldRedirect("ebanking.indovinabank.com.vn"));
416 EXPECT_TRUE(ShouldRedirect("foo.ebanking.indovinabank.com.vn")); 420 EXPECT_TRUE(ShouldRedirect("foo.ebanking.indovinabank.com.vn"));
417 421
418 EXPECT_TRUE(ShouldRedirect("epoxate.com")); 422 EXPECT_TRUE(ShouldRedirect("epoxate.com"));
419 EXPECT_FALSE(HasState("foo.epoxate.com")); 423 EXPECT_FALSE(HasState("foo.epoxate.com"));
420 424
421 EXPECT_TRUE(HasPublicKeyPins("torproject.org")); 425 EXPECT_TRUE(HasPublicKeyPins("torproject.org"));
422 EXPECT_TRUE(HasPublicKeyPins("www.torproject.org")); 426 EXPECT_TRUE(HasPublicKeyPins("www.torproject.org"));
423 EXPECT_TRUE(HasPublicKeyPins("check.torproject.org")); 427 EXPECT_TRUE(HasPublicKeyPins("check.torproject.org"));
424 EXPECT_TRUE(HasPublicKeyPins("blog.torproject.org")); 428 EXPECT_TRUE(HasPublicKeyPins("blog.torproject.org"));
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 617
614 TEST_F(TransportSecurityStateTest, OverrideBuiltins) { 618 TEST_F(TransportSecurityStateTest, OverrideBuiltins) {
615 EXPECT_TRUE(HasPublicKeyPins("google.com")); 619 EXPECT_TRUE(HasPublicKeyPins("google.com"));
616 EXPECT_FALSE(ShouldRedirect("google.com")); 620 EXPECT_FALSE(ShouldRedirect("google.com"));
617 EXPECT_FALSE(ShouldRedirect("www.google.com")); 621 EXPECT_FALSE(ShouldRedirect("www.google.com"));
618 622
619 TransportSecurityState state; 623 TransportSecurityState state;
620 TransportSecurityState::DomainState domain_state; 624 TransportSecurityState::DomainState domain_state;
621 const base::Time current_time(base::Time::Now()); 625 const base::Time current_time(base::Time::Now());
622 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000); 626 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
623 domain_state.upgrade_expiry = expiry; 627 domain_state.dynamic_sts.expiry = expiry;
624 EnableHost(&state, "www.google.com", domain_state); 628 EnableHost(&state, "www.google.com", domain_state);
625 629
626 EXPECT_TRUE(state.GetDomainState("www.google.com", true, &domain_state)); 630 EXPECT_TRUE(state.GetDomainState("www.google.com", true, &domain_state));
627 } 631 }
628 632
629 TEST_F(TransportSecurityStateTest, GooglePinnedProperties) { 633 TEST_F(TransportSecurityStateTest, GooglePinnedProperties) {
630 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty( 634 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty(
631 "www.example.com", true)); 635 "www.example.com", true));
632 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty( 636 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty(
633 "www.paypal.com", true)); 637 "www.paypal.com", true));
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 // Expect to fail for SNI hosts when not searching the SNI list: 687 // Expect to fail for SNI hosts when not searching the SNI list:
684 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty( 688 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty(
685 "gmail.com", false)); 689 "gmail.com", false));
686 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty( 690 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty(
687 "googlegroups.com", false)); 691 "googlegroups.com", false));
688 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty( 692 EXPECT_FALSE(TransportSecurityState::IsGooglePinnedProperty(
689 "www.googlegroups.com", false)); 693 "www.googlegroups.com", false));
690 } 694 }
691 695
692 } // namespace net 696 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698