1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ssl/ssl_error_classification.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/files/file_path.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/strings/string_split.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/time/time.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/test/base/chrome_render_view_host_test_harness.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/web_contents.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/base/net_errors.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/base/test_data_directory.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/cert/x509_cert_types.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/cert/x509_certificate.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/test/cert_test_util.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/test/test_certificate_data.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "url/gurl.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing base::Time; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing content::WebContents; 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SSLErrorClassificationTest : public ChromeRenderViewHostTestHarness { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassificationTest() { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetThreadBundleOptions(content::TestBrowserThreadBundle::REAL_IO_THREAD); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(SSLErrorClassificationTest, TestDateInvalidScore) { 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FilePath certs_dir = net::GetTestCertsDirectory(); 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<net::X509Certificate> expired_cert = 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::ImportCertFromFile(certs_dir, "expired_cert.pem"); 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Time time; 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL origin("https://example.com"); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cert_error = net::ERR_CERT_DATE_INVALID; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebContents* contents = web_contents(); 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(base::Time::FromString("Wed, 03 Jan 2007 12:00:00 GMT", &time)); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassification ssl_error(contents, 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time, 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci origin, 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cert_error, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *expired_cert); 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FLOAT_EQ(0.2f, ssl_error.CalculateScoreTimePassedSinceExpiry()); 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(base::Time::FromString("Sat, 06 Jan 2007 12:00:00 GMT", &time)); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassification ssl_error(contents, 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci origin, 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cert_error, 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *expired_cert); 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FLOAT_EQ(0.3f, ssl_error.CalculateScoreTimePassedSinceExpiry()); 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(base::Time::FromString("Mon, 08 Jan 2007 12:00:00 GMT", &time)); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassification ssl_error(contents, 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci origin, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cert_error, 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *expired_cert); 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FLOAT_EQ(0.4f, ssl_error.CalculateScoreTimePassedSinceExpiry()); 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(SSLErrorClassificationTest, TestNameMismatch) { 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<net::X509Certificate> google_cert( 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::X509Certificate::CreateFromBytes( 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reinterpret_cast<const char*>(google_der), sizeof(google_der))); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_NE(static_cast<net::X509Certificate*>(NULL), google_cert.get()); 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::Time time = base::Time::NowFromSystemTime(); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> dns_names_google; 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_names_google.push_back("www"); 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_names_google.push_back("google"); 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_names_google.push_back("com"); 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::vector<std::string>> dns_name_tokens_google; 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_name_tokens_google.push_back(dns_names_google); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int cert_error = net::ERR_CERT_COMMON_NAME_INVALID; 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebContents* contents = web_contents(); 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL origin("https://google.com"); 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string host_name = origin.host(); 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> host_name_tokens; 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::SplitStringDontTrim(host_name, '.', &host_name_tokens); 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassification ssl_error(contents, 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time, 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci origin, 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cert_error, 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *google_cert); 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(ssl_error.IsWWWSubDomainMatch()); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.NameUnderAnyNames(host_name_tokens, 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_name_tokens_google)); 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.AnyNamesUnderName(dns_name_tokens_google, 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) host_name_tokens)); 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.IsSubDomainOutsideWildcard(host_name_tokens)); 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(ssl_error.IsCertLikelyFromMultiTenantHosting()); 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL origin("https://foo.blah.google.com"); 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string host_name = origin.host(); 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> host_name_tokens; 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::SplitStringDontTrim(host_name, '.', &host_name_tokens); 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassification ssl_error(contents, 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time, 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci origin, 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cert_error, 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *google_cert); 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.IsWWWSubDomainMatch()); 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.NameUnderAnyNames(host_name_tokens, 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_name_tokens_google)); 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.AnyNamesUnderName(dns_name_tokens_google, 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) host_name_tokens)); 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL origin("https://foo.www.google.com"); 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string host_name = origin.host(); 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> host_name_tokens; 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::SplitStringDontTrim(host_name, '.', &host_name_tokens); 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassification ssl_error(contents, 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time, 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci origin, 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cert_error, 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *google_cert); 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.IsWWWSubDomainMatch()); 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(ssl_error.NameUnderAnyNames(host_name_tokens, 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_name_tokens_google)); 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.AnyNamesUnderName(dns_name_tokens_google, 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) host_name_tokens)); 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL origin("https://www.google.com.foo"); 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string host_name = origin.host(); 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> host_name_tokens; 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::SplitStringDontTrim(host_name, '.', &host_name_tokens); 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassification ssl_error(contents, 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time, 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci origin, 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cert_error, 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *google_cert); 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.IsWWWSubDomainMatch()); 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.NameUnderAnyNames(host_name_tokens, 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_name_tokens_google)); 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.AnyNamesUnderName(dns_name_tokens_google, 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) host_name_tokens)); 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL origin("https://www.foogoogle.com."); 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string host_name = origin.host(); 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> host_name_tokens; 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::SplitStringDontTrim(host_name, '.', &host_name_tokens); 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassification ssl_error(contents, 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time, 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci origin, 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cert_error, 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *google_cert); 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.IsWWWSubDomainMatch()); 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.NameUnderAnyNames(host_name_tokens, 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_name_tokens_google)); 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.AnyNamesUnderName(dns_name_tokens_google, 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) host_name_tokens)); 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<net::X509Certificate> webkit_cert( 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) net::X509Certificate::CreateFromBytes( 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der))); 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_NE(static_cast<net::X509Certificate*>(NULL), webkit_cert.get()); 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> dns_names_webkit; 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_names_webkit.push_back("webkit"); 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_names_webkit.push_back("org"); 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::vector<std::string>> dns_name_tokens_webkit; 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_name_tokens_webkit.push_back(dns_names_webkit); 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GURL origin("https://a.b.webkit.org"); 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string host_name = origin.host(); 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<std::string> host_name_tokens; 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::SplitStringDontTrim(host_name, '.', &host_name_tokens); 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SSLErrorClassification ssl_error(contents, 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci time, 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci origin, 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cert_error, 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *webkit_cert); 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.IsWWWSubDomainMatch()); 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.NameUnderAnyNames(host_name_tokens, 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dns_name_tokens_webkit)); 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(ssl_error.AnyNamesUnderName(dns_name_tokens_webkit, 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) host_name_tokens)); 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(ssl_error.IsSubDomainOutsideWildcard(host_name_tokens)); 1976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(ssl_error.IsCertLikelyFromMultiTenantHosting()); 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(SSLErrorClassificationTest, TestHostNameHasKnownTLD) { 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string url1 = "www.google.com"; 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string url2 = "b.appspot.com"; 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string url3 = "a.private"; 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(SSLErrorClassification::IsHostNameKnownTLD(url1)); 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(SSLErrorClassification::IsHostNameKnownTLD(url2)); 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(SSLErrorClassification::IsHostNameKnownTLD(url3)); 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 209