| 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 <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/base64.h" | 10 #include "base/base64.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 base::TimeTicks InstantaneousReads() { | 71 base::TimeTicks InstantaneousReads() { |
| 72 return g_time_now; | 72 return g_time_now; |
| 73 } | 73 } |
| 74 | 74 |
| 75 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate { | 75 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate { |
| 76 public: | 76 public: |
| 77 MOCK_METHOD1(IsCTRequiredForHost, | 77 MOCK_METHOD1(IsCTRequiredForHost, |
| 78 CTRequirementLevel(const std::string& host)); | 78 CTRequirementLevel(const std::string& host)); |
| 79 }; | 79 }; |
| 80 | 80 |
| 81 class TestServerPushDelegate : public ServerPushDelegate { |
| 82 public: |
| 83 explicit TestServerPushDelegate() {} |
| 84 |
| 85 void OnPush(std::unique_ptr<ServerPushHelper> push_helper) override { |
| 86 push_helpers[push_helper->GetURL()] = std::move(push_helper); |
| 87 } |
| 88 |
| 89 bool CancelPush(GURL url) { |
| 90 auto itr = push_helpers.find(url); |
| 91 if (itr == push_helpers.end()) |
| 92 return false; |
| 93 |
| 94 itr->second->Cancel(); |
| 95 push_helpers.erase(itr); |
| 96 return true; |
| 97 } |
| 98 |
| 99 private: |
| 100 std::map<GURL, std::unique_ptr<ServerPushHelper>> push_helpers; |
| 101 }; |
| 102 |
| 81 } // namespace | 103 } // namespace |
| 82 | 104 |
| 83 class SpdySessionTest : public PlatformTest { | 105 class SpdySessionTest : public PlatformTest { |
| 84 public: | 106 public: |
| 85 // Functions used with RunResumeAfterUnstallTest(). | 107 // Functions used with RunResumeAfterUnstallTest(). |
| 86 | 108 |
| 87 void StallSessionOnly(SpdyStream* stream) { StallSessionSend(); } | 109 void StallSessionOnly(SpdyStream* stream) { StallSessionSend(); } |
| 88 | 110 |
| 89 void StallStreamOnly(SpdyStream* stream) { StallStreamSend(stream); } | 111 void StallStreamOnly(SpdyStream* stream) { StallStreamSend(stream); } |
| 90 | 112 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 | 223 |
| 202 // Original socket limits. Some tests set these. Safest to always restore | 224 // Original socket limits. Some tests set these. Safest to always restore |
| 203 // them once each test has been run. | 225 // them once each test has been run. |
| 204 int old_max_group_sockets_; | 226 int old_max_group_sockets_; |
| 205 int old_max_pool_sockets_; | 227 int old_max_pool_sockets_; |
| 206 | 228 |
| 207 SpdyTestUtil spdy_util_; | 229 SpdyTestUtil spdy_util_; |
| 208 SpdySessionDependencies session_deps_; | 230 SpdySessionDependencies session_deps_; |
| 209 std::unique_ptr<HttpNetworkSession> http_session_; | 231 std::unique_ptr<HttpNetworkSession> http_session_; |
| 210 base::WeakPtr<SpdySession> session_; | 232 base::WeakPtr<SpdySession> session_; |
| 233 TestServerPushDelegate test_push_delegate_; |
| 211 SpdySessionPool* spdy_session_pool_; | 234 SpdySessionPool* spdy_session_pool_; |
| 212 const GURL test_url_; | 235 const GURL test_url_; |
| 213 const url::SchemeHostPort test_server_; | 236 const url::SchemeHostPort test_server_; |
| 214 SpdySessionKey key_; | 237 SpdySessionKey key_; |
| 215 SSLSocketDataProvider ssl_; | 238 SSLSocketDataProvider ssl_; |
| 216 BoundTestNetLog log_; | 239 BoundTestNetLog log_; |
| 217 }; | 240 }; |
| 218 | 241 |
| 219 // Try to create a SPDY session that will fail during | 242 // Try to create a SPDY session that will fail during |
| 220 // initialization. Nothing should blow up. | 243 // initialization. Nothing should blow up. |
| (...skipping 1049 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1270 // Cancel the third stream and run the message loop. Verify that the second | 1293 // Cancel the third stream and run the message loop. Verify that the second |
| 1271 // stream creation now completes. | 1294 // stream creation now completes. |
| 1272 stream3->Cancel(); | 1295 stream3->Cancel(); |
| 1273 base::RunLoop().RunUntilIdle(); | 1296 base::RunLoop().RunUntilIdle(); |
| 1274 | 1297 |
| 1275 EXPECT_EQ(1u, session_->num_created_streams()); | 1298 EXPECT_EQ(1u, session_->num_created_streams()); |
| 1276 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(MEDIUM)); | 1299 EXPECT_EQ(0u, session_->pending_create_stream_queue_size(MEDIUM)); |
| 1277 EXPECT_THAT(callback2.WaitForResult(), IsOk()); | 1300 EXPECT_THAT(callback2.WaitForResult(), IsOk()); |
| 1278 } | 1301 } |
| 1279 | 1302 |
| 1303 TEST_F(SpdySessionTest, CancelPushAfterSessionGoesAway) { |
| 1304 base::HistogramTester histogram_tester; |
| 1305 session_deps_.host_resolver->set_synchronous_mode(true); |
| 1306 session_deps_.time_func = TheNearFuture; |
| 1307 |
| 1308 SpdySerializedFrame req( |
| 1309 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
| 1310 SpdySerializedFrame rst( |
| 1311 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
| 1312 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; |
| 1313 |
| 1314 SpdySerializedFrame push_a(spdy_util_.ConstructSpdyPush( |
| 1315 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); |
| 1316 SpdySerializedFrame push_a_body(spdy_util_.ConstructSpdyDataFrame(2, false)); |
| 1317 // In ascii "0" < "a". We use it to verify that we properly handle std::map |
| 1318 // iterators inside. See http://crbug.com/443490 |
| 1319 SpdySerializedFrame push_b(spdy_util_.ConstructSpdyPush( |
| 1320 nullptr, 0, 4, 1, "https://www.example.org/0.dat")); |
| 1321 MockRead reads[] = { |
| 1322 CreateMockRead(push_a, 1), CreateMockRead(push_a_body, 2), |
| 1323 MockRead(ASYNC, ERR_IO_PENDING, 3), CreateMockRead(push_b, 4), |
| 1324 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF |
| 1325 }; |
| 1326 |
| 1327 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 1328 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1329 |
| 1330 AddSSLSocketData(); |
| 1331 |
| 1332 CreateNetworkSession(); |
| 1333 CreateSecureSpdySession(); |
| 1334 session_->set_push_delegate(&test_push_delegate_); |
| 1335 |
| 1336 // Process the principal request, and the first push stream request & body. |
| 1337 base::WeakPtr<SpdyStream> spdy_stream = |
| 1338 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, |
| 1339 test_url_, MEDIUM, NetLogWithSource()); |
| 1340 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 1341 spdy_stream->SetDelegate(&delegate); |
| 1342 |
| 1343 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| 1344 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| 1345 |
| 1346 base::RunLoop().RunUntilIdle(); |
| 1347 |
| 1348 // Verify that there is one unclaimed push stream. |
| 1349 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); |
| 1350 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( |
| 1351 GURL("https://www.example.org/a.dat"))); |
| 1352 |
| 1353 // Unclaimed push body consumed bytes from the session window. |
| 1354 EXPECT_EQ(kDefaultInitialWindowSize - kUploadDataSize, |
| 1355 session_->session_recv_window_size_); |
| 1356 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); |
| 1357 |
| 1358 // Shift time to expire the push stream. Read the second HEADERS, |
| 1359 // and verify a RST_STREAM was written. |
| 1360 g_time_delta = base::TimeDelta::FromSeconds(301); |
| 1361 data.Resume(); |
| 1362 base::RunLoop().RunUntilIdle(); |
| 1363 |
| 1364 // Verify that the second pushed stream evicted the first pushed stream. |
| 1365 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); |
| 1366 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( |
| 1367 GURL("https://www.example.org/0.dat"))); |
| 1368 |
| 1369 // Verify that the session window reclaimed the evicted stream body. |
| 1370 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); |
| 1371 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); |
| 1372 EXPECT_TRUE(session_); |
| 1373 |
| 1374 // Read and process EOF. |
| 1375 data.Resume(); |
| 1376 base::RunLoop().RunUntilIdle(); |
| 1377 |
| 1378 // Cancel the first push after session goes away. Verify the test doesn't |
| 1379 // crash. |
| 1380 EXPECT_FALSE(session_); |
| 1381 EXPECT_TRUE( |
| 1382 test_push_delegate_.CancelPush(GURL("https://www.example.org/a.dat"))); |
| 1383 |
| 1384 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedBytes", 6, 1); |
| 1385 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedAndUnclaimedBytes", |
| 1386 6, 1); |
| 1387 } |
| 1388 |
| 1280 TEST_F(SpdySessionTest, CancelPushAfterExpired) { | 1389 TEST_F(SpdySessionTest, CancelPushAfterExpired) { |
| 1281 base::HistogramTester histogram_tester; | 1390 base::HistogramTester histogram_tester; |
| 1282 session_deps_.host_resolver->set_synchronous_mode(true); | 1391 session_deps_.host_resolver->set_synchronous_mode(true); |
| 1283 session_deps_.time_func = TheNearFuture; | 1392 session_deps_.time_func = TheNearFuture; |
| 1284 | 1393 |
| 1285 SpdySerializedFrame req( | 1394 SpdySerializedFrame req( |
| 1286 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); | 1395 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); |
| 1287 SpdySerializedFrame rst( | 1396 SpdySerializedFrame rst( |
| 1288 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 1397 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
| 1289 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; | 1398 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 5)}; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1301 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1410 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF |
| 1302 }; | 1411 }; |
| 1303 | 1412 |
| 1304 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1413 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 1305 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1414 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1306 | 1415 |
| 1307 AddSSLSocketData(); | 1416 AddSSLSocketData(); |
| 1308 | 1417 |
| 1309 CreateNetworkSession(); | 1418 CreateNetworkSession(); |
| 1310 CreateSecureSpdySession(); | 1419 CreateSecureSpdySession(); |
| 1420 session_->set_push_delegate(&test_push_delegate_); |
| 1311 | 1421 |
| 1312 // Process the principal request, and the first push stream request & body. | 1422 // Process the principal request, and the first push stream request & body. |
| 1313 base::WeakPtr<SpdyStream> spdy_stream = | 1423 base::WeakPtr<SpdyStream> spdy_stream = |
| 1314 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, | 1424 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, |
| 1315 test_url_, MEDIUM, NetLogWithSource()); | 1425 test_url_, MEDIUM, NetLogWithSource()); |
| 1316 test::StreamDelegateDoNothing delegate(spdy_stream); | 1426 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 1317 spdy_stream->SetDelegate(&delegate); | 1427 spdy_stream->SetDelegate(&delegate); |
| 1318 | 1428 |
| 1319 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 1429 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| 1320 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 1430 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1336 g_time_delta = base::TimeDelta::FromSeconds(301); | 1446 g_time_delta = base::TimeDelta::FromSeconds(301); |
| 1337 data.Resume(); | 1447 data.Resume(); |
| 1338 base::RunLoop().RunUntilIdle(); | 1448 base::RunLoop().RunUntilIdle(); |
| 1339 | 1449 |
| 1340 // Verify that the second pushed stream evicted the first pushed stream. | 1450 // Verify that the second pushed stream evicted the first pushed stream. |
| 1341 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); | 1451 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); |
| 1342 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( | 1452 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( |
| 1343 GURL("https://www.example.org/0.dat"))); | 1453 GURL("https://www.example.org/0.dat"))); |
| 1344 | 1454 |
| 1345 // Cancel the first push after its expiration. | 1455 // Cancel the first push after its expiration. |
| 1346 session_->CancelPush(GURL("https://www.example.org/a.dat")); | 1456 EXPECT_TRUE( |
| 1457 test_push_delegate_.CancelPush(GURL("https://www.example.org/a.dat"))); |
| 1347 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); | 1458 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); |
| 1348 EXPECT_TRUE(session_); | 1459 EXPECT_TRUE(session_); |
| 1349 | 1460 |
| 1350 // Verify that the session window reclaimed the evicted stream body. | 1461 // Verify that the session window reclaimed the evicted stream body. |
| 1351 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); | 1462 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); |
| 1352 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); | 1463 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); |
| 1353 EXPECT_TRUE(session_); | 1464 EXPECT_TRUE(session_); |
| 1354 | 1465 |
| 1355 // Read and process EOF. | 1466 // Read and process EOF. |
| 1356 data.Resume(); | 1467 data.Resume(); |
| 1357 base::RunLoop().RunUntilIdle(); | 1468 base::RunLoop().RunUntilIdle(); |
| 1358 EXPECT_FALSE(session_); | 1469 EXPECT_FALSE(session_); |
| 1470 |
| 1359 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedBytes", 6, 1); | 1471 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedBytes", 6, 1); |
| 1360 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedAndUnclaimedBytes", | 1472 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedAndUnclaimedBytes", |
| 1361 6, 1); | 1473 6, 1); |
| 1362 } | 1474 } |
| 1363 | 1475 |
| 1364 TEST_F(SpdySessionTest, CancelPushBeforeClaimed) { | 1476 TEST_F(SpdySessionTest, CancelPushBeforeClaimed) { |
| 1365 base::HistogramTester histogram_tester; | 1477 base::HistogramTester histogram_tester; |
| 1366 session_deps_.host_resolver->set_synchronous_mode(true); | 1478 session_deps_.host_resolver->set_synchronous_mode(true); |
| 1367 session_deps_.time_func = TheNearFuture; | 1479 session_deps_.time_func = TheNearFuture; |
| 1368 | 1480 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1385 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF | 1497 MockRead(ASYNC, ERR_IO_PENDING, 6), MockRead(ASYNC, 0, 7) // EOF |
| 1386 }; | 1498 }; |
| 1387 | 1499 |
| 1388 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1500 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 1389 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1501 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1390 | 1502 |
| 1391 AddSSLSocketData(); | 1503 AddSSLSocketData(); |
| 1392 | 1504 |
| 1393 CreateNetworkSession(); | 1505 CreateNetworkSession(); |
| 1394 CreateSecureSpdySession(); | 1506 CreateSecureSpdySession(); |
| 1507 session_->set_push_delegate(&test_push_delegate_); |
| 1395 | 1508 |
| 1396 // Process the principal request, and the first push stream request & body. | 1509 // Process the principal request, and the first push stream request & body. |
| 1397 base::WeakPtr<SpdyStream> spdy_stream = | 1510 base::WeakPtr<SpdyStream> spdy_stream = |
| 1398 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, | 1511 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, |
| 1399 test_url_, MEDIUM, NetLogWithSource()); | 1512 test_url_, MEDIUM, NetLogWithSource()); |
| 1400 test::StreamDelegateDoNothing delegate(spdy_stream); | 1513 test::StreamDelegateDoNothing delegate(spdy_stream); |
| 1401 spdy_stream->SetDelegate(&delegate); | 1514 spdy_stream->SetDelegate(&delegate); |
| 1402 | 1515 |
| 1403 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 1516 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| 1404 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 1517 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1425 GURL pushed_url("https://www.example.org/0.dat"); | 1538 GURL pushed_url("https://www.example.org/0.dat"); |
| 1426 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); | 1539 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); |
| 1427 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url(pushed_url)); | 1540 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url(pushed_url)); |
| 1428 | 1541 |
| 1429 // Verify that the session window reclaimed the evicted stream body. | 1542 // Verify that the session window reclaimed the evicted stream body. |
| 1430 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); | 1543 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_); |
| 1431 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); | 1544 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); |
| 1432 | 1545 |
| 1433 EXPECT_TRUE(session_); | 1546 EXPECT_TRUE(session_); |
| 1434 // Cancel the push before it's claimed. | 1547 // Cancel the push before it's claimed. |
| 1435 session_->CancelPush(pushed_url); | 1548 EXPECT_TRUE(test_push_delegate_.CancelPush(pushed_url)); |
| 1436 EXPECT_EQ(0u, session_->num_unclaimed_pushed_streams()); | 1549 EXPECT_EQ(0u, session_->num_unclaimed_pushed_streams()); |
| 1437 EXPECT_EQ(0u, session_->count_unclaimed_pushed_streams_for_url(pushed_url)); | 1550 EXPECT_EQ(0u, session_->count_unclaimed_pushed_streams_for_url(pushed_url)); |
| 1438 | 1551 |
| 1439 // Read and process EOF. | 1552 // Read and process EOF. |
| 1440 data.Resume(); | 1553 data.Resume(); |
| 1441 base::RunLoop().RunUntilIdle(); | 1554 base::RunLoop().RunUntilIdle(); |
| 1442 EXPECT_FALSE(session_); | 1555 EXPECT_FALSE(session_); |
| 1443 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedBytes", 6, 1); | 1556 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedBytes", 6, 1); |
| 1444 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedAndUnclaimedBytes", | 1557 histogram_tester.ExpectBucketCount("Net.SpdySession.PushedAndUnclaimedBytes", |
| 1445 6, 1); | 1558 6, 1); |
| (...skipping 4372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5818 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), | 5931 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), |
| 5819 "spdy_pooling.pem"); | 5932 "spdy_pooling.pem"); |
| 5820 ssl_info.is_issued_by_known_root = true; | 5933 ssl_info.is_issued_by_known_root = true; |
| 5821 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); | 5934 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); |
| 5822 | 5935 |
| 5823 EXPECT_TRUE(SpdySession::CanPool( | 5936 EXPECT_TRUE(SpdySession::CanPool( |
| 5824 &tss, ssl_info, "www.example.org", "mail.example.org")); | 5937 &tss, ssl_info, "www.example.org", "mail.example.org")); |
| 5825 } | 5938 } |
| 5826 | 5939 |
| 5827 } // namespace net | 5940 } // namespace net |
| OLD | NEW |