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