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 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1280 EXPECT_THAT(callback2.WaitForResult(), IsOk()); | 1280 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
1281 } | 1281 } |
1282 | 1282 |
1283 TEST_F(SpdySessionTest, CancelPushAfterSessionGoesAway) { | 1283 TEST_F(SpdySessionTest, CancelPushAfterSessionGoesAway) { |
1284 base::HistogramTester histogram_tester; | 1284 base::HistogramTester histogram_tester; |
1285 session_deps_.host_resolver->set_synchronous_mode(true); | 1285 session_deps_.host_resolver->set_synchronous_mode(true); |
1286 session_deps_.time_func = TheNearFuture; | 1286 session_deps_.time_func = TheNearFuture; |
1287 | 1287 |
1288 SpdySerializedFrame req( | 1288 SpdySerializedFrame req( |
1289 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1289 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1290 SpdySerializedFrame rst( | 1290 SpdySerializedFrame priority_a( |
| 1291 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1292 SpdySerializedFrame priority_b( |
| 1293 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1294 SpdySerializedFrame rst_a( |
1291 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1295 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1292 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1296 MockWrite writes[] = { |
| 1297 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1298 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1299 }; |
1293 | 1300 |
1294 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1301 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1295 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1302 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1296 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1303 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1297 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1304 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1298 // iterators inside. See http://crbug.com/443490 | 1305 // iterators inside. See http://crbug.com/443490 |
1299 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1306 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1300 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1307 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1301 MockRead reads[] = { | 1308 MockRead reads[] = { |
1302 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), | 1309 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3), |
1303 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 1310 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
1304 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1311 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF |
1305 }; | 1312 }; |
1306 | 1313 |
1307 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1314 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1308 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1315 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1309 | 1316 |
1310 AddSSLSocketData(); | 1317 AddSSLSocketData(); |
1311 | 1318 |
1312 CreateNetworkSession(); | 1319 CreateNetworkSession(); |
1313 CreateSecureSpdySession(); | 1320 CreateSecureSpdySession(); |
1314 session_->set_push_delegate(&test_push_delegate_); | 1321 session_->set_push_delegate(&test_push_delegate_); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1366 6, 1); | 1373 6, 1); |
1367 } | 1374 } |
1368 | 1375 |
1369 TEST_F(SpdySessionTest, CancelPushAfterExpired) { | 1376 TEST_F(SpdySessionTest, CancelPushAfterExpired) { |
1370 base::HistogramTester histogram_tester; | 1377 base::HistogramTester histogram_tester; |
1371 session_deps_.host_resolver->set_synchronous_mode(true); | 1378 session_deps_.host_resolver->set_synchronous_mode(true); |
1372 session_deps_.time_func = TheNearFuture; | 1379 session_deps_.time_func = TheNearFuture; |
1373 | 1380 |
1374 SpdySerializedFrame req( | 1381 SpdySerializedFrame req( |
1375 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1382 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1376 SpdySerializedFrame rst( | 1383 SpdySerializedFrame priority_a( |
| 1384 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1385 SpdySerializedFrame priority_b( |
| 1386 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1387 SpdySerializedFrame rst_a( |
1377 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1388 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1378 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1389 MockWrite writes[] = { |
| 1390 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1391 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1392 }; |
1379 | 1393 |
1380 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1394 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1381 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1395 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1382 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1396 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1383 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1397 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1384 // iterators inside. See http://crbug.com/443490 | 1398 // iterators inside. See http://crbug.com/443490 |
1385 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1399 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1386 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1400 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1387 MockRead reads[] = { | 1401 MockRead reads[] = { |
1388 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), | 1402 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3), |
1389 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 1403 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
1390 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1404 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF |
1391 }; | 1405 }; |
1392 | 1406 |
1393 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1407 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1394 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1408 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1395 | 1409 |
1396 AddSSLSocketData(); | 1410 AddSSLSocketData(); |
1397 | 1411 |
1398 CreateNetworkSession(); | 1412 CreateNetworkSession(); |
1399 CreateSecureSpdySession(); | 1413 CreateSecureSpdySession(); |
1400 session_->set_push_delegate(&test_push_delegate_); | 1414 session_->set_push_delegate(&test_push_delegate_); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1453 6, 1); | 1467 6, 1); |
1454 } | 1468 } |
1455 | 1469 |
1456 TEST_F(SpdySessionTest, CancelPushBeforeClaimed) { | 1470 TEST_F(SpdySessionTest, CancelPushBeforeClaimed) { |
1457 base::HistogramTester histogram_tester; | 1471 base::HistogramTester histogram_tester; |
1458 session_deps_.host_resolver->set_synchronous_mode(true); | 1472 session_deps_.host_resolver->set_synchronous_mode(true); |
1459 session_deps_.time_func = TheNearFuture; | 1473 session_deps_.time_func = TheNearFuture; |
1460 | 1474 |
1461 SpdySerializedFrame req( | 1475 SpdySerializedFrame req( |
1462 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1476 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1463 SpdySerializedFrame rst( | 1477 SpdySerializedFrame priority_a( |
| 1478 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1479 SpdySerializedFrame priority_b( |
| 1480 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1481 SpdySerializedFrame rst_a( |
1464 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1482 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1465 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1483 MockWrite writes[] = { |
| 1484 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1485 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1486 }; |
1466 | 1487 |
1467 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1488 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1468 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1489 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1469 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1490 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1470 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1491 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1471 // iterators inside. See http://crbug.com/443490 | 1492 // iterators inside. See http://crbug.com/443490 |
1472 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1493 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1473 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1494 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1474 MockRead reads[] = { | 1495 MockRead reads[] = { |
1475 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), | 1496 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3), |
1476 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 1497 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
1477 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1498 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF |
1478 }; | 1499 }; |
1479 | 1500 |
1480 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1501 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1481 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1502 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1482 | 1503 |
1483 AddSSLSocketData(); | 1504 AddSSLSocketData(); |
1484 | 1505 |
1485 CreateNetworkSession(); | 1506 CreateNetworkSession(); |
1486 CreateSecureSpdySession(); | 1507 CreateSecureSpdySession(); |
1487 session_->set_push_delegate(&test_push_delegate_); | 1508 session_->set_push_delegate(&test_push_delegate_); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1538 6, 1); | 1559 6, 1); |
1539 } | 1560 } |
1540 | 1561 |
1541 TEST_F(SpdySessionTest, DeleteExpiredPushStreams) { | 1562 TEST_F(SpdySessionTest, DeleteExpiredPushStreams) { |
1542 base::HistogramTester histogram_tester; | 1563 base::HistogramTester histogram_tester; |
1543 session_deps_.host_resolver->set_synchronous_mode(true); | 1564 session_deps_.host_resolver->set_synchronous_mode(true); |
1544 session_deps_.time_func = TheNearFuture; | 1565 session_deps_.time_func = TheNearFuture; |
1545 | 1566 |
1546 SpdySerializedFrame req( | 1567 SpdySerializedFrame req( |
1547 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1568 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1548 SpdySerializedFrame rst( | 1569 SpdySerializedFrame priority_a( |
| 1570 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1571 SpdySerializedFrame priority_b( |
| 1572 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1573 SpdySerializedFrame rst_a( |
1549 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1574 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1550 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1575 MockWrite writes[] = { |
| 1576 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1577 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1578 }; |
1551 | 1579 |
1552 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1580 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1553 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1581 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1554 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1582 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1555 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1583 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1556 // iterators inside. See http://crbug.com/443490 | 1584 // iterators inside. See http://crbug.com/443490 |
1557 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1585 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1558 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1586 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1559 MockRead reads[] = { | 1587 MockRead reads[] = { |
1560 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), | 1588 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 3), |
1561 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 1589 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
1562 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1590 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9) // EOF |
1563 }; | 1591 }; |
1564 | 1592 |
1565 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1593 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1566 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1594 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1567 | 1595 |
1568 AddSSLSocketData(); | 1596 AddSSLSocketData(); |
1569 | 1597 |
1570 CreateNetworkSession(); | 1598 CreateNetworkSession(); |
1571 CreateSecureSpdySession(); | 1599 CreateSecureSpdySession(); |
1572 | 1600 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1617 6, 1); | 1645 6, 1); |
1618 } | 1646 } |
1619 | 1647 |
1620 TEST_F(SpdySessionTest, MetricsCollectionOnPushStreams) { | 1648 TEST_F(SpdySessionTest, MetricsCollectionOnPushStreams) { |
1621 base::HistogramTester histogram_tester; | 1649 base::HistogramTester histogram_tester; |
1622 session_deps_.host_resolver->set_synchronous_mode(true); | 1650 session_deps_.host_resolver->set_synchronous_mode(true); |
1623 session_deps_.time_func = TheNearFuture; | 1651 session_deps_.time_func = TheNearFuture; |
1624 | 1652 |
1625 SpdySerializedFrame req( | 1653 SpdySerializedFrame req( |
1626 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1654 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
1627 SpdySerializedFrame rst( | 1655 SpdySerializedFrame priority_a( |
| 1656 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1657 SpdySerializedFrame priority_b( |
| 1658 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 1659 SpdySerializedFrame priority_c( |
| 1660 spdy_util_.ConstructSpdyPriority(6, 4, IDLE, true)); |
| 1661 SpdySerializedFrame rst_a( |
1628 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1662 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
1629 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1663 MockWrite writes[] = { |
| 1664 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 1665 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_a, 7), |
| 1666 CreateMockWrite(priority_c, 10), |
| 1667 }; |
1630 | 1668 |
1631 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 1669 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
1632 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 1670 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
1633 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); | 1671 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
1634 // In ascii "0" < "a". We use it to verify that we properly handle std::map | 1672 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
1635 // iterators inside. See http://crbug.com/443490 | 1673 // iterators inside. See http://crbug.com/443490 |
1636 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 1674 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
1637 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); | 1675 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
1638 SpdySerializedFrame push_c(spdy_util_.ConstructSpdyPush( | 1676 SpdySerializedFrame push_c(spdy_util_.ConstructSpdyPush( |
1639 nullptr, 0, 6, 1, "https://www.example.org/1.dat")); | 1677 nullptr, 0, 6, 1, "https://www.example.org/1.dat")); |
1640 SpdySerializedFrame push_c_body(spdy_util_.ConstructSpdyDataFrame(6, false)); | 1678 SpdySerializedFrame push_c_body(spdy_util_.ConstructSpdyDataFrame(6, false)); |
1641 | 1679 |
1642 MockRead reads[] = { | 1680 MockRead reads[] = { |
1643 CreateMockRead(push_a, 1), | 1681 CreateMockRead(push_a, 1), |
1644 CreateMockRead(push_a_body, 2), | 1682 CreateMockRead(push_a_body, 3), |
1645 MockRead(ASYNC, ERR_IO_PENDING, 3), | 1683 MockRead(ASYNC, ERR_IO_PENDING, 4), |
1646 CreateMockRead(push_b, 4), | 1684 CreateMockRead(push_b, 5), |
1647 MockRead(ASYNC, ERR_IO_PENDING, 6), | 1685 MockRead(ASYNC, ERR_IO_PENDING, 8), |
1648 CreateMockRead(push_c, 7), | 1686 CreateMockRead(push_c, 9), |
1649 CreateMockRead(push_c_body, 8), | 1687 CreateMockRead(push_c_body, 11), |
1650 MockRead(ASYNC, ERR_IO_PENDING, 9), | 1688 MockRead(ASYNC, ERR_IO_PENDING, 12), |
1651 MockRead(ASYNC, 0, 10) // EOF | 1689 MockRead(ASYNC, 0, 13) // EOF |
1652 }; | 1690 }; |
1653 | 1691 |
1654 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1692 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
1655 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1693 session_deps_.socket_factory->AddSocketDataProvider(&data); |
1656 | 1694 |
1657 AddSSLSocketData(); | 1695 AddSSLSocketData(); |
1658 | 1696 |
1659 CreateNetworkSession(); | 1697 CreateNetworkSession(); |
1660 CreateSecureSpdySession(); | 1698 CreateSecureSpdySession(); |
1661 | 1699 |
(...skipping 3219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4881 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = | 4919 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = |
4882 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2); | 4920 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2); |
4883 SpdySerializedFrame settings_frame( | 4921 SpdySerializedFrame settings_frame( |
4884 spdy_util_.ConstructSpdySettings(new_settings)); | 4922 spdy_util_.ConstructSpdySettings(new_settings)); |
4885 SpdySerializedFrame pushed(spdy_util_.ConstructSpdyPush( | 4923 SpdySerializedFrame pushed(spdy_util_.ConstructSpdyPush( |
4886 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 4924 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
4887 MockRead reads[] = { | 4925 MockRead reads[] = { |
4888 CreateMockRead(settings_frame, 0), | 4926 CreateMockRead(settings_frame, 0), |
4889 MockRead(ASYNC, ERR_IO_PENDING, 3), | 4927 MockRead(ASYNC, ERR_IO_PENDING, 3), |
4890 CreateMockRead(pushed, 4), | 4928 CreateMockRead(pushed, 4), |
4891 MockRead(ASYNC, ERR_IO_PENDING, 5), | 4929 MockRead(ASYNC, ERR_IO_PENDING, 6), |
4892 MockRead(ASYNC, 0, 6), | 4930 MockRead(ASYNC, 0, 7), |
4893 }; | 4931 }; |
4894 | 4932 |
4895 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck()); | 4933 SpdySerializedFrame settings_ack(spdy_util_.ConstructSpdySettingsAck()); |
4896 SpdySerializedFrame req( | 4934 SpdySerializedFrame req( |
4897 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4935 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 4936 SpdySerializedFrame priority( |
| 4937 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
4898 MockWrite writes[] = { | 4938 MockWrite writes[] = { |
4899 CreateMockWrite(settings_ack, 1), CreateMockWrite(req, 2), | 4939 CreateMockWrite(settings_ack, 1), CreateMockWrite(req, 2), |
| 4940 CreateMockWrite(priority, 5), |
4900 }; | 4941 }; |
4901 | 4942 |
4902 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 4943 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
4903 session_deps_.socket_factory->AddSocketDataProvider(&data); | 4944 session_deps_.socket_factory->AddSocketDataProvider(&data); |
4904 | 4945 |
4905 AddSSLSocketData(); | 4946 AddSSLSocketData(); |
4906 | 4947 |
4907 CreateNetworkSession(); | 4948 CreateNetworkSession(); |
4908 CreateSecureSpdySession(); | 4949 CreateSecureSpdySession(); |
4909 | 4950 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4961 EXPECT_FALSE(session_); | 5002 EXPECT_FALSE(session_); |
4962 } | 5003 } |
4963 | 5004 |
4964 TEST_F(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) { | 5005 TEST_F(SpdySessionTest, RejectPushedStreamExceedingConcurrencyLimit) { |
4965 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 5006 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
4966 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 5007 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
4967 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( | 5008 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
4968 nullptr, 0, 4, 1, "https://www.example.org/b.dat")); | 5009 nullptr, 0, 4, 1, "https://www.example.org/b.dat")); |
4969 MockRead reads[] = { | 5010 MockRead reads[] = { |
4970 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), | 5011 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), |
4971 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 5012 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
4972 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7), | 5013 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9), |
4973 }; | 5014 }; |
4974 | 5015 |
4975 SpdySerializedFrame req( | 5016 SpdySerializedFrame req( |
4976 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 5017 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
4977 SpdySerializedFrame rst( | 5018 SpdySerializedFrame priority_a( |
| 5019 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 5020 SpdySerializedFrame priority_b( |
| 5021 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 5022 SpdySerializedFrame rst_b( |
4978 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); | 5023 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); |
4979 MockWrite writes[] = { | 5024 MockWrite writes[] = { |
4980 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), | 5025 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 3), |
| 5026 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_b, 7), |
4981 }; | 5027 }; |
4982 | 5028 |
4983 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5029 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
4984 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5030 session_deps_.socket_factory->AddSocketDataProvider(&data); |
4985 | 5031 |
4986 AddSSLSocketData(); | 5032 AddSSLSocketData(); |
4987 | 5033 |
4988 CreateNetworkSession(); | 5034 CreateNetworkSession(); |
4989 CreateSecureSpdySession(); | 5035 CreateSecureSpdySession(); |
4990 session_->set_max_concurrent_pushed_streams(1); | 5036 session_->set_max_concurrent_pushed_streams(1); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5047 // cross_origin_push contains HTTP resource for an origin different from the | 5093 // cross_origin_push contains HTTP resource for an origin different from the |
5048 // origin of kDefaultUrl, and should be accepted. | 5094 // origin of kDefaultUrl, and should be accepted. |
5049 SpdySerializedFrame cross_origin_push(spdy_util_.ConstructSpdyPush( | 5095 SpdySerializedFrame cross_origin_push(spdy_util_.ConstructSpdyPush( |
5050 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin)); | 5096 nullptr, 0, 2, 1, kHttpURLFromAnotherOrigin)); |
5051 // cross_origin_https_push contains HTTPS resource, and should be refused. | 5097 // cross_origin_https_push contains HTTPS resource, and should be refused. |
5052 SpdySerializedFrame cross_origin_https_push(spdy_util_.ConstructSpdyPush( | 5098 SpdySerializedFrame cross_origin_https_push(spdy_util_.ConstructSpdyPush( |
5053 nullptr, 0, 4, 1, kHttpsURLFromAnotherOrigin)); | 5099 nullptr, 0, 4, 1, kHttpsURLFromAnotherOrigin)); |
5054 MockRead reads[] = { | 5100 MockRead reads[] = { |
5055 MockRead(ASYNC, ERR_IO_PENDING, 1), | 5101 MockRead(ASYNC, ERR_IO_PENDING, 1), |
5056 CreateMockRead(cross_origin_push, 2), | 5102 CreateMockRead(cross_origin_push, 2), |
5057 MockRead(ASYNC, ERR_IO_PENDING, 3), | 5103 MockRead(ASYNC, ERR_IO_PENDING, 4), |
5058 CreateMockRead(cross_origin_https_push, 4), | 5104 CreateMockRead(cross_origin_https_push, 5), |
5059 MockRead(ASYNC, ERR_IO_PENDING, 6), | 5105 MockRead(ASYNC, ERR_IO_PENDING, 7), |
5060 MockRead(ASYNC, 0, 7), | 5106 MockRead(ASYNC, 0, 8), |
5061 }; | 5107 }; |
5062 | 5108 |
5063 SpdySerializedFrame req( | 5109 SpdySerializedFrame req( |
5064 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 5110 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
5065 SpdySerializedFrame rst( | 5111 SpdySerializedFrame priority_http( |
| 5112 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 5113 SpdySerializedFrame rst_https( |
5066 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); | 5114 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); |
5067 MockWrite writes[] = { | 5115 MockWrite writes[] = { |
5068 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), | 5116 CreateMockWrite(req, 0), CreateMockWrite(priority_http, 3), |
| 5117 CreateMockWrite(rst_https, 6), |
5069 }; | 5118 }; |
5070 | 5119 |
5071 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5120 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
5072 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5121 session_deps_.socket_factory->AddSocketDataProvider(&data); |
5073 | 5122 |
5074 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); | 5123 std::unique_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate()); |
5075 proxy_delegate->set_trusted_spdy_proxy( | 5124 proxy_delegate->set_trusted_spdy_proxy( |
5076 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS, | 5125 net::ProxyServer(net::ProxyServer::SCHEME_HTTPS, |
5077 HostPortPair(GURL(kDefaultUrl).host(), 443))); | 5126 HostPortPair(GURL(kDefaultUrl).host(), 443))); |
5078 session_deps_.proxy_delegate = std::move(proxy_delegate); | 5127 session_deps_.proxy_delegate = std::move(proxy_delegate); |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5196 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( | 5245 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
5197 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); | 5246 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
5198 SpdyHeaderBlock push_headers; | 5247 SpdyHeaderBlock push_headers; |
5199 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat", | 5248 spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat", |
5200 &push_headers); | 5249 &push_headers); |
5201 SpdySerializedFrame push_b( | 5250 SpdySerializedFrame push_b( |
5202 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); | 5251 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); |
5203 SpdySerializedFrame headers_b( | 5252 SpdySerializedFrame headers_b( |
5204 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); | 5253 spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); |
5205 MockRead reads[] = { | 5254 MockRead reads[] = { |
5206 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), | 5255 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_a, 2), |
5207 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), | 5256 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(push_b, 5), |
5208 MockRead(ASYNC, ERR_IO_PENDING, 5), CreateMockRead(headers_b, 6), | 5257 MockRead(ASYNC, ERR_IO_PENDING, 7), CreateMockRead(headers_b, 8), |
5209 MockRead(ASYNC, ERR_IO_PENDING, 8), MockRead(ASYNC, 0, 9), | 5258 MockRead(ASYNC, ERR_IO_PENDING, 10), MockRead(ASYNC, 0, 11), |
5210 }; | 5259 }; |
5211 | 5260 |
5212 SpdySerializedFrame req( | 5261 SpdySerializedFrame req( |
5213 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 5262 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
5214 SpdySerializedFrame rst( | 5263 SpdySerializedFrame priority_a( |
| 5264 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 5265 SpdySerializedFrame priority_b( |
| 5266 spdy_util_.ConstructSpdyPriority(4, 2, IDLE, true)); |
| 5267 SpdySerializedFrame rst_b( |
5215 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); | 5268 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_REFUSED_STREAM)); |
5216 MockWrite writes[] = { | 5269 MockWrite writes[] = { |
5217 CreateMockWrite(req, 0), CreateMockWrite(rst, 7), | 5270 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 3), |
| 5271 CreateMockWrite(priority_b, 6), CreateMockWrite(rst_b, 9), |
5218 }; | 5272 }; |
5219 | 5273 |
5220 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5274 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
5221 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5275 session_deps_.socket_factory->AddSocketDataProvider(&data); |
5222 | 5276 |
5223 AddSSLSocketData(); | 5277 AddSSLSocketData(); |
5224 | 5278 |
5225 CreateNetworkSession(); | 5279 CreateNetworkSession(); |
5226 CreateSecureSpdySession(); | 5280 CreateSecureSpdySession(); |
5227 session_->set_max_concurrent_pushed_streams(1); | 5281 session_->set_max_concurrent_pushed_streams(1); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5285 TEST_F(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { | 5339 TEST_F(SpdySessionTest, CancelReservedStreamOnHeadersReceived) { |
5286 const char kPushedUrl[] = "https://www.example.org/a.dat"; | 5340 const char kPushedUrl[] = "https://www.example.org/a.dat"; |
5287 SpdyHeaderBlock push_headers; | 5341 SpdyHeaderBlock push_headers; |
5288 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); | 5342 spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); |
5289 SpdySerializedFrame push_promise( | 5343 SpdySerializedFrame push_promise( |
5290 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); | 5344 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); |
5291 SpdySerializedFrame headers_frame( | 5345 SpdySerializedFrame headers_frame( |
5292 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); | 5346 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); |
5293 MockRead reads[] = { | 5347 MockRead reads[] = { |
5294 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_promise, 2), | 5348 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(push_promise, 2), |
5295 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(headers_frame, 4), | 5349 MockRead(ASYNC, ERR_IO_PENDING, 4), CreateMockRead(headers_frame, 5), |
5296 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7), | 5350 MockRead(ASYNC, ERR_IO_PENDING, 7), MockRead(ASYNC, 0, 8), |
5297 }; | 5351 }; |
5298 | 5352 |
5299 SpdySerializedFrame req( | 5353 SpdySerializedFrame req( |
5300 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 5354 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 5355 SpdySerializedFrame priority( |
| 5356 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
5301 SpdySerializedFrame rst( | 5357 SpdySerializedFrame rst( |
5302 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL)); | 5358 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL)); |
5303 MockWrite writes[] = { | 5359 MockWrite writes[] = { |
5304 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), | 5360 CreateMockWrite(req, 0), CreateMockWrite(priority, 3), |
| 5361 CreateMockWrite(rst, 6), |
5305 }; | 5362 }; |
5306 | 5363 |
5307 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5364 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
5308 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5365 session_deps_.socket_factory->AddSocketDataProvider(&data); |
5309 | 5366 |
5310 AddSSLSocketData(); | 5367 AddSSLSocketData(); |
5311 | 5368 |
5312 CreateNetworkSession(); | 5369 CreateNetworkSession(); |
5313 CreateSecureSpdySession(); | 5370 CreateSecureSpdySession(); |
5314 | 5371 |
(...skipping 24 matching lines...) Expand all Loading... |
5339 | 5396 |
5340 // Run until pushed stream is created. | 5397 // Run until pushed stream is created. |
5341 data.Resume(); | 5398 data.Resume(); |
5342 base::RunLoop().RunUntilIdle(); | 5399 base::RunLoop().RunUntilIdle(); |
5343 EXPECT_EQ(2u, session_->num_active_streams()); | 5400 EXPECT_EQ(2u, session_->num_active_streams()); |
5344 EXPECT_EQ(0u, session_->num_created_streams()); | 5401 EXPECT_EQ(0u, session_->num_created_streams()); |
5345 EXPECT_EQ(1u, session_->num_pushed_streams()); | 5402 EXPECT_EQ(1u, session_->num_pushed_streams()); |
5346 EXPECT_EQ(0u, session_->num_active_pushed_streams()); | 5403 EXPECT_EQ(0u, session_->num_active_pushed_streams()); |
5347 | 5404 |
5348 base::WeakPtr<SpdyStream> pushed_stream; | 5405 base::WeakPtr<SpdyStream> pushed_stream; |
5349 int rv = session_->GetPushStream(GURL(kPushedUrl), &pushed_stream, | 5406 int rv = session_->GetPushStream(GURL(kPushedUrl), IDLE, &pushed_stream, |
5350 NetLogWithSource()); | 5407 NetLogWithSource()); |
5351 ASSERT_THAT(rv, IsOk()); | 5408 ASSERT_THAT(rv, IsOk()); |
5352 ASSERT_TRUE(pushed_stream); | 5409 ASSERT_TRUE(pushed_stream); |
5353 test::StreamDelegateCloseOnHeaders delegate2(pushed_stream); | 5410 test::StreamDelegateCloseOnHeaders delegate2(pushed_stream); |
5354 pushed_stream->SetDelegate(&delegate2); | 5411 pushed_stream->SetDelegate(&delegate2); |
5355 | 5412 |
5356 // Receive headers for pushed stream. Delegate will cancel the stream, ensure | 5413 // Receive headers for pushed stream. Delegate will cancel the stream, ensure |
5357 // that all our counters are in consistent state. | 5414 // that all our counters are in consistent state. |
5358 data.Resume(); | 5415 data.Resume(); |
5359 base::RunLoop().RunUntilIdle(); | 5416 base::RunLoop().RunUntilIdle(); |
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5882 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), | 5939 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), |
5883 "spdy_pooling.pem"); | 5940 "spdy_pooling.pem"); |
5884 ssl_info.is_issued_by_known_root = true; | 5941 ssl_info.is_issued_by_known_root = true; |
5885 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); | 5942 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); |
5886 | 5943 |
5887 EXPECT_TRUE(SpdySession::CanPool( | 5944 EXPECT_TRUE(SpdySession::CanPool( |
5888 &tss, ssl_info, "www.example.org", "mail.example.org")); | 5945 &tss, ssl_info, "www.example.org", "mail.example.org")); |
5889 } | 5946 } |
5890 | 5947 |
5891 } // namespace net | 5948 } // namespace net |
OLD | NEW |