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 "net/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <memory> | 8 #include <memory> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1288 EXPECT_THAT(callback2.WaitForResult(), IsOk()); | 1288 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
1289 } | 1289 } |
1290 | 1290 |
1291 TEST_F(SpdySessionTest, CancelPushAfterSessionGoesAway) { | 1291 TEST_F(SpdySessionTest, CancelPushAfterSessionGoesAway) { |
1292 base::HistogramTester histogram_tester; | 1292 base::HistogramTester histogram_tester; |
1293 session_deps_.host_resolver->set_synchronous_mode(true); | 1293 session_deps_.host_resolver->set_synchronous_mode(true); |
1294 session_deps_.time_func = TheNearFuture; | 1294 session_deps_.time_func = TheNearFuture; |
1295 | 1295 |
1296 SpdySerializedFrame req( | 1296 SpdySerializedFrame req( |
1297 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1297 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1298 SpdySerializedFrame rst( | 1298 SpdySerializedFrame priority_a( |
| 1299 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1300 SpdySerializedFrame priority_b( |
| 1301 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1302 SpdySerializedFrame rst_a( |
1299 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1303 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1300 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1304 MockWrite writes[] = { |
| 1305 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1306 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1307 }; |
1301 | 1308 |
1302 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1309 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1303 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1310 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1304 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1311 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1305 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1312 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1306 // iterators inside. See http://crbug.com/443490 | 1313 // iterators inside. See http://crbug.com/443490 |
1307 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1314 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1308 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1315 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1309 MockRead reads[] = { | 1316 MockRead reads[] = { |
1310 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), | 1317 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3), |
1311 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 1318 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
1312 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1319 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF |
1313 }; | 1320 }; |
1314 | 1321 |
1315 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1322 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1316 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1323 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1317 | 1324 |
1318 AddSSLSocketData(); | 1325 AddSSLSocketData(); |
1319 | 1326 |
1320 CreateNetworkSession(); | 1327 CreateNetworkSession(); |
1321 CreateSecureSpdySession(); | 1328 CreateSecureSpdySession(); |
1322 | 1329 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1373 6, 1); | 1380 6, 1); |
1374 } | 1381 } |
1375 | 1382 |
1376 TEST_F(SpdySessionTest, CancelPushAfterExpired) { | 1383 TEST_F(SpdySessionTest, CancelPushAfterExpired) { |
1377 base::HistogramTester histogram_tester; | 1384 base::HistogramTester histogram_tester; |
1378 session_deps_.host_resolver->set_synchronous_mode(true); | 1385 session_deps_.host_resolver->set_synchronous_mode(true); |
1379 session_deps_.time_func = TheNearFuture; | 1386 session_deps_.time_func = TheNearFuture; |
1380 | 1387 |
1381 SpdySerializedFrame req( | 1388 SpdySerializedFrame req( |
1382 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1389 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1383 SpdySerializedFrame rst( | 1390 SpdySerializedFrame priority_a( |
| 1391 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1392 SpdySerializedFrame priority_b( |
| 1393 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1394 SpdySerializedFrame rst_a( |
1384 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1395 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1385 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1396 MockWrite writes[] = { |
| 1397 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1398 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1399 }; |
1386 | 1400 |
1387 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1401 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1388 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1402 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1389 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1403 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1390 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1404 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1391 // iterators inside. See http://crbug.com/443490 | 1405 // iterators inside. See http://crbug.com/443490 |
1392 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1406 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1393 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1407 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1394 MockRead reads[] = { | 1408 MockRead reads[] = { |
1395 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), | 1409 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3), |
1396 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 1410 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
1397 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1411 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF |
1398 }; | 1412 }; |
1399 | 1413 |
1400 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1414 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1401 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1415 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1402 | 1416 |
1403 AddSSLSocketData(); | 1417 AddSSLSocketData(); |
1404 | 1418 |
1405 CreateNetworkSession(); | 1419 CreateNetworkSession(); |
1406 CreateSecureSpdySession(); | 1420 CreateSecureSpdySession(); |
1407 | 1421 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1459 6, 1); | 1473 6, 1); |
1460 } | 1474 } |
1461 | 1475 |
1462 TEST_F(SpdySessionTest, CancelPushBeforeClaimed) { | 1476 TEST_F(SpdySessionTest, CancelPushBeforeClaimed) { |
1463 base::HistogramTester histogram_tester; | 1477 base::HistogramTester histogram_tester; |
1464 session_deps_.host_resolver->set_synchronous_mode(true); | 1478 session_deps_.host_resolver->set_synchronous_mode(true); |
1465 session_deps_.time_func = TheNearFuture; | 1479 session_deps_.time_func = TheNearFuture; |
1466 | 1480 |
1467 SpdySerializedFrame req( | 1481 SpdySerializedFrame req( |
1468 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1482 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1469 SpdySerializedFrame rst( | 1483 SpdySerializedFrame priority_a( |
| 1484 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1485 SpdySerializedFrame priority_b( |
| 1486 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1487 SpdySerializedFrame rst_a( |
1470 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1488 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1471 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1489 MockWrite writes[] = { |
| 1490 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1491 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1492 }; |
1472 | 1493 |
1473 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1494 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1474 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1495 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1475 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1496 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1476 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1497 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1477 // iterators inside. See http://crbug.com/443490 | 1498 // iterators inside. See http://crbug.com/443490 |
1478 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1499 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1479 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1500 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1480 MockRead reads[] = { | 1501 MockRead reads[] = { |
1481 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), | 1502 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3), |
1482 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 1503 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
1483 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1504 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF |
1484 }; | 1505 }; |
1485 | 1506 |
1486 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1507 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1487 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1508 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1488 | 1509 |
1489 AddSSLSocketData(); | 1510 AddSSLSocketData(); |
1490 | 1511 |
1491 CreateNetworkSession(); | 1512 CreateNetworkSession(); |
1492 CreateSecureSpdySession(); | 1513 CreateSecureSpdySession(); |
1493 | 1514 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1543 6, 1); | 1564 6, 1); |
1544 } | 1565 } |
1545 | 1566 |
1546 TEST_F(SpdySessionTest, DeleteExpiredPushStreams) { | 1567 TEST_F(SpdySessionTest, DeleteExpiredPushStreams) { |
1547 base::HistogramTester histogram_tester; | 1568 base::HistogramTester histogram_tester; |
1548 session_deps_.host_resolver->set_synchronous_mode(true); | 1569 session_deps_.host_resolver->set_synchronous_mode(true); |
1549 session_deps_.time_func = TheNearFuture; | 1570 session_deps_.time_func = TheNearFuture; |
1550 | 1571 |
1551 SpdySerializedFrame req( | 1572 SpdySerializedFrame req( |
1552 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1573 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1553 SpdySerializedFrame rst( | 1574 SpdySerializedFrame priority_a( |
| 1575 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1576 SpdySerializedFrame priority_b( |
| 1577 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1578 SpdySerializedFrame rst_a( |
1554 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1579 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1555 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1580 MockWrite writes[] = { |
| 1581 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1582 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1583 }; |
1556 | 1584 |
1557 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1585 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1558 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1586 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1559 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1587 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1560 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1588 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1561 // iterators inside. See http://crbug.com/443490 | 1589 // iterators inside. See http://crbug.com/443490 |
1562 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1590 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1563 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1591 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1564 MockRead reads[] = { | 1592 MockRead reads[] = { |
1565 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), | 1593 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3), |
1566 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 1594 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
1567 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1595 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF |
1568 }; | 1596 }; |
1569 | 1597 |
1570 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1598 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1571 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1599 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1572 | 1600 |
1573 AddSSLSocketData(); | 1601 AddSSLSocketData(); |
1574 | 1602 |
1575 CreateNetworkSession(); | 1603 CreateNetworkSession(); |
1576 CreateSecureSpdySession(); | 1604 CreateSecureSpdySession(); |
1577 | 1605 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1622 6, 1); | 1650 6, 1); |
1623 } | 1651 } |
1624 | 1652 |
1625 TEST_F(SpdySessionTest, MetricsCollectionOnPushStreams) { | 1653 TEST_F(SpdySessionTest, MetricsCollectionOnPushStreams) { |
1626 base::HistogramTester histogram_tester; | 1654 base::HistogramTester histogram_tester; |
1627 session_deps_.host_resolver->set_synchronous_mode(true); | 1655 session_deps_.host_resolver->set_synchronous_mode(true); |
1628 session_deps_.time_func = TheNearFuture; | 1656 session_deps_.time_func = TheNearFuture; |
1629 | 1657 |
1630 SpdySerializedFrame req( | 1658 SpdySerializedFrame req( |
1631 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1659 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1632 SpdySerializedFrame rst( | 1660 SpdySerializedFrame priority_a( |
| 1661 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1662 SpdySerializedFrame priority_b( |
| 1663 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1664 SpdySerializedFrame priority_c( |
| 1665 spdy_util_.ConstructSpdyPriority(6, 4, IDLE, true)); |
| 1666 SpdySerializedFrame rst_a( |
1633 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1667 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1634 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1668 MockWrite writes[] = { |
| 1669 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1670 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1671 CreateMockWrite(priority_c, 10), |
| 1672 }; |
1635 | 1673 |
1636 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1674 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1637 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1675 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1638 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1676 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1639 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1677 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1640 // iterators inside. See http://crbug.com/443490 | 1678 // iterators inside. See http://crbug.com/443490 |
1641 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1679 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1642 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1680 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1643 SpdySerializedFrame push_c(spdy_util_.ConstructSpdyPush( | 1681 SpdySerializedFrame push_c(spdy_util_.ConstructSpdyPush( |
1644 nullptr, 0, 6, 1, "https://www.example.org/1.dat")); | 1682 nullptr, 0, 6, 1, "https://www.example.org/1.dat")); |
1645 SpdySerializedFrame push_c_body(spdy_util_.ConstructSpdyDataFrame(6, false)); | 1683 SpdySerializedFrame push_c_body(spdy_util_.ConstructSpdyDataFrame(6, false)); |
1646 | 1684 |
1647 MockRead reads[] = { | 1685 MockRead reads[] = { |
1648 CreateMockRead(push_a, 1), | 1686 CreateMockRead(push_a, 1), |
1649 CreateMockRead(push_a_body, 2), | 1687 CreateMockRead(push_a_body, 3), |
1650 MockRead(ASYNC, ERR_IO_PENDING, 3), | 1688 MockRead(ASYNC, ERR_IO_PENDING, 4), |
1651 CreateMockRead(push_b, 4), | 1689 CreateMockRead(push_b, 5), |
1652 MockRead(ASYNC, ERR_IO_PENDING, 6), | 1690 MockRead(ASYNC, ERR_IO_PENDING, 8), |
1653 CreateMockRead(push_c, 7), | 1691 CreateMockRead(push_c, 9), |
1654 CreateMockRead(push_c_body, 8), | 1692 CreateMockRead(push_c_body, 11), |
1655 MockRead(ASYNC, ERR_IO_PENDING, 9), | 1693 MockRead(ASYNC, ERR_IO_PENDING, 12), |
1656 MockRead(ASYNC, 0, 10) // EOF | 1694 MockRead(ASYNC, 0, 13) // EOF |
1657 }; | 1695 }; |
1658 | 1696 |
1659 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1697 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1660 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1698 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1661 | 1699 |
1662 AddSSLSocketData(); | 1700 AddSSLSocketData(); |
1663 | 1701 |
1664 CreateNetworkSession(); | 1702 CreateNetworkSession(); |
1665 CreateSecureSpdySession(); | 1703 CreateSecureSpdySession(); |
1666 | 1704 |
(...skipping 3186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4853 SettingsMap new_settings; | 4891 SettingsMap new_settings; |
4854 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 2; | 4892 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 2; |
4855 SpdySerializedFrame settings_frame( | 4893 SpdySerializedFrame settings_frame( |
4856 spdy_util_.ConstructSpdySettings(new_settings)); | 4894 spdy_util_.ConstructSpdySettings(new_settings)); |
4857 SpdySerializedFrame pushed(spdy_util_.ConstructSpdyPush( | 4895 SpdySerializedFrame pushed(spdy_util_.ConstructSpdyPush( |
4858 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 4896 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
4859 MockRead reads[] = { | 4897 MockRead reads[] = { |
4860 CreateMockRead(settings_frame, 0), | 4898 CreateMockRead(settings_frame, 0), |
4861 MockRead(ASYNC, ERR_IO_PENDING, 3), | 4899 MockRead(ASYNC, ERR_IO_PENDING, 3), |
4862 CreateMockRead(pushed, 4), | 4900 CreateMockRead(pushed, 4), |
4863 MockRead(ASYNC, ERR_IO_PENDING, 5), | 4901 MockRead(ASYNC, ERR_IO_PENDING, 6), |
4864 MockRead(ASYNC, 0, 6), | 4902 MockRead(ASYNC, 0, 7), |
4865 }; | 4903 }; |
4866 | 4904 |
4867 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck()); | 4905 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck()); |
4868 SpdySerializedFrame req( | 4906 SpdySerializedFrame req( |
4869 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4907 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 4908 SpdySerializedFrame priority( |
| 4909 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
4870 MockWrite writes[] = { | 4910 MockWrite writes[] = { |
4871 CreateMockWrite(settings_ack, 1), CreateMockWrite(req, 2), | 4911 CreateMockWrite(settings_ack, 1), CreateMockWrite(req, 2), |
| 4912 CreateMockWrite(priority, 5), |
4872 }; | 4913 }; |
4873 | 4914 |
4874 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 4915 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
4875 session_deps_.socket_factory->AddSocketDataProvider(&data); | 4916 session_deps_.socket_factory->AddSocketDataProvider(&data); |
4876 | 4917 |
4877 AddSSLSocketData(); | 4918 AddSSLSocketData(); |
4878 | 4919 |
4879 CreateNetworkSession(); | 4920 CreateNetworkSession(); |
4880 CreateSecureSpdySession(); | 4921 CreateSecureSpdySession(); |
4881 | 4922 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4933 EXPECT_FALSE(session_); | 4974 EXPECT_FALSE(session_); |
4934 } | 4975 } |
4935 | 4976 |
4936 TEST_F(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) { | 4977 TEST_F(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) { |
4937 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 4978 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
4938 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 4979 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
4939 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 4980 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
4940 nullptr, 0, 4, 1, "https://www.example.org/b.dat")); | 4981 nullptr, 0, 4, 1, "https://www.example.org/b.dat")); |
4941 MockRead reads[] = { | 4982 MockRead reads[] = { |
4942 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), | 4983 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), |
4943 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 4984 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
4944 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7), | 4985 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9), |
4945 }; | 4986 }; |
4946 | 4987 |
4947 SpdySerializedFrame req( | 4988 SpdySerializedFrame req( |
4948 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4989 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
4949 SpdySerializedFrame rst( | 4990 SpdySerializedFrame priority_a( |
| 4991 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 4992 SpdySerializedFrame priority_b( |
| 4993 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 4994 SpdySerializedFrame rst_b( |
4950 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); | 4995 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); |
4951 MockWrite writes[] = { | 4996 MockWrite writes[] = { |
4952 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), | 4997 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 3), |
| 4998 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_b, 7), |
4953 }; | 4999 }; |
4954 | 5000 |
4955 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5001 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
4956 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5002 session_deps_.socket_factory->AddSocketDataProvider(&data); |
4957 | 5003 |
4958 AddSSLSocketData(); | 5004 AddSSLSocketData(); |
4959 | 5005 |
4960 CreateNetworkSession(); | 5006 CreateNetworkSession(); |
4961 CreateSecureSpdySession(); | 5007 CreateSecureSpdySession(); |
4962 session_->set_max_concurrent_pushed_streams(1); | 5008 session_->set_max_concurrent_pushed_streams(1); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5019 // cross_origin_push contains HTTP resource for an origin different from the | 5065 // cross_origin_push contains HTTP resource for an origin different from the |
5020 // origin of kDefaultUrl, and should be accepted. | 5066 // origin of kDefaultUrl, and should be accepted. |
5021 SpdySerializedFrame cross_origin_push(spdy_util_.ConstructSpdyPush( | 5067 SpdySerializedFrame cross_origin_push(spdy_util_.ConstructSpdyPush( |
5022 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin)); | 5068 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin)); |
5023 // cross_origin_https_push contains HTTPS resource, and should be refused. | 5069 // cross_origin_https_push contains HTTPS resource, and should be refused. |
5024 SpdySerializedFrame cross_origin_https_push(spdy_util_.ConstructSpdyPush( | 5070 SpdySerializedFrame cross_origin_https_push(spdy_util_.ConstructSpdyPush( |
5025 nullptr, 0, 4, 1, kHttpsURLFromAnotherOrigin)); | 5071 nullptr, 0, 4, 1, kHttpsURLFromAnotherOrigin)); |
5026 MockRead reads[] = { | 5072 MockRead reads[] = { |
5027 MockRead(ASYNC, ERR_IO_PENDING, 1), | 5073 MockRead(ASYNC, ERR_IO_PENDING, 1), |
5028 CreateMockRead(cross_origin_push, 2), | 5074 CreateMockRead(cross_origin_push, 2), |
5029 MockRead(ASYNC, ERR_IO_PENDING, 3), | 5075 MockRead(ASYNC, ERR_IO_PENDING, 4), |
5030 CreateMockRead(cross_origin_https_push, 4), | 5076 CreateMockRead(cross_origin_https_push, 5), |
5031 MockRead(ASYNC, ERR_IO_PENDING, 6), | 5077 MockRead(ASYNC, ERR_IO_PENDING, 7), |
5032 MockRead(ASYNC, 0, 7), | 5078 MockRead(ASYNC, 0, 8), |
5033 }; | 5079 }; |
5034 | 5080 |
5035 SpdySerializedFrame req( | 5081 SpdySerializedFrame req( |
5036 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 5082 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
5037 SpdySerializedFrame rst( | 5083 SpdySerializedFrame priority_http( |
| 5084 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 5085 SpdySerializedFrame rst_https( |
5038 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); | 5086 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); |
5039 MockWrite writes[] = { | 5087 MockWrite writes[] = { |
5040 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), | 5088 CreateMockWrite(req, 0), CreateMockWrite(priority_http, 3), |
| 5089 CreateMockWrite(rst_https, 6), |
5041 }; | 5090 }; |
5042 | 5091 |
5043 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5092 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
5044 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5093 session_deps_.socket_factory->AddSocketDataProvider(&data); |
5045 | 5094 |
5046 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 5095 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
5047 proxy_delegate->set_trusted_spdy_proxy( | 5096 proxy_delegate->set_trusted_spdy_proxy( |
5048 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS, | 5097 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS, |
5049 HostPortPair(GURL(kDefaultUrl).host(), 443))); | 5098 HostPortPair(GURL(kDefaultUrl).host(), 443))); |
5050 session_deps_.proxy_delegate = std::move(proxy_delegate); | 5099 session_deps_.proxy_delegate = std::move(proxy_delegate); |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5168 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 5217 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
5169 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 5218 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
5170 SpdyHeaderBlock push_headers; | 5219 SpdyHeaderBlock push_headers; |
5171 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat", | 5220 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat", |
5172 &push_headers); | 5221 &push_headers); |
5173 SpdySerializedFrame push_b( | 5222 SpdySerializedFrame push_b( |
5174 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); | 5223 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); |
5175 SpdySerializedFrame headers_b( | 5224 SpdySerializedFrame headers_b( |
5176 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); | 5225 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); |
5177 MockRead reads[] = { | 5226 MockRead reads[] = { |
5178 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), | 5227 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), |
5179 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 5228 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
5180 MockRead(ASYNC, ERR_IO_PENDING, 5), CreateMockRead(headers_b, 6), | 5229 MockRead(ASYNC, ERR_IO_PENDING, 7), CreateMockRead(headers_b, 8), |
5181 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9), | 5230 MockRead(ASYNC, ERR_IO_PENDING, 10), MockRead(ASYNC, 0, 11), |
5182 }; | 5231 }; |
5183 | 5232 |
5184 SpdySerializedFrame req( | 5233 SpdySerializedFrame req( |
5185 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 5234 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
5186 SpdySerializedFrame rst( | 5235 SpdySerializedFrame priority_a( |
| 5236 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 5237 SpdySerializedFrame priority_b( |
| 5238 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 5239 SpdySerializedFrame rst_b( |
5187 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); | 5240 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); |
5188 MockWrite writes[] = { | 5241 MockWrite writes[] = { |
5189 CreateMockWrite(req, 0), CreateMockWrite(rst, 7), | 5242 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 3), |
| 5243 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_b, 9), |
5190 }; | 5244 }; |
5191 | 5245 |
5192 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5246 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
5193 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5247 session_deps_.socket_factory->AddSocketDataProvider(&data); |
5194 | 5248 |
5195 AddSSLSocketData(); | 5249 AddSSLSocketData(); |
5196 | 5250 |
5197 CreateNetworkSession(); | 5251 CreateNetworkSession(); |
5198 CreateSecureSpdySession(); | 5252 CreateSecureSpdySession(); |
5199 session_->set_max_concurrent_pushed_streams(1); | 5253 session_->set_max_concurrent_pushed_streams(1); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5257 TEST_F(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { | 5311 TEST_F(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { |
5258 const char kPushedUrl[] = "https://www.example.org/a.dat"; | 5312 const char kPushedUrl[] = "https://www.example.org/a.dat"; |
5259 SpdyHeaderBlock push_headers; | 5313 SpdyHeaderBlock push_headers; |
5260 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); | 5314 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); |
5261 SpdySerializedFrame push_promise( | 5315 SpdySerializedFrame push_promise( |
5262 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); | 5316 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); |
5263 SpdySerializedFrame headers_frame( | 5317 SpdySerializedFrame headers_frame( |
5264 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); | 5318 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); |
5265 MockRead reads[] = { | 5319 MockRead reads[] = { |
5266 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_promise, 2), | 5320 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_promise, 2), |
5267 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(headers_frame, 4), | 5321 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(headers_frame, 5), |
5268 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7), | 5322 MockRead(ASYNC, ERR_IO_PENDING, 7), MockRead(ASYNC, 0, 8), |
5269 }; | 5323 }; |
5270 | 5324 |
5271 SpdySerializedFrame req( | 5325 SpdySerializedFrame req( |
5272 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 5326 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 5327 SpdySerializedFrame priority( |
| 5328 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
5273 SpdySerializedFrame rst( | 5329 SpdySerializedFrame rst( |
5274 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL)); | 5330 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL)); |
5275 MockWrite writes[] = { | 5331 MockWrite writes[] = { |
5276 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), | 5332 CreateMockWrite(req, 0), CreateMockWrite(priority, 3), |
| 5333 CreateMockWrite(rst, 6), |
5277 }; | 5334 }; |
5278 | 5335 |
5279 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5336 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
5280 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5337 session_deps_.socket_factory->AddSocketDataProvider(&data); |
5281 | 5338 |
5282 AddSSLSocketData(); | 5339 AddSSLSocketData(); |
5283 | 5340 |
5284 CreateNetworkSession(); | 5341 CreateNetworkSession(); |
5285 CreateSecureSpdySession(); | 5342 CreateSecureSpdySession(); |
5286 | 5343 |
(...skipping 24 matching lines...) Expand all Loading... |
5311 | 5368 |
5312 // Run until pushed stream is created. | 5369 // Run until pushed stream is created. |
5313 data.Resume(); | 5370 data.Resume(); |
5314 base::RunLoop().RunUntilIdle(); | 5371 base::RunLoop().RunUntilIdle(); |
5315 EXPECT_EQ(2u, session_->num_active_streams()); | 5372 EXPECT_EQ(2u, session_->num_active_streams()); |
5316 EXPECT_EQ(0u, session_->num_created_streams()); | 5373 EXPECT_EQ(0u, session_->num_created_streams()); |
5317 EXPECT_EQ(1u, session_->num_pushed_streams()); | 5374 EXPECT_EQ(1u, session_->num_pushed_streams()); |
5318 EXPECT_EQ(0u, session_->num_active_pushed_streams()); | 5375 EXPECT_EQ(0u, session_->num_active_pushed_streams()); |
5319 | 5376 |
5320 base::WeakPtr<SpdyStream> pushed_stream; | 5377 base::WeakPtr<SpdyStream> pushed_stream; |
5321 int rv = session_->GetPushStream(GURL(kPushedUrl), &pushed_stream, | 5378 int rv = session_->GetPushStream(GURL(kPushedUrl), IDLE, &pushed_stream, |
5322 NetLogWithSource()); | 5379 NetLogWithSource()); |
5323 ASSERT_THAT(rv, IsOk()); | 5380 ASSERT_THAT(rv, IsOk()); |
5324 ASSERT_TRUE(pushed_stream); | 5381 ASSERT_TRUE(pushed_stream); |
5325 test::StreamDelegateCloseOnHeaders delegate2(pushed_stream); | 5382 test::StreamDelegateCloseOnHeaders delegate2(pushed_stream); |
5326 pushed_stream->SetDelegate(&delegate2); | 5383 pushed_stream->SetDelegate(&delegate2); |
5327 | 5384 |
5328 // Receive headers for pushed stream. Delegate will cancel the stream, ensure | 5385 // Receive headers for pushed stream. Delegate will cancel the stream, ensure |
5329 // that all our counters are in consistent state. | 5386 // that all our counters are in consistent state. |
5330 data.Resume(); | 5387 data.Resume(); |
5331 base::RunLoop().RunUntilIdle(); | 5388 base::RunLoop().RunUntilIdle(); |
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5940 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), | 5997 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), |
5941 "spdy_pooling.pem"); | 5998 "spdy_pooling.pem"); |
5942 ssl_info.is_issued_by_known_root = true; | 5999 ssl_info.is_issued_by_known_root = true; |
5943 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); | 6000 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); |
5944 | 6001 |
5945 EXPECT_TRUE(SpdySession::CanPool( | 6002 EXPECT_TRUE(SpdySession::CanPool( |
5946 &tss, ssl_info, "www.example.org", "mail.example.org")); | 6003 &tss, ssl_info, "www.example.org", "mail.example.org")); |
5947 } | 6004 } |
5948 | 6005 |
5949 } // namespace net | 6006 } // namespace net |
OLD | NEW |