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 "build/build_config.h" | 5 #include "build/build_config.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <windows.h> | 8 #include <windows.h> |
9 #include <shlobj.h> | 9 #include <shlobj.h> |
10 #endif | 10 #endif |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 using base::Time; | 78 using base::Time; |
79 | 79 |
80 namespace net { | 80 namespace net { |
81 | 81 |
82 namespace { | 82 namespace { |
83 | 83 |
84 const base::string16 kChrome(ASCIIToUTF16("chrome")); | 84 const base::string16 kChrome(ASCIIToUTF16("chrome")); |
85 const base::string16 kSecret(ASCIIToUTF16("secret")); | 85 const base::string16 kSecret(ASCIIToUTF16("secret")); |
86 const base::string16 kUser(ASCIIToUTF16("user")); | 86 const base::string16 kUser(ASCIIToUTF16("user")); |
87 | 87 |
88 // Tests load timing information in the case a fresh connection was used. | 88 // Tests load timing information in the case a fresh connection was used, with |
89 // These tests use the TestServer, which doesn't support keep-alive sockets, | 89 // no proxy. |
90 // so there are no tests here that reuse sockets. | |
91 void TestLoadTimingNotReused(const net::LoadTimingInfo& load_timing_info, | 90 void TestLoadTimingNotReused(const net::LoadTimingInfo& load_timing_info, |
92 int connect_timing_flags) { | 91 int connect_timing_flags) { |
93 EXPECT_FALSE(load_timing_info.socket_reused); | 92 EXPECT_FALSE(load_timing_info.socket_reused); |
94 EXPECT_NE(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 93 EXPECT_NE(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
95 | 94 |
96 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); | 95 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
97 EXPECT_FALSE(load_timing_info.request_start.is_null()); | 96 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
98 | 97 |
99 EXPECT_LE(load_timing_info.request_start, | 98 EXPECT_LE(load_timing_info.request_start, |
100 load_timing_info.connect_timing.connect_start); | 99 load_timing_info.connect_timing.connect_start); |
101 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, | 100 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, |
102 connect_timing_flags); | 101 connect_timing_flags); |
103 EXPECT_LE(load_timing_info.connect_timing.connect_end, | 102 EXPECT_LE(load_timing_info.connect_timing.connect_end, |
104 load_timing_info.send_start); | 103 load_timing_info.send_start); |
105 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); | 104 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); |
106 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); | 105 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); |
107 | 106 |
108 // Not set by these tests. | |
109 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); | 107 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); |
110 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); | 108 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); |
111 } | 109 } |
112 | 110 |
| 111 // Same as above, but with proxy times. |
| 112 void TestLoadTimingNotReusedWithProxy( |
| 113 const net::LoadTimingInfo& load_timing_info, |
| 114 int connect_timing_flags) { |
| 115 EXPECT_FALSE(load_timing_info.socket_reused); |
| 116 EXPECT_NE(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 117 |
| 118 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
| 119 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
| 120 |
| 121 EXPECT_LE(load_timing_info.request_start, |
| 122 load_timing_info.proxy_resolve_start); |
| 123 EXPECT_LE(load_timing_info.proxy_resolve_start, |
| 124 load_timing_info.proxy_resolve_end); |
| 125 EXPECT_LE(load_timing_info.proxy_resolve_end, |
| 126 load_timing_info.connect_timing.connect_start); |
| 127 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, |
| 128 connect_timing_flags); |
| 129 EXPECT_LE(load_timing_info.connect_timing.connect_end, |
| 130 load_timing_info.send_start); |
| 131 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); |
| 132 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); |
| 133 } |
| 134 |
| 135 // Same as above, but with a reused socket and proxy times. |
| 136 void TestLoadTimingReusedWithProxy( |
| 137 const net::LoadTimingInfo& load_timing_info) { |
| 138 EXPECT_TRUE(load_timing_info.socket_reused); |
| 139 EXPECT_NE(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 140 |
| 141 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
| 142 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
| 143 |
| 144 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
| 145 |
| 146 EXPECT_LE(load_timing_info.request_start, |
| 147 load_timing_info.proxy_resolve_start); |
| 148 EXPECT_LE(load_timing_info.proxy_resolve_start, |
| 149 load_timing_info.proxy_resolve_end); |
| 150 EXPECT_LE(load_timing_info.proxy_resolve_end, |
| 151 load_timing_info.send_start); |
| 152 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); |
| 153 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); |
| 154 } |
| 155 |
113 // Tests load timing in the case that there is no underlying connection. This | 156 // Tests load timing in the case that there is no underlying connection. This |
114 // can be used to test in the case of cached responses, errors, or non-HTTP | 157 // can be used to test in the case of cached responses, errors, or non-HTTP |
115 // requests. | 158 // requests. |
116 void TestLoadTimingNoHttpConnection( | 159 void TestLoadTimingNoHttpConnection( |
117 const net::LoadTimingInfo& load_timing_info) { | 160 const net::LoadTimingInfo& load_timing_info) { |
118 EXPECT_FALSE(load_timing_info.socket_reused); | 161 EXPECT_FALSE(load_timing_info.socket_reused); |
119 EXPECT_EQ(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 162 EXPECT_EQ(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
120 | 163 |
121 // Only the request times should be non-null. | 164 // Only the request times should be non-null. |
122 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); | 165 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
(...skipping 849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 if (simulate_main_network_error_) { | 1015 if (simulate_main_network_error_) { |
973 simulate_main_network_error_ = false; | 1016 simulate_main_network_error_ = false; |
974 did_simulate_error_main_ = true; | 1017 did_simulate_error_main_ = true; |
975 // will error since the requeted url is not one of its canned urls | 1018 // will error since the requeted url is not one of its canned urls |
976 return new URLRequestTestJob(request, network_delegate, true); | 1019 return new URLRequestTestJob(request, network_delegate, true); |
977 } | 1020 } |
978 if (!intercept_main_request_) | 1021 if (!intercept_main_request_) |
979 return NULL; | 1022 return NULL; |
980 intercept_main_request_ = false; | 1023 intercept_main_request_ = false; |
981 did_intercept_main_ = true; | 1024 did_intercept_main_ = true; |
982 return new URLRequestTestJob(request, | 1025 URLRequestTestJob* job = new URLRequestTestJob(request, |
983 network_delegate, | 1026 network_delegate, |
984 main_headers_, | 1027 main_headers_, |
985 main_data_, | 1028 main_data_, |
986 true); | 1029 true); |
| 1030 job->set_load_timing_info(main_request_load_timing_info_); |
| 1031 return job; |
987 } | 1032 } |
988 | 1033 |
989 virtual URLRequestJob* MaybeInterceptRedirect( | 1034 virtual URLRequestJob* MaybeInterceptRedirect( |
990 URLRequest* request, | 1035 URLRequest* request, |
991 NetworkDelegate* network_delegate, | 1036 NetworkDelegate* network_delegate, |
992 const GURL& location) OVERRIDE { | 1037 const GURL& location) OVERRIDE { |
993 if (cancel_redirect_request_) { | 1038 if (cancel_redirect_request_) { |
994 cancel_redirect_request_ = false; | 1039 cancel_redirect_request_ = false; |
995 did_cancel_redirect_ = true; | 1040 did_cancel_redirect_ = true; |
996 return new CancelTestJob(request, network_delegate); | 1041 return new CancelTestJob(request, network_delegate); |
(...skipping 20 matching lines...) Expand all Loading... |
1017 return NULL; | 1062 return NULL; |
1018 intercept_final_response_ = false; | 1063 intercept_final_response_ = false; |
1019 did_intercept_final_ = true; | 1064 did_intercept_final_ = true; |
1020 return new URLRequestTestJob(request, | 1065 return new URLRequestTestJob(request, |
1021 network_delegate, | 1066 network_delegate, |
1022 final_headers_, | 1067 final_headers_, |
1023 final_data_, | 1068 final_data_, |
1024 true); | 1069 true); |
1025 } | 1070 } |
1026 | 1071 |
1027 // Whether to intercept the main request, and if so the response to return. | 1072 // Whether to intercept the main request, and if so the response to return and |
| 1073 // the LoadTimingInfo to use. |
1028 bool intercept_main_request_; | 1074 bool intercept_main_request_; |
1029 std::string main_headers_; | 1075 std::string main_headers_; |
1030 std::string main_data_; | 1076 std::string main_data_; |
| 1077 LoadTimingInfo main_request_load_timing_info_; |
1031 | 1078 |
1032 // Other actions we take at MaybeIntercept time | 1079 // Other actions we take at MaybeIntercept time |
1033 bool restart_main_request_; | 1080 bool restart_main_request_; |
1034 bool cancel_main_request_; | 1081 bool cancel_main_request_; |
1035 bool cancel_then_restart_main_request_; | 1082 bool cancel_then_restart_main_request_; |
1036 bool simulate_main_network_error_; | 1083 bool simulate_main_network_error_; |
1037 | 1084 |
1038 // Whether to intercept redirects, and if so the response to return. | 1085 // Whether to intercept redirects, and if so the response to return. |
1039 bool intercept_redirect_; | 1086 bool intercept_redirect_; |
1040 std::string redirect_headers_; | 1087 std::string redirect_headers_; |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1350 | 1397 |
1351 // Check the interceptor got called as expected | 1398 // Check the interceptor got called as expected |
1352 EXPECT_TRUE(interceptor.did_cancel_then_restart_main_); | 1399 EXPECT_TRUE(interceptor.did_cancel_then_restart_main_); |
1353 EXPECT_FALSE(interceptor.did_intercept_final_); | 1400 EXPECT_FALSE(interceptor.did_intercept_final_); |
1354 | 1401 |
1355 // Check we see a canceled request | 1402 // Check we see a canceled request |
1356 EXPECT_FALSE(req.status().is_success()); | 1403 EXPECT_FALSE(req.status().is_success()); |
1357 EXPECT_EQ(URLRequestStatus::CANCELED, req.status().status()); | 1404 EXPECT_EQ(URLRequestStatus::CANCELED, req.status().status()); |
1358 } | 1405 } |
1359 | 1406 |
| 1407 LoadTimingInfo RunLoadTimingTest(const LoadTimingInfo& job_load_timing, |
| 1408 URLRequestContext* context) { |
| 1409 TestInterceptor interceptor; |
| 1410 interceptor.intercept_main_request_ = true; |
| 1411 interceptor.main_request_load_timing_info_ = job_load_timing; |
| 1412 TestDelegate d; |
| 1413 URLRequest req(GURL("http://test_intercept/foo"), &d, context); |
| 1414 req.Start(); |
| 1415 MessageLoop::current()->Run(); |
| 1416 |
| 1417 LoadTimingInfo resulting_load_timing; |
| 1418 req.GetLoadTimingInfo(&resulting_load_timing); |
| 1419 |
| 1420 // None of these should be modified by the URLRequest. |
| 1421 EXPECT_EQ(job_load_timing.socket_reused, resulting_load_timing.socket_reused); |
| 1422 EXPECT_EQ(job_load_timing.socket_log_id, resulting_load_timing.socket_log_id); |
| 1423 EXPECT_EQ(job_load_timing.send_start, resulting_load_timing.send_start); |
| 1424 EXPECT_EQ(job_load_timing.send_end, resulting_load_timing.send_end); |
| 1425 EXPECT_EQ(job_load_timing.receive_headers_end, |
| 1426 resulting_load_timing.receive_headers_end); |
| 1427 |
| 1428 return resulting_load_timing; |
| 1429 } |
| 1430 |
| 1431 // "Normal" LoadTimingInfo as returned by a job. Everything is in order, not |
| 1432 // reused. |connect_time_flags| is used to indicate if there should be dns |
| 1433 // or SSL times, and |used_proxy| is used for proxy times. |
| 1434 LoadTimingInfo NormalLoadTimingInfo(base::TimeTicks now, |
| 1435 int connect_time_flags, |
| 1436 bool used_proxy) { |
| 1437 LoadTimingInfo load_timing; |
| 1438 load_timing.socket_log_id = 1; |
| 1439 |
| 1440 if (used_proxy) { |
| 1441 load_timing.proxy_resolve_start = now + base::TimeDelta::FromDays(1); |
| 1442 load_timing.proxy_resolve_end = now + base::TimeDelta::FromDays(2); |
| 1443 } |
| 1444 |
| 1445 LoadTimingInfo::ConnectTiming& connect_timing = load_timing.connect_timing; |
| 1446 if (connect_time_flags & CONNECT_TIMING_HAS_DNS_TIMES) { |
| 1447 connect_timing.dns_start = now + base::TimeDelta::FromDays(3); |
| 1448 connect_timing.dns_end = now + base::TimeDelta::FromDays(4); |
| 1449 } |
| 1450 connect_timing.connect_start = now + base::TimeDelta::FromDays(5); |
| 1451 if (connect_time_flags & CONNECT_TIMING_HAS_SSL_TIMES) { |
| 1452 connect_timing.ssl_start = now + base::TimeDelta::FromDays(6); |
| 1453 connect_timing.ssl_end = now + base::TimeDelta::FromDays(7); |
| 1454 } |
| 1455 connect_timing.connect_end = now + base::TimeDelta::FromDays(8); |
| 1456 |
| 1457 load_timing.send_start = now + base::TimeDelta::FromDays(9); |
| 1458 load_timing.send_end = now + base::TimeDelta::FromDays(10); |
| 1459 load_timing.receive_headers_end = now + base::TimeDelta::FromDays(11); |
| 1460 return load_timing; |
| 1461 } |
| 1462 |
| 1463 // Same as above, but in the case of a reused socket. |
| 1464 LoadTimingInfo NormalLoadTimingInfoReused(base::TimeTicks now, |
| 1465 bool used_proxy) { |
| 1466 LoadTimingInfo load_timing; |
| 1467 load_timing.socket_log_id = 1; |
| 1468 load_timing.socket_reused = true; |
| 1469 |
| 1470 if (used_proxy) { |
| 1471 load_timing.proxy_resolve_start = now + base::TimeDelta::FromDays(1); |
| 1472 load_timing.proxy_resolve_end = now + base::TimeDelta::FromDays(2); |
| 1473 } |
| 1474 |
| 1475 load_timing.send_start = now + base::TimeDelta::FromDays(9); |
| 1476 load_timing.send_end = now + base::TimeDelta::FromDays(10); |
| 1477 load_timing.receive_headers_end = now + base::TimeDelta::FromDays(11); |
| 1478 return load_timing; |
| 1479 } |
| 1480 |
| 1481 // Basic test that the intercept + load timing tests work. |
| 1482 TEST_F(URLRequestTest, InterceptLoadTiming) { |
| 1483 base::TimeTicks now = base::TimeTicks::Now(); |
| 1484 LoadTimingInfo job_load_timing = |
| 1485 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_DNS_TIMES, false); |
| 1486 |
| 1487 LoadTimingInfo load_timing_result = RunLoadTimingTest(job_load_timing, |
| 1488 &default_context_); |
| 1489 |
| 1490 // Nothing should have been changed by the URLRequest. |
| 1491 EXPECT_EQ(job_load_timing.proxy_resolve_start, |
| 1492 load_timing_result.proxy_resolve_start); |
| 1493 EXPECT_EQ(job_load_timing.proxy_resolve_end, |
| 1494 load_timing_result.proxy_resolve_end); |
| 1495 EXPECT_EQ(job_load_timing.connect_timing.dns_start, |
| 1496 load_timing_result.connect_timing.dns_start); |
| 1497 EXPECT_EQ(job_load_timing.connect_timing.dns_end, |
| 1498 load_timing_result.connect_timing.dns_end); |
| 1499 EXPECT_EQ(job_load_timing.connect_timing.connect_start, |
| 1500 load_timing_result.connect_timing.connect_start); |
| 1501 EXPECT_EQ(job_load_timing.connect_timing.connect_end, |
| 1502 load_timing_result.connect_timing.connect_end); |
| 1503 EXPECT_EQ(job_load_timing.connect_timing.ssl_start, |
| 1504 load_timing_result.connect_timing.ssl_start); |
| 1505 EXPECT_EQ(job_load_timing.connect_timing.ssl_end, |
| 1506 load_timing_result.connect_timing.ssl_end); |
| 1507 |
| 1508 // Redundant sanity check. |
| 1509 TestLoadTimingNotReused(load_timing_result, CONNECT_TIMING_HAS_DNS_TIMES); |
| 1510 } |
| 1511 |
| 1512 // Another basic test, with proxy and SSL times, but no DNS times. |
| 1513 TEST_F(URLRequestTest, InterceptLoadTimingProxy) { |
| 1514 base::TimeTicks now = base::TimeTicks::Now(); |
| 1515 LoadTimingInfo job_load_timing = |
| 1516 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_SSL_TIMES, true); |
| 1517 |
| 1518 LoadTimingInfo load_timing_result = RunLoadTimingTest(job_load_timing, |
| 1519 &default_context_); |
| 1520 |
| 1521 // Nothing should have been changed by the URLRequest. |
| 1522 EXPECT_EQ(job_load_timing.proxy_resolve_start, |
| 1523 load_timing_result.proxy_resolve_start); |
| 1524 EXPECT_EQ(job_load_timing.proxy_resolve_end, |
| 1525 load_timing_result.proxy_resolve_end); |
| 1526 EXPECT_EQ(job_load_timing.connect_timing.dns_start, |
| 1527 load_timing_result.connect_timing.dns_start); |
| 1528 EXPECT_EQ(job_load_timing.connect_timing.dns_end, |
| 1529 load_timing_result.connect_timing.dns_end); |
| 1530 EXPECT_EQ(job_load_timing.connect_timing.connect_start, |
| 1531 load_timing_result.connect_timing.connect_start); |
| 1532 EXPECT_EQ(job_load_timing.connect_timing.connect_end, |
| 1533 load_timing_result.connect_timing.connect_end); |
| 1534 EXPECT_EQ(job_load_timing.connect_timing.ssl_start, |
| 1535 load_timing_result.connect_timing.ssl_start); |
| 1536 EXPECT_EQ(job_load_timing.connect_timing.ssl_end, |
| 1537 load_timing_result.connect_timing.ssl_end); |
| 1538 |
| 1539 // Redundant sanity check. |
| 1540 TestLoadTimingNotReusedWithProxy(load_timing_result, |
| 1541 CONNECT_TIMING_HAS_SSL_TIMES); |
| 1542 } |
| 1543 |
| 1544 // Make sure that URLRequest correctly adjusts proxy times when they're before |
| 1545 // |request_start|, due to already having a connected socket. This happens in |
| 1546 // the case of reusing a SPDY session or HTTP pipeline. The connected socket is |
| 1547 // not considered reused in this test (May be a preconnect). |
| 1548 // |
| 1549 // To mix things up from the test above, assumes DNS times but no SSL times. |
| 1550 TEST_F(URLRequestTest, InterceptLoadTimingEarlyProxyResolution) { |
| 1551 base::TimeTicks now = base::TimeTicks::Now(); |
| 1552 LoadTimingInfo job_load_timing = |
| 1553 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_DNS_TIMES, true); |
| 1554 job_load_timing.proxy_resolve_start = now - base::TimeDelta::FromDays(6); |
| 1555 job_load_timing.proxy_resolve_end = now - base::TimeDelta::FromDays(5); |
| 1556 job_load_timing.connect_timing.dns_start = now - base::TimeDelta::FromDays(4); |
| 1557 job_load_timing.connect_timing.dns_end = now - base::TimeDelta::FromDays(3); |
| 1558 job_load_timing.connect_timing.connect_start = |
| 1559 now - base::TimeDelta::FromDays(2); |
| 1560 job_load_timing.connect_timing.connect_end = |
| 1561 now - base::TimeDelta::FromDays(1); |
| 1562 |
| 1563 LoadTimingInfo load_timing_result = RunLoadTimingTest(job_load_timing, |
| 1564 &default_context_); |
| 1565 |
| 1566 // Proxy times, connect times, and DNS times should all be replaced with |
| 1567 // request_start. |
| 1568 EXPECT_EQ(load_timing_result.request_start, |
| 1569 load_timing_result.proxy_resolve_start); |
| 1570 EXPECT_EQ(load_timing_result.request_start, |
| 1571 load_timing_result.proxy_resolve_end); |
| 1572 EXPECT_EQ(load_timing_result.request_start, |
| 1573 load_timing_result.connect_timing.dns_start); |
| 1574 EXPECT_EQ(load_timing_result.request_start, |
| 1575 load_timing_result.connect_timing.dns_end); |
| 1576 EXPECT_EQ(load_timing_result.request_start, |
| 1577 load_timing_result.connect_timing.connect_start); |
| 1578 EXPECT_EQ(load_timing_result.request_start, |
| 1579 load_timing_result.connect_timing.connect_end); |
| 1580 |
| 1581 // Other times should have been left null. |
| 1582 TestLoadTimingNotReusedWithProxy(load_timing_result, |
| 1583 CONNECT_TIMING_HAS_DNS_TIMES); |
| 1584 } |
| 1585 |
| 1586 // Same as above, but in the reused case. |
| 1587 TEST_F(URLRequestTest, InterceptLoadTimingEarlyProxyResolutionReused) { |
| 1588 base::TimeTicks now = base::TimeTicks::Now(); |
| 1589 LoadTimingInfo job_load_timing = NormalLoadTimingInfoReused(now, true); |
| 1590 job_load_timing.proxy_resolve_start = now - base::TimeDelta::FromDays(4); |
| 1591 job_load_timing.proxy_resolve_end = now - base::TimeDelta::FromDays(3); |
| 1592 |
| 1593 LoadTimingInfo load_timing_result = RunLoadTimingTest(job_load_timing, |
| 1594 &default_context_); |
| 1595 |
| 1596 // Proxy times and connect times should all be replaced with request_start. |
| 1597 EXPECT_EQ(load_timing_result.request_start, |
| 1598 load_timing_result.proxy_resolve_start); |
| 1599 EXPECT_EQ(load_timing_result.request_start, |
| 1600 load_timing_result.proxy_resolve_end); |
| 1601 |
| 1602 // Other times should have been left null. |
| 1603 TestLoadTimingReusedWithProxy(load_timing_result); |
| 1604 } |
| 1605 |
| 1606 // Make sure that URLRequest correctly adjusts connect times when they're before |
| 1607 // |request_start|, due to reusing a connected socket. The connected socket is |
| 1608 // not considered reused in this test (May be a preconnect). |
| 1609 // |
| 1610 // To mix things up, the request has SSL times, but no DNS times. |
| 1611 TEST_F(URLRequestTest, InterceptLoadTimingEarlyConnect) { |
| 1612 base::TimeTicks now = base::TimeTicks::Now(); |
| 1613 LoadTimingInfo job_load_timing = |
| 1614 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_SSL_TIMES, false); |
| 1615 job_load_timing.connect_timing.connect_start = |
| 1616 now - base::TimeDelta::FromDays(1); |
| 1617 job_load_timing.connect_timing.ssl_start = now - base::TimeDelta::FromDays(2); |
| 1618 job_load_timing.connect_timing.ssl_end = now - base::TimeDelta::FromDays(3); |
| 1619 job_load_timing.connect_timing.connect_end = |
| 1620 now - base::TimeDelta::FromDays(4); |
| 1621 |
| 1622 LoadTimingInfo load_timing_result = RunLoadTimingTest(job_load_timing, |
| 1623 &default_context_); |
| 1624 |
| 1625 // Connect times, and SSL times should be replaced with request_start. |
| 1626 EXPECT_EQ(load_timing_result.request_start, |
| 1627 load_timing_result.connect_timing.connect_start); |
| 1628 EXPECT_EQ(load_timing_result.request_start, |
| 1629 load_timing_result.connect_timing.ssl_start); |
| 1630 EXPECT_EQ(load_timing_result.request_start, |
| 1631 load_timing_result.connect_timing.ssl_end); |
| 1632 EXPECT_EQ(load_timing_result.request_start, |
| 1633 load_timing_result.connect_timing.connect_end); |
| 1634 |
| 1635 // Other times should have been left null. |
| 1636 TestLoadTimingNotReused(load_timing_result, CONNECT_TIMING_HAS_SSL_TIMES); |
| 1637 } |
| 1638 |
| 1639 // Make sure that URLRequest correctly adjusts connect times when they're before |
| 1640 // |request_start|, due to reusing a connected socket in the case that there |
| 1641 // are also proxy times. The connected socket is not considered reused in this |
| 1642 // test (May be a preconnect). |
| 1643 // |
| 1644 // In this test, there are no SSL or DNS times. |
| 1645 TEST_F(URLRequestTest, InterceptLoadTimingEarlyConnectWithProxy) { |
| 1646 base::TimeTicks now = base::TimeTicks::Now(); |
| 1647 LoadTimingInfo job_load_timing = |
| 1648 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY, true); |
| 1649 job_load_timing.connect_timing.connect_start = |
| 1650 now - base::TimeDelta::FromDays(1); |
| 1651 job_load_timing.connect_timing.connect_end = |
| 1652 now - base::TimeDelta::FromDays(2); |
| 1653 |
| 1654 LoadTimingInfo load_timing_result = RunLoadTimingTest(job_load_timing, |
| 1655 &default_context_); |
| 1656 |
| 1657 // Connect times should be replaced with proxy_resolve_end. |
| 1658 EXPECT_EQ(load_timing_result.proxy_resolve_end, |
| 1659 load_timing_result.connect_timing.connect_start); |
| 1660 EXPECT_EQ(load_timing_result.proxy_resolve_end, |
| 1661 load_timing_result.connect_timing.connect_end); |
| 1662 |
| 1663 // Other times should have been left null. |
| 1664 TestLoadTimingNotReusedWithProxy(load_timing_result, |
| 1665 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 1666 } |
| 1667 |
1360 // Check that two different URL requests have different identifiers. | 1668 // Check that two different URL requests have different identifiers. |
1361 TEST_F(URLRequestTest, Identifiers) { | 1669 TEST_F(URLRequestTest, Identifiers) { |
1362 TestDelegate d; | 1670 TestDelegate d; |
1363 TestURLRequestContext context; | 1671 TestURLRequestContext context; |
1364 TestURLRequest req(GURL("http://example.com"), &d, &context, NULL); | 1672 TestURLRequest req(GURL("http://example.com"), &d, &context, NULL); |
1365 TestURLRequest other_req(GURL("http://example.com"), &d, &context, NULL); | 1673 TestURLRequest other_req(GURL("http://example.com"), &d, &context, NULL); |
1366 | 1674 |
1367 ASSERT_NE(req.identifier(), other_req.identifier()); | 1675 ASSERT_NE(req.identifier(), other_req.identifier()); |
1368 } | 1676 } |
1369 | 1677 |
(...skipping 4034 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5404 | 5712 |
5405 EXPECT_FALSE(r.is_pending()); | 5713 EXPECT_FALSE(r.is_pending()); |
5406 EXPECT_EQ(1, d->response_started_count()); | 5714 EXPECT_EQ(1, d->response_started_count()); |
5407 EXPECT_FALSE(d->received_data_before_response()); | 5715 EXPECT_FALSE(d->received_data_before_response()); |
5408 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); | 5716 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); |
5409 } | 5717 } |
5410 } | 5718 } |
5411 #endif // !defined(DISABLE_FTP_SUPPORT) | 5719 #endif // !defined(DISABLE_FTP_SUPPORT) |
5412 | 5720 |
5413 } // namespace net | 5721 } // namespace net |
OLD | NEW |