Index: net/http/http_cache_unittest.cc |
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc |
index 0d38d86ef8af6b153618b294e2df60e67ecd6435..a97ba8a81b7d83a4c651ba3b2eabf6af60f47238 100644 |
--- a/net/http/http_cache_unittest.cc |
+++ b/net/http/http_cache_unittest.cc |
@@ -5567,3 +5567,88 @@ TEST(HttpCache, SimpleGET_LoadOnlyFromCache_Hit_TransactionDelegate) { |
5, |
0); |
} |
+ |
+// Make sure that calling SetPriority on a cache transaction passes on |
+// its priority updates to its underlying network transaction. |
+TEST(HttpCache, SetPriority) { |
+ MockHttpCache cache; |
+ |
+ scoped_ptr<net::HttpTransaction> trans; |
+ EXPECT_EQ(net::OK, cache.http_cache()->CreateTransaction( |
+ net::IDLE, &trans, NULL)); |
+ ASSERT_TRUE(trans.get()); |
+ |
+ // Shouldn't crash, but doesn't do anything either. |
+ trans->SetPriority(net::LOW); |
+ |
+ EXPECT_FALSE(cache.network_layer()->last_transaction()); |
+ EXPECT_EQ(net::DEFAULT_PRIORITY, |
+ cache.network_layer()->last_create_transaction_priority()); |
+ |
+ net::HttpRequestInfo info; |
+ info.url = GURL(kSimpleGET_Transaction.url); |
+ net::TestCompletionCallback callback; |
+ EXPECT_EQ(net::ERR_IO_PENDING, |
+ trans->Start(&info, callback.callback(), net::BoundNetLog())); |
+ |
+ ASSERT_TRUE(cache.network_layer()->last_transaction()); |
+ EXPECT_EQ(net::LOW, |
+ cache.network_layer()->last_create_transaction_priority()); |
+ EXPECT_EQ(net::LOW, |
+ cache.network_layer()->last_transaction()->priority()); |
+ |
+ trans->SetPriority(net::HIGHEST); |
+ EXPECT_EQ(net::LOW, |
+ cache.network_layer()->last_create_transaction_priority()); |
+ EXPECT_EQ(net::HIGHEST, |
+ cache.network_layer()->last_transaction()->priority()); |
+ |
+ EXPECT_EQ(net::OK, callback.WaitForResult()); |
+} |
+ |
+// Make sure that a cache transaction passes on its priority to |
+// newly-created network transactions. |
+TEST(HttpCache, SetPriorityNewTransaction) { |
+ MockHttpCache cache; |
+ AddMockTransaction(&kRangeGET_TransactionOK); |
+ |
+ std::string raw_headers("HTTP/1.1 200 OK\n" |
+ "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n" |
+ "ETag: \"foo\"\n" |
+ "Accept-Ranges: bytes\n" |
+ "Content-Length: 80\n"); |
+ CreateTruncatedEntry(raw_headers, &cache); |
+ |
+ // Now make a regular request. |
+ std::string headers; |
+ MockTransaction transaction(kRangeGET_TransactionOK); |
+ transaction.request_headers = EXTRA_HEADER; |
+ transaction.data = "rg: 00-09 rg: 10-19 rg: 20-29 rg: 30-39 rg: 40-49 " |
+ "rg: 50-59 rg: 60-69 rg: 70-79 "; |
+ |
+ scoped_ptr<net::HttpTransaction> trans; |
+ EXPECT_EQ(net::OK, cache.http_cache()->CreateTransaction( |
+ net::MEDIUM, &trans, NULL)); |
+ ASSERT_TRUE(trans.get()); |
+ EXPECT_EQ(net::DEFAULT_PRIORITY, |
+ cache.network_layer()->last_create_transaction_priority()); |
+ |
+ MockHttpRequest info(transaction); |
+ net::TestCompletionCallback callback; |
+ EXPECT_EQ(net::ERR_IO_PENDING, |
+ trans->Start(&info, callback.callback(), net::BoundNetLog())); |
+ EXPECT_EQ(net::OK, callback.WaitForResult()); |
+ |
+ EXPECT_EQ(net::MEDIUM, |
+ cache.network_layer()->last_create_transaction_priority()); |
+ |
+ trans->SetPriority(net::HIGHEST); |
+ // Should trigger a new network transaction and pick up the new |
+ // priority. |
+ ReadAndVerifyTransaction(trans.get(), transaction); |
+ |
+ EXPECT_EQ(net::HIGHEST, |
+ cache.network_layer()->last_create_transaction_priority()); |
+ |
+ RemoveMockTransaction(&kRangeGET_TransactionOK); |
+} |