Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: net/url_request/url_request_unittest.cc

Issue 13653003: Fix a load timing bug in the case of SPDY session reuse (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Remove bonus whitespace, add test Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
OLDNEW
« net/url_request/url_request_test_job.h ('K') | « net/url_request/url_request_test_job.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698