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

Side by Side Diff: net/cert/cert_verify_proc_unittest.cc

Issue 2620443002: [ABANDONED] Refactor CertVerifyProcWeakDigestTest. (Closed)
Patch Set: Created 3 years, 11 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
« no previous file with comments | « net/cert/cert_verify_proc.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/cert/cert_verify_proc.h" 5 #include "net/cert/cert_verify_proc.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 1644 matching lines...) Expand 10 before | Expand all | Expand 10 after
1655 1655
1656 // ... unless VERIFY_ENABLE_SHA1_LOCAL_ANCHORS was supplied. 1656 // ... unless VERIFY_ENABLE_SHA1_LOCAL_ANCHORS was supplied.
1657 flags = CertVerifier::VERIFY_ENABLE_SHA1_LOCAL_ANCHORS; 1657 flags = CertVerifier::VERIFY_ENABLE_SHA1_LOCAL_ANCHORS;
1658 verify_result.Reset(); 1658 verify_result.Reset();
1659 error = Verify(cert.get(), "127.0.0.1", flags, nullptr /* crl_set */, 1659 error = Verify(cert.get(), "127.0.0.1", flags, nullptr /* crl_set */,
1660 empty_cert_list_, &verify_result); 1660 empty_cert_list_, &verify_result);
1661 EXPECT_THAT(error, IsOk()); 1661 EXPECT_THAT(error, IsOk());
1662 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_SHA1_SIGNATURE_PRESENT); 1662 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_SHA1_SIGNATURE_PRESENT);
1663 } 1663 }
1664 1664
1665 enum ExpectedAlgorithms {
1666 EXPECT_MD2 = 1 << 0,
1667 EXPECT_MD4 = 1 << 1,
1668 EXPECT_MD5 = 1 << 2,
1669 EXPECT_SHA1 = 1 << 3,
1670 EXPECT_SHA1_LEAF = 1 << 4,
1671 };
1672
1673 struct WeakDigestTestData { 1665 struct WeakDigestTestData {
1674 const char* root_cert_filename; 1666 const char* cert_filename;
1675 const char* intermediate_cert_filename; 1667 X509Certificate::SignatureHashAlgorithm expected_algorithm;
1676 const char* ee_cert_filename;
1677 int expected_algorithms;
1678 }; 1668 };
1679 1669
1680 // GTest 'magic' pretty-printer, so that if/when a test fails, it knows how 1670 // GTest 'magic' pretty-printer, so that if/when a test fails, it knows how
1681 // to output the parameter that was passed. Without this, it will simply 1671 // to output the parameter that was passed. Without this, it will simply
1682 // attempt to print out the first twenty bytes of the object, which depending 1672 // attempt to print out the first twenty bytes of the object, which depending
1683 // on platform and alignment, may result in an invalid read. 1673 // on platform and alignment, may result in an invalid read.
1684 void PrintTo(const WeakDigestTestData& data, std::ostream* os) { 1674 void PrintTo(const WeakDigestTestData& data, std::ostream* os) {
1685 *os << "root: " 1675 *os << "cert: " << data.cert_filename;
1686 << (data.root_cert_filename ? data.root_cert_filename : "none")
1687 << "; intermediate: " << data.intermediate_cert_filename
1688 << "; end-entity: " << data.ee_cert_filename;
1689 } 1676 }
1690 1677
1691 class CertVerifyProcWeakDigestTest 1678 class CertVerifyProcWeakDigestTest
1692 : public CertVerifyProcTest, 1679 : public CertVerifyProcTest,
1693 public testing::WithParamInterface<WeakDigestTestData> { 1680 public testing::WithParamInterface<WeakDigestTestData> {
1694 public: 1681 public:
1695 CertVerifyProcWeakDigestTest() {} 1682 CertVerifyProcWeakDigestTest() {}
1696 virtual ~CertVerifyProcWeakDigestTest() {} 1683 virtual ~CertVerifyProcWeakDigestTest() {}
1697 }; 1684 };
1698 1685
1699 // Test that the underlying cryptographic library properly surfaces the 1686 // Test that the underlying cryptographic library properly surfaces the
1700 // algorithms used in the chain. Some libraries, like NSS, don't return 1687 // algorithm used in a certificate.
1701 // the failing chain on error, and thus not all tests can be run.
1702 TEST_P(CertVerifyProcWeakDigestTest, VerifyDetectsAlgorithm) { 1688 TEST_P(CertVerifyProcWeakDigestTest, VerifyDetectsAlgorithm) {
Ryan Sleevi 2017/01/06 02:27:14 So, a few behaviour changes worth calling out: 1)
1703 WeakDigestTestData data = GetParam(); 1689 WeakDigestTestData data = GetParam();
1704 base::FilePath certs_dir = GetTestCertsDirectory(); 1690 base::FilePath certs_dir = GetTestCertsDirectory();
1705 1691
1706 ScopedTestRoot test_root; 1692 scoped_refptr<X509Certificate> cert =
1707 if (data.root_cert_filename) { 1693 ImportCertFromFile(certs_dir, data.cert_filename);
1708 scoped_refptr<X509Certificate> root_cert = 1694 ASSERT_TRUE(cert);
1709 ImportCertFromFile(certs_dir, data.root_cert_filename); 1695
1710 ASSERT_TRUE(root_cert); 1696 bool expected_has_md2 =
1711 test_root.Reset(root_cert.get()); 1697 data.expected_algorithm == X509Certificate::kSignatureHashAlgorithmMd2;
1698 bool expected_has_md4 =
1699 data.expected_algorithm == X509Certificate::kSignatureHashAlgorithmMd4;
1700 bool expected_has_md5 =
1701 data.expected_algorithm == X509Certificate::kSignatureHashAlgorithmMd5;
1702 bool expected_has_sha1 =
1703 data.expected_algorithm == X509Certificate::kSignatureHashAlgorithmSha1;
1704
1705 // Try verifying with both is_leaf=true, and is_leaf=false.
1706 for (bool is_leaf : {true, false}) {
1707 // Fill the weak hash algorithm information using a default-initialized
1708 // CertVerifyResult (each of has_XXX will be false).
1709 CertVerifyResult verify_result;
1710 X509Certificate::SignatureHashAlgorithm hash_algorithm =
1711 FillCertVerifyResultWeakSignature(cert->os_cert_handle(), is_leaf,
1712 &verify_result);
1713
1714 EXPECT_EQ(data.expected_algorithm, hash_algorithm);
1715
1716 EXPECT_EQ(expected_has_md2, verify_result.has_md2);
1717 EXPECT_EQ(expected_has_md4, verify_result.has_md4);
1718 EXPECT_EQ(expected_has_md5, verify_result.has_md5);
1719 EXPECT_EQ(expected_has_sha1, verify_result.has_sha1);
1720 EXPECT_EQ(expected_has_sha1 && is_leaf, verify_result.has_sha1_leaf);
1712 } 1721 }
1713 1722
1714 scoped_refptr<X509Certificate> intermediate_cert = 1723 // TODO(eroman): Verify that values are not re-set to false when not
1715 ImportCertFromFile(certs_dir, data.intermediate_cert_filename); 1724 // applicable.
Ryan Sleevi 2017/01/06 02:27:14 I'm not sure why this TODO?
1716 ASSERT_TRUE(intermediate_cert);
1717 scoped_refptr<X509Certificate> ee_cert =
1718 ImportCertFromFile(certs_dir, data.ee_cert_filename);
1719 ASSERT_TRUE(ee_cert);
1720
1721 X509Certificate::OSCertHandles intermediates;
1722 intermediates.push_back(intermediate_cert->os_cert_handle());
1723
1724 scoped_refptr<X509Certificate> ee_chain =
1725 X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(),
1726 intermediates);
1727 ASSERT_TRUE(ee_chain);
1728
1729 int flags = 0;
1730 CertVerifyResult verify_result;
1731 Verify(ee_chain.get(), "127.0.0.1", flags, NULL, empty_cert_list_,
1732 &verify_result);
1733 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_MD2), verify_result.has_md2);
1734 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_MD4), verify_result.has_md4);
1735 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_MD5), verify_result.has_md5);
1736 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_SHA1), verify_result.has_sha1);
1737 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_SHA1_LEAF),
1738 verify_result.has_sha1_leaf);
1739 } 1725 }
1740 1726
1741 // Unlike TEST/TEST_F, which are macros that expand to further macros, 1727 const WeakDigestTestData kVerifyWeakSignatureData[] = {
1742 // INSTANTIATE_TEST_CASE_P is a macro that expands directly to code that 1728 {"weak_digest_md5_intermediate.pem",
1743 // stringizes the arguments. As a result, macros passed as parameters (such as 1729 X509Certificate::kSignatureHashAlgorithmMd5},
1744 // prefix or test_case_name) will not be expanded by the preprocessor. To work 1730 {"weak_digest_md4_intermediate.pem",
1745 // around this, indirect the macro for INSTANTIATE_TEST_CASE_P, so that the 1731 X509Certificate::kSignatureHashAlgorithmMd4},
1746 // pre-processor will expand macros such as MAYBE_test_name before 1732 {"weak_digest_md2_intermediate.pem",
1747 // instantiating the test. 1733 X509Certificate::kSignatureHashAlgorithmMd2},
1748 #define WRAPPED_INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ 1734 {"weak_digest_sha1_ee.pem", X509Certificate::kSignatureHashAlgorithmSha1},
1749 INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) 1735 };
1750 1736
1751 // The signature algorithm of the root CA should not matter. 1737 INSTANTIATE_TEST_CASE_P(,
1752 const WeakDigestTestData kVerifyRootCATestData[] = {
1753 {"weak_digest_md5_root.pem", "weak_digest_sha1_intermediate.pem",
1754 "weak_digest_sha1_ee.pem", EXPECT_SHA1 | EXPECT_SHA1_LEAF},
1755 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN)
1756 // MD4 is not supported by OS X / NSS
1757 {"weak_digest_md4_root.pem", "weak_digest_sha1_intermediate.pem",
1758 "weak_digest_sha1_ee.pem", EXPECT_SHA1 | EXPECT_SHA1_LEAF},
1759 #endif
1760 {"weak_digest_md2_root.pem", "weak_digest_sha1_intermediate.pem",
1761 "weak_digest_sha1_ee.pem", EXPECT_SHA1 | EXPECT_SHA1_LEAF},
1762 };
1763 INSTANTIATE_TEST_CASE_P(VerifyRoot,
1764 CertVerifyProcWeakDigestTest, 1738 CertVerifyProcWeakDigestTest,
1765 testing::ValuesIn(kVerifyRootCATestData)); 1739 testing::ValuesIn(kVerifyWeakSignatureData));
1766
1767 // The signature algorithm of intermediates should be properly detected.
1768 const WeakDigestTestData kVerifyIntermediateCATestData[] = {
1769 {"weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem",
1770 "weak_digest_sha1_ee.pem", EXPECT_MD5 | EXPECT_SHA1 | EXPECT_SHA1_LEAF},
1771 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN)
1772 // MD4 is not supported by OS X / NSS
1773 {"weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem",
1774 "weak_digest_sha1_ee.pem", EXPECT_MD4 | EXPECT_SHA1 | EXPECT_SHA1_LEAF},
1775 #endif
1776 {"weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem",
1777 "weak_digest_sha1_ee.pem", EXPECT_MD2 | EXPECT_SHA1 | EXPECT_SHA1_LEAF},
1778 };
1779 // Disabled on NSS - MD4 is not supported, and MD2 and MD5 are disabled.
1780 #if defined(USE_NSS_CERTS) || defined(OS_IOS)
1781 #define MAYBE_VerifyIntermediate DISABLED_VerifyIntermediate
1782 #else
1783 #define MAYBE_VerifyIntermediate VerifyIntermediate
1784 #endif
1785 WRAPPED_INSTANTIATE_TEST_CASE_P(
1786 MAYBE_VerifyIntermediate,
1787 CertVerifyProcWeakDigestTest,
1788 testing::ValuesIn(kVerifyIntermediateCATestData));
1789
1790 // The signature algorithm of end-entity should be properly detected.
1791 const WeakDigestTestData kVerifyEndEntityTestData[] = {
1792 { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem",
1793 "weak_digest_md5_ee.pem", EXPECT_MD5 | EXPECT_SHA1 },
1794 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN)
1795 // MD4 is not supported by OS X / NSS
1796 { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem",
1797 "weak_digest_md4_ee.pem", EXPECT_MD4 | EXPECT_SHA1 },
1798 #endif
1799 { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem",
1800 "weak_digest_md2_ee.pem", EXPECT_MD2 | EXPECT_SHA1 },
1801 };
1802 // Disabled on NSS - NSS caches chains/signatures in such a way that cannot
1803 // be cleared until NSS is cleanly shutdown, which is not presently supported
1804 // in Chromium.
1805 // OSX 10.12+ stops building the chain at the first weak digest.
1806 #if defined(USE_NSS_CERTS) || defined(OS_IOS) || defined(OS_MACOSX)
1807 #define MAYBE_VerifyEndEntity DISABLED_VerifyEndEntity
1808 #else
1809 #define MAYBE_VerifyEndEntity VerifyEndEntity
1810 #endif
1811 WRAPPED_INSTANTIATE_TEST_CASE_P(MAYBE_VerifyEndEntity,
1812 CertVerifyProcWeakDigestTest,
1813 testing::ValuesIn(kVerifyEndEntityTestData));
1814
1815 // Incomplete chains should still report the status of the intermediate.
1816 const WeakDigestTestData kVerifyIncompleteIntermediateTestData[] = {
1817 {NULL, "weak_digest_md5_intermediate.pem", "weak_digest_sha1_ee.pem",
1818 EXPECT_MD5 | EXPECT_SHA1 | EXPECT_SHA1_LEAF},
1819 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN)
1820 // MD4 is not supported by OS X / NSS
1821 {NULL, "weak_digest_md4_intermediate.pem", "weak_digest_sha1_ee.pem",
1822 EXPECT_MD4 | EXPECT_SHA1 | EXPECT_SHA1_LEAF},
1823 #endif
1824 {NULL, "weak_digest_md2_intermediate.pem", "weak_digest_sha1_ee.pem",
1825 EXPECT_MD2 | EXPECT_SHA1 | EXPECT_SHA1_LEAF},
1826 };
1827 // Disabled on NSS - libpkix does not return constructed chains on error,
1828 // preventing us from detecting/inspecting the verified chain.
1829 #if defined(USE_NSS_CERTS) || defined(OS_IOS)
1830 #define MAYBE_VerifyIncompleteIntermediate \
1831 DISABLED_VerifyIncompleteIntermediate
1832 #else
1833 #define MAYBE_VerifyIncompleteIntermediate VerifyIncompleteIntermediate
1834 #endif
1835 WRAPPED_INSTANTIATE_TEST_CASE_P(
1836 MAYBE_VerifyIncompleteIntermediate,
1837 CertVerifyProcWeakDigestTest,
1838 testing::ValuesIn(kVerifyIncompleteIntermediateTestData));
1839
1840 // Incomplete chains should still report the status of the end-entity.
1841 const WeakDigestTestData kVerifyIncompleteEETestData[] = {
1842 { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md5_ee.pem",
1843 EXPECT_MD5 | EXPECT_SHA1 },
1844 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN)
1845 // MD4 is not supported by OS X / NSS
1846 { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md4_ee.pem",
1847 EXPECT_MD4 | EXPECT_SHA1 },
1848 #endif
1849 { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md2_ee.pem",
1850 EXPECT_MD2 | EXPECT_SHA1 },
1851 };
1852 // Disabled on NSS - libpkix does not return constructed chains on error,
1853 // preventing us from detecting/inspecting the verified chain.
1854 // OSX 10.12+ stops building the chain at the first weak digest.
1855 #if defined(USE_NSS_CERTS) || defined(OS_IOS) || defined(OS_MACOSX)
1856 #define MAYBE_VerifyIncompleteEndEntity DISABLED_VerifyIncompleteEndEntity
1857 #else
1858 #define MAYBE_VerifyIncompleteEndEntity VerifyIncompleteEndEntity
1859 #endif
1860 WRAPPED_INSTANTIATE_TEST_CASE_P(
1861 MAYBE_VerifyIncompleteEndEntity,
1862 CertVerifyProcWeakDigestTest,
1863 testing::ValuesIn(kVerifyIncompleteEETestData));
1864
1865 // Differing algorithms between the intermediate and the EE should still be
1866 // reported.
1867 const WeakDigestTestData kVerifyMixedTestData[] = {
1868 { "weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem",
1869 "weak_digest_md2_ee.pem", EXPECT_MD2 | EXPECT_MD5 },
1870 { "weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem",
1871 "weak_digest_md5_ee.pem", EXPECT_MD2 | EXPECT_MD5 },
1872 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN)
1873 // MD4 is not supported by OS X / NSS
1874 { "weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem",
1875 "weak_digest_md2_ee.pem", EXPECT_MD2 | EXPECT_MD4 },
1876 #endif
1877 };
1878 // NSS does not support MD4 and does not enable MD2 by default, making all
1879 // permutations invalid.
1880 // OSX 10.12+ stops building the chain at the first weak digest.
1881 #if defined(USE_NSS_CERTS) || defined(OS_IOS) || defined(OS_MACOSX)
1882 #define MAYBE_VerifyMixed DISABLED_VerifyMixed
1883 #else
1884 #define MAYBE_VerifyMixed VerifyMixed
1885 #endif
1886 WRAPPED_INSTANTIATE_TEST_CASE_P(
1887 MAYBE_VerifyMixed,
1888 CertVerifyProcWeakDigestTest,
1889 testing::ValuesIn(kVerifyMixedTestData));
1890 1740
1891 // For the list of valid hostnames, see 1741 // For the list of valid hostnames, see
1892 // net/cert/data/ssl/certificates/subjectAltName_sanity_check.pem 1742 // net/cert/data/ssl/certificates/subjectAltName_sanity_check.pem
1893 static const struct CertVerifyProcNameData { 1743 static const struct CertVerifyProcNameData {
1894 const char* hostname; 1744 const char* hostname;
1895 bool valid; // Whether or not |hostname| matches a subjectAltName. 1745 bool valid; // Whether or not |hostname| matches a subjectAltName.
1896 } kVerifyNameData[] = { 1746 } kVerifyNameData[] = {
1897 { "127.0.0.1", false }, // Don't match the common name 1747 { "127.0.0.1", false }, // Don't match the common name
1898 { "127.0.0.2", true }, // Matches the iPAddress SAN (IPv4) 1748 { "127.0.0.2", true }, // Matches the iPAddress SAN (IPv4)
1899 { "FE80:0:0:0:0:0:0:1", true }, // Matches the iPAddress SAN (IPv6) 1749 { "FE80:0:0:0:0:0:0:1", true }, // Matches the iPAddress SAN (IPv6)
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1941 &verify_result); 1791 &verify_result);
1942 if (data.valid) { 1792 if (data.valid) {
1943 EXPECT_THAT(error, IsOk()); 1793 EXPECT_THAT(error, IsOk());
1944 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID); 1794 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID);
1945 } else { 1795 } else {
1946 EXPECT_THAT(error, IsError(ERR_CERT_COMMON_NAME_INVALID)); 1796 EXPECT_THAT(error, IsError(ERR_CERT_COMMON_NAME_INVALID));
1947 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID); 1797 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID);
1948 } 1798 }
1949 } 1799 }
1950 1800
1951 WRAPPED_INSTANTIATE_TEST_CASE_P( 1801 INSTANTIATE_TEST_CASE_P(VerifyName,
1952 VerifyName, 1802 CertVerifyProcNameTest,
1953 CertVerifyProcNameTest, 1803 testing::ValuesIn(kVerifyNameData));
1954 testing::ValuesIn(kVerifyNameData));
1955 1804
1956 #if defined(OS_MACOSX) && !defined(OS_IOS) 1805 #if defined(OS_MACOSX) && !defined(OS_IOS)
1957 // Test that CertVerifyProcMac reacts appropriately when Apple's certificate 1806 // Test that CertVerifyProcMac reacts appropriately when Apple's certificate
1958 // verifier rejects a certificate with a fatal error. This is a regression 1807 // verifier rejects a certificate with a fatal error. This is a regression
1959 // test for https://crbug.com/472291. 1808 // test for https://crbug.com/472291.
1960 // (Since 10.12, this causes a recoverable error instead of a fatal one.) 1809 // (Since 10.12, this causes a recoverable error instead of a fatal one.)
1961 // TODO(mattm): Try to find a different way to cause a fatal error that works 1810 // TODO(mattm): Try to find a different way to cause a fatal error that works
1962 // on 10.12. 1811 // on 10.12.
1963 TEST_F(CertVerifyProcTest, LargeKey) { 1812 TEST_F(CertVerifyProcTest, LargeKey) {
1964 // Load root_ca_cert.pem into the test root store. 1813 // Load root_ca_cert.pem into the test root store.
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
2075 int flags = 0; 1924 int flags = 0;
2076 CertVerifyResult verify_result; 1925 CertVerifyResult verify_result;
2077 int error = Verify(cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, 1926 int error = Verify(cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_,
2078 &verify_result); 1927 &verify_result);
2079 EXPECT_EQ(OK, error); 1928 EXPECT_EQ(OK, error);
2080 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); 1929 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0);
2081 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); 1930 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0);
2082 } 1931 }
2083 1932
2084 } // namespace net 1933 } // namespace net
OLDNEW
« no previous file with comments | « net/cert/cert_verify_proc.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698