Index: net/http/http_cache_unittest.cc |
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc |
index 83241ab301e441665f6acf3f1b794fa7e5f9f183..fc917fdc4a9a2d4e46b2f7f74b300193f3c28a32 100644 |
--- a/net/http/http_cache_unittest.cc |
+++ b/net/http/http_cache_unittest.cc |
@@ -6443,3 +6443,73 @@ TEST(HttpCache, ReceivedBytesRange) { |
RemoveMockTransaction(&kRangeGET_TransactionOK); |
} |
+ |
+static void CheckResourceFreshnessHeader(const net::HttpRequestInfo* request, |
+ std::string* response_status, |
+ std::string* response_headers, |
+ std::string* response_data) { |
+ std::string value; |
+ EXPECT_TRUE( |
+ request->extra_headers.GetHeader("Chromium-Resource-Freshness", &value)); |
+ EXPECT_EQ("max-age=3600,stale-while-revalidate=7200,age=10801", value); |
+} |
+ |
+// Verify that the Chromium-Resource-Freshness header is sent on a revalidation |
+// if the stale-while-revalidate directive was on the response. |
+// TODO(ricea): Rename this test when a final name for the header is decided. |
+TEST(HttpCache, ResourceFreshnessHeaderSent) { |
+ MockHttpCache cache; |
+ |
+ ScopedMockTransaction stale_while_revalidate_transaction( |
+ kSimpleGET_Transaction); |
+ stale_while_revalidate_transaction.response_headers = |
+ "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" |
+ "Age: 10801\n" |
+ "Cache-Control: max-age=3600,stale-while-revalidate=7200\n"; |
+ |
+ // Write to the cache. |
+ RunTransactionTest(cache.http_cache(), stale_while_revalidate_transaction); |
+ |
+ EXPECT_EQ(1, cache.network_layer()->transaction_count()); |
+ |
+ // Send the request again and check that Chromium-Resource-Freshness header is |
+ // added. |
+ stale_while_revalidate_transaction.handler = CheckResourceFreshnessHeader; |
+ |
+ RunTransactionTest(cache.http_cache(), stale_while_revalidate_transaction); |
+ |
+ EXPECT_EQ(2, cache.network_layer()->transaction_count()); |
+} |
+ |
+static void CheckResourceFreshnessAbsent(const net::HttpRequestInfo* request, |
+ std::string* response_status, |
+ std::string* response_headers, |
+ std::string* response_data) { |
+ EXPECT_FALSE(request->extra_headers.HasHeader("Chromium-Resource-Freshness")); |
+} |
+ |
+// Verify that the Chromium-Resource-Freshness header is not sent when |
+// stale-while-revalidate is 0. |
+TEST(HttpCache, ResourceFreshnessHeaderNotSent) { |
+ MockHttpCache cache; |
+ |
+ ScopedMockTransaction stale_while_revalidate_transaction( |
+ kSimpleGET_Transaction); |
+ stale_while_revalidate_transaction.response_headers = |
+ "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" |
+ "Age: 10801\n" |
+ "Cache-Control: max-age=3600,stale-while-revalidate=0\n"; |
+ |
+ // Write to the cache. |
+ RunTransactionTest(cache.http_cache(), stale_while_revalidate_transaction); |
+ |
+ EXPECT_EQ(1, cache.network_layer()->transaction_count()); |
+ |
+ // Send the request again and check that Chromium-Resource-Freshness header is |
+ // absent. |
+ stale_while_revalidate_transaction.handler = CheckResourceFreshnessAbsent; |
+ |
+ RunTransactionTest(cache.http_cache(), stale_while_revalidate_transaction); |
+ |
+ EXPECT_EQ(2, cache.network_layer()->transaction_count()); |
+} |