| OLD | NEW |
| 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 <memory> | 5 #include <memory> |
| 6 #include <ostream> | 6 #include <ostream> |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 namespace { | 64 namespace { |
| 65 | 65 |
| 66 enum DestinationType { | 66 enum DestinationType { |
| 67 // In pooling tests with two requests for different origins to the same | 67 // In pooling tests with two requests for different origins to the same |
| 68 // destination, the destination should be | 68 // destination, the destination should be |
| 69 SAME_AS_FIRST, // the same as the first origin, | 69 SAME_AS_FIRST, // the same as the first origin, |
| 70 SAME_AS_SECOND, // the same as the second origin, or | 70 SAME_AS_SECOND, // the same as the second origin, or |
| 71 DIFFERENT, // different from both. | 71 DIFFERENT, // different from both. |
| 72 }; | 72 }; |
| 73 | 73 |
| 74 static const char kQuicAlternateProtocolHeader[] = | |
| 75 "Alternate-Protocol: 443:quic\r\n\r\n"; | |
| 76 static const char kQuicAlternateProtocolWithProbabilityHeader[] = | |
| 77 "Alternate-Protocol: 443:quic,p=.5\r\n\r\n"; | |
| 78 static const char kQuicAlternateProtocolDifferentPortHeader[] = | |
| 79 "Alternate-Protocol: 137:quic\r\n\r\n"; | |
| 80 static const char kQuicAlternativeServiceHeader[] = | 74 static const char kQuicAlternativeServiceHeader[] = |
| 81 "Alt-Svc: quic=\":443\"\r\n\r\n"; | 75 "Alt-Svc: quic=\":443\"\r\n\r\n"; |
| 82 static const char kQuicAlternativeServiceWithProbabilityHeader[] = | 76 static const char kQuicAlternativeServiceWithProbabilityHeader[] = |
| 83 "Alt-Svc: quic=\":443\";p=\".5\"\r\n\r\n"; | 77 "Alt-Svc: quic=\":443\";p=\".5\"\r\n\r\n"; |
| 84 static const char kQuicAlternativeServiceDifferentPortHeader[] = | 78 static const char kQuicAlternativeServiceDifferentPortHeader[] = |
| 85 "Alt-Svc: quic=\":137\"\r\n\r\n"; | 79 "Alt-Svc: quic=\":137\"\r\n\r\n"; |
| 86 | 80 |
| 87 const char kDefaultServerHostName[] = "mail.example.org"; | 81 const char kDefaultServerHostName[] = "mail.example.org"; |
| 88 const char kDifferentHostname[] = "different.example.com"; | 82 const char kDifferentHostname[] = "different.example.com"; |
| 89 | 83 |
| (...skipping 1488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1578 | 1572 |
| 1579 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1573 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 1580 | 1574 |
| 1581 AddHangingNonAlternateProtocolSocketData(); | 1575 AddHangingNonAlternateProtocolSocketData(); |
| 1582 CreateSession(); | 1576 CreateSession(); |
| 1583 | 1577 |
| 1584 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). | 1578 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). |
| 1585 SendRequestAndExpectHttpResponse("hello world"); | 1579 SendRequestAndExpectHttpResponse("hello world"); |
| 1586 } | 1580 } |
| 1587 | 1581 |
| 1588 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuic) { | 1582 TEST_P(QuicNetworkTransactionTest, HungAlternativeService) { |
| 1589 MockRead http_reads[] = { | |
| 1590 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), | |
| 1591 MockRead("hello world"), | |
| 1592 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | |
| 1593 MockRead(ASYNC, OK)}; | |
| 1594 | |
| 1595 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | |
| 1596 0); | |
| 1597 socket_factory_.AddSocketDataProvider(&http_data); | |
| 1598 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | |
| 1599 | |
| 1600 MockQuicData mock_quic_data; | |
| 1601 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | |
| 1602 1, kClientDataStreamId1, true, true, | |
| 1603 GetRequestHeaders("GET", "https", "/"))); | |
| 1604 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | |
| 1605 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | |
| 1606 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | |
| 1607 false, true, 0, "hello!")); | |
| 1608 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); | |
| 1609 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | |
| 1610 mock_quic_data.AddRead(ASYNC, 0); // EOF | |
| 1611 | |
| 1612 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | |
| 1613 | |
| 1614 // The non-alternate protocol job needs to hang in order to guarantee that | |
| 1615 // the alternate-protocol job will "win". | |
| 1616 AddHangingNonAlternateProtocolSocketData(); | |
| 1617 | |
| 1618 params_.parse_alternative_services = false; | |
| 1619 params_.parse_alternative_services = false; | |
| 1620 CreateSession(); | |
| 1621 | |
| 1622 SendRequestAndExpectHttpResponse("hello world"); | |
| 1623 SendRequestAndExpectQuicResponse("hello!"); | |
| 1624 } | |
| 1625 | |
| 1626 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolWithProbabilityForQuic) { | |
| 1627 MockRead http_reads[] = { | |
| 1628 MockRead("HTTP/1.1 200 OK\r\n"), | |
| 1629 MockRead(kQuicAlternateProtocolWithProbabilityHeader), | |
| 1630 MockRead("hello world"), | |
| 1631 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | |
| 1632 MockRead(ASYNC, OK)}; | |
| 1633 | |
| 1634 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | |
| 1635 0); | |
| 1636 socket_factory_.AddSocketDataProvider(&http_data); | |
| 1637 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | |
| 1638 | |
| 1639 MockQuicData mock_quic_data; | |
| 1640 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | |
| 1641 1, kClientDataStreamId1, true, true, | |
| 1642 GetRequestHeaders("GET", "https", "/"))); | |
| 1643 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | |
| 1644 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | |
| 1645 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | |
| 1646 false, true, 0, "hello!")); | |
| 1647 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); | |
| 1648 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | |
| 1649 mock_quic_data.AddRead(ASYNC, 0); // EOF | |
| 1650 | |
| 1651 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | |
| 1652 | |
| 1653 // The non-alternate protocol job needs to hang in order to guarantee that | |
| 1654 // the alternate-protocol job will "win". | |
| 1655 AddHangingNonAlternateProtocolSocketData(); | |
| 1656 | |
| 1657 params_.parse_alternative_services = false; | |
| 1658 params_.parse_alternative_services = false; | |
| 1659 CreateSession(); | |
| 1660 | |
| 1661 SendRequestAndExpectHttpResponse("hello world"); | |
| 1662 SendRequestAndExpectQuicResponse("hello!"); | |
| 1663 } | |
| 1664 | |
| 1665 TEST_P(QuicNetworkTransactionTest, AlternateProtocolDifferentPort) { | |
| 1666 MockRead http_reads[] = { | |
| 1667 MockRead("HTTP/1.1 200 OK\r\n"), | |
| 1668 MockRead(kQuicAlternateProtocolDifferentPortHeader), | |
| 1669 MockRead("hello world"), | |
| 1670 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | |
| 1671 MockRead(ASYNC, OK)}; | |
| 1672 | |
| 1673 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | |
| 1674 0); | |
| 1675 socket_factory_.AddSocketDataProvider(&http_data); | |
| 1676 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | |
| 1677 | |
| 1678 // The non-alternate protocol job needs to hang in order to guarantee that | |
| 1679 // the alternate-protocol job will "win". | |
| 1680 AddHangingNonAlternateProtocolSocketData(); | |
| 1681 | |
| 1682 params_.parse_alternative_services = false; | |
| 1683 CreateSession(); | |
| 1684 | |
| 1685 SendRequestAndExpectHttpResponse("hello world"); | |
| 1686 | |
| 1687 url::SchemeHostPort http_server("https", kDefaultServerHostName, 443); | |
| 1688 AlternativeServiceVector alternative_service_vector = | |
| 1689 http_server_properties_.GetAlternativeServices(http_server); | |
| 1690 ASSERT_EQ(1u, alternative_service_vector.size()); | |
| 1691 const AlternativeService alternative_service = alternative_service_vector[0]; | |
| 1692 EXPECT_EQ(QUIC, alternative_service_vector[0].protocol); | |
| 1693 EXPECT_EQ(kDefaultServerHostName, alternative_service_vector[0].host); | |
| 1694 EXPECT_EQ(137, alternative_service_vector[0].port); | |
| 1695 } | |
| 1696 | |
| 1697 TEST_P(QuicNetworkTransactionTest, ConfirmAlternateProtocol) { | |
| 1698 MockRead http_reads[] = { | |
| 1699 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), | |
| 1700 MockRead("hello world"), | |
| 1701 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | |
| 1702 MockRead(ASYNC, OK)}; | |
| 1703 | |
| 1704 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | |
| 1705 0); | |
| 1706 socket_factory_.AddSocketDataProvider(&http_data); | |
| 1707 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | |
| 1708 | |
| 1709 MockQuicData mock_quic_data; | |
| 1710 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | |
| 1711 1, kClientDataStreamId1, true, true, | |
| 1712 GetRequestHeaders("GET", "https", "/"))); | |
| 1713 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | |
| 1714 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | |
| 1715 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | |
| 1716 false, true, 0, "hello!")); | |
| 1717 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); | |
| 1718 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | |
| 1719 mock_quic_data.AddRead(ASYNC, 0); // EOF | |
| 1720 | |
| 1721 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | |
| 1722 | |
| 1723 // The non-alternate protocol job needs to hang in order to guarantee that | |
| 1724 // the alternate-protocol job will "win". | |
| 1725 AddHangingNonAlternateProtocolSocketData(); | |
| 1726 | |
| 1727 params_.parse_alternative_services = false; | |
| 1728 CreateSession(); | |
| 1729 | |
| 1730 AlternativeService alternative_service(QUIC, | |
| 1731 HostPortPair::FromURL(request_.url)); | |
| 1732 http_server_properties_.MarkAlternativeServiceRecentlyBroken( | |
| 1733 alternative_service); | |
| 1734 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( | |
| 1735 alternative_service)); | |
| 1736 | |
| 1737 SendRequestAndExpectHttpResponse("hello world"); | |
| 1738 SendRequestAndExpectQuicResponse("hello!"); | |
| 1739 | |
| 1740 mock_quic_data.Resume(); | |
| 1741 | |
| 1742 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken( | |
| 1743 alternative_service)); | |
| 1744 } | |
| 1745 | |
| 1746 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) { | |
| 1747 MockRead http_reads[] = { | |
| 1748 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), | |
| 1749 MockRead("hello world"), | |
| 1750 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | |
| 1751 MockRead(ASYNC, OK)}; | |
| 1752 | |
| 1753 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | |
| 1754 0); | |
| 1755 socket_factory_.AddSocketDataProvider(&http_data); | |
| 1756 | |
| 1757 MockQuicData mock_quic_data; | |
| 1758 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | |
| 1759 1, kClientDataStreamId1, true, true, | |
| 1760 GetRequestHeaders("GET", "https", "/"))); | |
| 1761 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | |
| 1762 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | |
| 1763 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | |
| 1764 false, true, 0, "hello!")); | |
| 1765 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); | |
| 1766 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | |
| 1767 mock_quic_data.AddRead(ASYNC, 0); // EOF | |
| 1768 | |
| 1769 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | |
| 1770 | |
| 1771 // The non-alternate protocol job needs to hang in order to guarantee that | |
| 1772 // the alternate-protocol job will "win". | |
| 1773 AddHangingNonAlternateProtocolSocketData(); | |
| 1774 | |
| 1775 CreateSession(); | |
| 1776 | |
| 1777 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). | |
| 1778 SendRequestAndExpectHttpResponse("hello world"); | |
| 1779 } | |
| 1780 | |
| 1781 TEST_P(QuicNetworkTransactionTest, HungAlternateProtocol) { | |
| 1782 params_.parse_alternative_services = false; | |
| 1783 crypto_client_stream_factory_.set_handshake_mode( | 1583 crypto_client_stream_factory_.set_handshake_mode( |
| 1784 MockCryptoClientStream::COLD_START); | 1584 MockCryptoClientStream::COLD_START); |
| 1785 | 1585 |
| 1786 MockWrite http_writes[] = { | 1586 MockWrite http_writes[] = { |
| 1787 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"), | 1587 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"), |
| 1788 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"), | 1588 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"), |
| 1789 MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")}; | 1589 MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")}; |
| 1790 | 1590 |
| 1791 MockRead http_reads[] = { | 1591 MockRead http_reads[] = { |
| 1792 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), | 1592 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), |
| 1793 MockRead(SYNCHRONOUS, 4, kQuicAlternateProtocolHeader), | 1593 MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader), |
| 1794 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)}; | 1594 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)}; |
| 1795 | 1595 |
| 1796 SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes, | 1596 SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes, |
| 1797 arraysize(http_writes)); | 1597 arraysize(http_writes)); |
| 1798 socket_factory_.AddSocketDataProvider(&http_data); | 1598 socket_factory_.AddSocketDataProvider(&http_data); |
| 1799 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1599 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 1800 | 1600 |
| 1801 // The QUIC transaction will not be allowed to complete. | 1601 // The QUIC transaction will not be allowed to complete. |
| 1802 MockWrite quic_writes[] = {MockWrite(SYNCHRONOUS, ERR_IO_PENDING, 1)}; | 1602 MockWrite quic_writes[] = {MockWrite(SYNCHRONOUS, ERR_IO_PENDING, 1)}; |
| 1803 MockRead quic_reads[] = { | 1603 MockRead quic_reads[] = { |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1889 proxy_service_ = ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); | 1689 proxy_service_ = ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); |
| 1890 | 1690 |
| 1891 // Since we are using a proxy, the QUIC job will not succeed. | 1691 // Since we are using a proxy, the QUIC job will not succeed. |
| 1892 MockWrite http_writes[] = { | 1692 MockWrite http_writes[] = { |
| 1893 MockWrite(SYNCHRONOUS, 0, "GET http://mail.example.org/ HTTP/1.1\r\n"), | 1693 MockWrite(SYNCHRONOUS, 0, "GET http://mail.example.org/ HTTP/1.1\r\n"), |
| 1894 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"), | 1694 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"), |
| 1895 MockWrite(SYNCHRONOUS, 2, "Proxy-Connection: keep-alive\r\n\r\n")}; | 1695 MockWrite(SYNCHRONOUS, 2, "Proxy-Connection: keep-alive\r\n\r\n")}; |
| 1896 | 1696 |
| 1897 MockRead http_reads[] = { | 1697 MockRead http_reads[] = { |
| 1898 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), | 1698 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), |
| 1899 MockRead(SYNCHRONOUS, 4, kQuicAlternateProtocolHeader), | 1699 MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader), |
| 1900 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)}; | 1700 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)}; |
| 1901 | 1701 |
| 1902 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 1702 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
| 1903 http_writes, arraysize(http_writes)); | 1703 http_writes, arraysize(http_writes)); |
| 1904 socket_factory_.AddSocketDataProvider(&http_data); | 1704 socket_factory_.AddSocketDataProvider(&http_data); |
| 1905 | 1705 |
| 1906 // In order for a new QUIC session to be established via alternate-protocol | 1706 // In order for a new QUIC session to be established via alternate-protocol |
| 1907 // without racing an HTTP connection, we need the host resolution to happen | 1707 // without racing an HTTP connection, we need the host resolution to happen |
| 1908 // synchronously. | 1708 // synchronously. |
| 1909 host_resolver_.set_synchronous_mode(true); | 1709 host_resolver_.set_synchronous_mode(true); |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2255 MockQuicData mock_quic_data; | 2055 MockQuicData mock_quic_data; |
| 2256 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); | 2056 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); |
| 2257 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2057 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2258 1, kClientDataStreamId1, true, true, | 2058 1, kClientDataStreamId1, true, true, |
| 2259 GetRequestHeaders("GET", "https", "/"))); | 2059 GetRequestHeaders("GET", "https", "/"))); |
| 2260 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); | 2060 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); |
| 2261 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2061 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2262 | 2062 |
| 2263 // When the QUIC connection fails, we will try the request again over HTTP. | 2063 // When the QUIC connection fails, we will try the request again over HTTP. |
| 2264 MockRead http_reads[] = { | 2064 MockRead http_reads[] = { |
| 2265 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), | 2065 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
| 2266 MockRead("hello world"), | 2066 MockRead("hello world"), |
| 2267 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 2067 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 2268 MockRead(ASYNC, OK)}; | 2068 MockRead(ASYNC, OK)}; |
| 2269 | 2069 |
| 2270 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2070 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
| 2271 0); | 2071 0); |
| 2272 socket_factory_.AddSocketDataProvider(&http_data); | 2072 socket_factory_.AddSocketDataProvider(&http_data); |
| 2273 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2073 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
| 2274 | 2074 |
| 2275 // In order for a new QUIC session to be established via alternate-protocol | 2075 // In order for a new QUIC session to be established via alternate-protocol |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2756 AddHangingSocketData(); | 2556 AddHangingSocketData(); |
| 2757 | 2557 |
| 2758 SendRequestAndExpectQuicResponse(origin1_); | 2558 SendRequestAndExpectQuicResponse(origin1_); |
| 2759 SendRequestAndExpectQuicResponse(origin2_); | 2559 SendRequestAndExpectQuicResponse(origin2_); |
| 2760 | 2560 |
| 2761 EXPECT_TRUE(AllDataConsumed()); | 2561 EXPECT_TRUE(AllDataConsumed()); |
| 2762 } | 2562 } |
| 2763 | 2563 |
| 2764 } // namespace test | 2564 } // namespace test |
| 2765 } // namespace net | 2565 } // namespace net |
| OLD | NEW |