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/http/http_cache.h" | 5 #include "net/http/http_cache.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/memory/scoped_vector.h" | 9 #include "base/memory/scoped_vector.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 *response_headers = "Cache-Control: no-store\n"; | 196 *response_headers = "Cache-Control: no-store\n"; |
197 } | 197 } |
198 | 198 |
199 private: | 199 private: |
200 static bool no_store; | 200 static bool no_store; |
201 DISALLOW_COPY_AND_ASSIGN(FastTransactionServer); | 201 DISALLOW_COPY_AND_ASSIGN(FastTransactionServer); |
202 }; | 202 }; |
203 bool FastTransactionServer::no_store; | 203 bool FastTransactionServer::no_store; |
204 | 204 |
205 const MockTransaction kFastNoStoreGET_Transaction = { | 205 const MockTransaction kFastNoStoreGET_Transaction = { |
| 206 net::OK, |
206 "http://www.google.com/nostore", | 207 "http://www.google.com/nostore", |
207 "GET", | 208 "GET", |
208 base::Time(), | 209 base::Time(), |
209 "", | 210 "", |
210 net::LOAD_VALIDATE_CACHE, | 211 net::LOAD_VALIDATE_CACHE, |
211 "HTTP/1.1 200 OK", | 212 "HTTP/1.1 200 OK", |
212 "Cache-Control: max-age=10000\n", | 213 "Cache-Control: max-age=10000\n", |
213 base::Time(), | 214 base::Time(), |
214 "<html><body>Google Blah Blah</body></html>", | 215 "<html><body>Google Blah Blah</body></html>", |
215 TEST_MODE_SYNC_NET_START, | 216 TEST_MODE_SYNC_NET_START, |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 response_headers->replace(response_headers->find("Content-Length:"), | 334 response_headers->replace(response_headers->find("Content-Length:"), |
334 content_length.size(), content_length); | 335 content_length.size(), content_length); |
335 } | 336 } |
336 } else { | 337 } else { |
337 response_status->assign("HTTP/1.1 304 Not Modified"); | 338 response_status->assign("HTTP/1.1 304 Not Modified"); |
338 response_data->clear(); | 339 response_data->clear(); |
339 } | 340 } |
340 } | 341 } |
341 | 342 |
342 const MockTransaction kRangeGET_TransactionOK = { | 343 const MockTransaction kRangeGET_TransactionOK = { |
| 344 net::OK, |
343 "http://www.google.com/range", | 345 "http://www.google.com/range", |
344 "GET", | 346 "GET", |
345 base::Time(), | 347 base::Time(), |
346 "Range: bytes = 40-49\r\n" | 348 "Range: bytes = 40-49\r\n" |
347 EXTRA_HEADER, | 349 EXTRA_HEADER, |
348 net::LOAD_NORMAL, | 350 net::LOAD_NORMAL, |
349 "HTTP/1.1 206 Partial Content", | 351 "HTTP/1.1 206 Partial Content", |
350 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" | 352 "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" |
351 "ETag: \"foo\"\n" | 353 "ETag: \"foo\"\n" |
352 "Accept-Ranges: bytes\n" | 354 "Accept-Ranges: bytes\n" |
(...skipping 1398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1751 | 1753 |
1752 // Junk network response. | 1754 // Junk network response. |
1753 static const Response kUnexpectedResponse = { | 1755 static const Response kUnexpectedResponse = { |
1754 "HTTP/1.1 500 Unexpected", | 1756 "HTTP/1.1 500 Unexpected", |
1755 "Server: unexpected_header", | 1757 "Server: unexpected_header", |
1756 "unexpected body" | 1758 "unexpected body" |
1757 }; | 1759 }; |
1758 | 1760 |
1759 // We will control the network layer's responses for |kUrl| using | 1761 // We will control the network layer's responses for |kUrl| using |
1760 // |mock_network_response|. | 1762 // |mock_network_response|. |
1761 MockTransaction mock_network_response = { 0 }; | 1763 MockTransaction mock_network_response = { net::OK, 0 }; |
1762 mock_network_response.url = kUrl; | 1764 mock_network_response.url = kUrl; |
1763 AddMockTransaction(&mock_network_response); | 1765 AddMockTransaction(&mock_network_response); |
1764 | 1766 |
1765 // Request |kUrl| for the first time. It should hit the network and | 1767 // Request |kUrl| for the first time. It should hit the network and |
1766 // receive |kNetResponse1|, which it saves into the HTTP cache. | 1768 // receive |kNetResponse1|, which it saves into the HTTP cache. |
1767 | 1769 |
1768 MockTransaction request = { 0 }; | 1770 MockTransaction request = { net::OK, 0 }; |
1769 request.url = kUrl; | 1771 request.url = kUrl; |
1770 request.method = "GET"; | 1772 request.method = "GET"; |
1771 request.request_headers = ""; | 1773 request.request_headers = ""; |
1772 | 1774 |
1773 net_response_1.AssignTo(&mock_network_response); // Network mock. | 1775 net_response_1.AssignTo(&mock_network_response); // Network mock. |
1774 net_response_1.AssignTo(&request); // Expected result. | 1776 net_response_1.AssignTo(&request); // Expected result. |
1775 | 1777 |
1776 std::string response_headers; | 1778 std::string response_headers; |
1777 RunTransactionTestWithResponse( | 1779 RunTransactionTestWithResponse( |
1778 cache.http_cache(), request, &response_headers); | 1780 cache.http_cache(), request, &response_headers); |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1942 "Date: Wed, 22 Jul 2009 03:15:26 GMT\n" | 1944 "Date: Wed, 22 Jul 2009 03:15:26 GMT\n" |
1943 "Last-Modified: Wed, 06 Feb 2008 22:38:21 GMT\n", | 1945 "Last-Modified: Wed, 06 Feb 2008 22:38:21 GMT\n", |
1944 "" | 1946 "" |
1945 }; | 1947 }; |
1946 | 1948 |
1947 const char* kExtraRequestHeaders = | 1949 const char* kExtraRequestHeaders = |
1948 "If-Modified-Since: Wed, 06 Feb 2008 22:38:21 GMT"; | 1950 "If-Modified-Since: Wed, 06 Feb 2008 22:38:21 GMT"; |
1949 | 1951 |
1950 // We will control the network layer's responses for |kUrl| using | 1952 // We will control the network layer's responses for |kUrl| using |
1951 // |mock_network_response|. | 1953 // |mock_network_response|. |
1952 MockTransaction mock_network_response = { 0 }; | 1954 MockTransaction mock_network_response = { net::OK, 0 }; |
1953 mock_network_response.url = kUrl; | 1955 mock_network_response.url = kUrl; |
1954 AddMockTransaction(&mock_network_response); | 1956 AddMockTransaction(&mock_network_response); |
1955 | 1957 |
1956 MockTransaction request = { 0 }; | 1958 MockTransaction request = { net::OK, 0 }; |
1957 request.url = kUrl; | 1959 request.url = kUrl; |
1958 request.method = "GET"; | 1960 request.method = "GET"; |
1959 request.request_headers = kExtraRequestHeaders; | 1961 request.request_headers = kExtraRequestHeaders; |
1960 | 1962 |
1961 kNetResponse.AssignTo(&mock_network_response); // Network mock. | 1963 kNetResponse.AssignTo(&mock_network_response); // Network mock. |
1962 kNetResponse.AssignTo(&request); // Expected result. | 1964 kNetResponse.AssignTo(&request); // Expected result. |
1963 | 1965 |
1964 std::string response_headers; | 1966 std::string response_headers; |
1965 RunTransactionTestWithResponse( | 1967 RunTransactionTestWithResponse( |
1966 cache.http_cache(), request, &response_headers); | 1968 cache.http_cache(), request, &response_headers); |
(...skipping 19 matching lines...) Expand all Loading... |
1986 "Date: Wed, 22 Jul 2009 03:15:26 GMT\n" | 1988 "Date: Wed, 22 Jul 2009 03:15:26 GMT\n" |
1987 "Last-Modified: Wed, 06 Feb 2008 22:38:21 GMT\n", | 1989 "Last-Modified: Wed, 06 Feb 2008 22:38:21 GMT\n", |
1988 "foobar!!!" | 1990 "foobar!!!" |
1989 }; | 1991 }; |
1990 | 1992 |
1991 const char* kExtraRequestHeaders = | 1993 const char* kExtraRequestHeaders = |
1992 "If-Modified-Since: Wed, 06 Feb 2008 22:38:21 GMT"; | 1994 "If-Modified-Since: Wed, 06 Feb 2008 22:38:21 GMT"; |
1993 | 1995 |
1994 // We will control the network layer's responses for |kUrl| using | 1996 // We will control the network layer's responses for |kUrl| using |
1995 // |mock_network_response|. | 1997 // |mock_network_response|. |
1996 MockTransaction mock_network_response = { 0 }; | 1998 MockTransaction mock_network_response = { net::OK, 0 }; |
1997 mock_network_response.url = kUrl; | 1999 mock_network_response.url = kUrl; |
1998 AddMockTransaction(&mock_network_response); | 2000 AddMockTransaction(&mock_network_response); |
1999 | 2001 |
2000 MockTransaction request = { 0 }; | 2002 MockTransaction request = { net::OK, 0 }; |
2001 request.url = kUrl; | 2003 request.url = kUrl; |
2002 request.method = "GET"; | 2004 request.method = "GET"; |
2003 request.request_headers = kExtraRequestHeaders; | 2005 request.request_headers = kExtraRequestHeaders; |
2004 | 2006 |
2005 kNetResponse.AssignTo(&mock_network_response); // Network mock. | 2007 kNetResponse.AssignTo(&mock_network_response); // Network mock. |
2006 kNetResponse.AssignTo(&request); // Expected result. | 2008 kNetResponse.AssignTo(&request); // Expected result. |
2007 | 2009 |
2008 std::string response_headers; | 2010 std::string response_headers; |
2009 RunTransactionTestWithResponse( | 2011 RunTransactionTestWithResponse( |
2010 cache.http_cache(), request, &response_headers); | 2012 cache.http_cache(), request, &response_headers); |
(...skipping 2590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4601 // get updated on 304. Here we specifically check that the | 4603 // get updated on 304. Here we specifically check that the |
4602 // HttpResponseHeaders::request_time and HttpResponseHeaders::response_time | 4604 // HttpResponseHeaders::request_time and HttpResponseHeaders::response_time |
4603 // fields also gets updated. | 4605 // fields also gets updated. |
4604 // http://crbug.com/20594. | 4606 // http://crbug.com/20594. |
4605 TEST(HttpCache, UpdatesRequestResponseTimeOn304) { | 4607 TEST(HttpCache, UpdatesRequestResponseTimeOn304) { |
4606 MockHttpCache cache; | 4608 MockHttpCache cache; |
4607 | 4609 |
4608 const char* kUrl = "http://foobar"; | 4610 const char* kUrl = "http://foobar"; |
4609 const char* kData = "body"; | 4611 const char* kData = "body"; |
4610 | 4612 |
4611 MockTransaction mock_network_response = { 0 }; | 4613 MockTransaction mock_network_response = { net::OK, 0 }; |
4612 mock_network_response.url = kUrl; | 4614 mock_network_response.url = kUrl; |
4613 | 4615 |
4614 AddMockTransaction(&mock_network_response); | 4616 AddMockTransaction(&mock_network_response); |
4615 | 4617 |
4616 // Request |kUrl|, causing |kNetResponse1| to be written to the cache. | 4618 // Request |kUrl|, causing |kNetResponse1| to be written to the cache. |
4617 | 4619 |
4618 MockTransaction request = { 0 }; | 4620 MockTransaction request = { net::OK, 0 }; |
4619 request.url = kUrl; | 4621 request.url = kUrl; |
4620 request.method = "GET"; | 4622 request.method = "GET"; |
4621 request.request_headers = ""; | 4623 request.request_headers = ""; |
4622 request.data = kData; | 4624 request.data = kData; |
4623 | 4625 |
4624 static const Response kNetResponse1 = { | 4626 static const Response kNetResponse1 = { |
4625 "HTTP/1.1 200 OK", | 4627 "HTTP/1.1 200 OK", |
4626 "Date: Fri, 12 Jun 2009 21:46:42 GMT\n" | 4628 "Date: Fri, 12 Jun 2009 21:46:42 GMT\n" |
4627 "Last-Modified: Wed, 06 Feb 2008 22:38:21 GMT\n", | 4629 "Last-Modified: Wed, 06 Feb 2008 22:38:21 GMT\n", |
4628 kData | 4630 kData |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5026 8); | 5028 8); |
5027 | 5029 |
5028 // Force this transaction to read from the cache. | 5030 // Force this transaction to read from the cache. |
5029 MockTransaction transaction(kSimpleGET_Transaction); | 5031 MockTransaction transaction(kSimpleGET_Transaction); |
5030 transaction.load_flags |= net::LOAD_ONLY_FROM_CACHE; | 5032 transaction.load_flags |= net::LOAD_ONLY_FROM_CACHE; |
5031 | 5033 |
5032 RunTransactionTestWithDelegate(cache.http_cache(), | 5034 RunTransactionTestWithDelegate(cache.http_cache(), |
5033 kSimpleGET_Transaction, | 5035 kSimpleGET_Transaction, |
5034 5); | 5036 5); |
5035 } | 5037 } |
OLD | NEW |