Http cache: Don't delete sparse entries when we
cancel the request.
BUG=20930
TEST=unittests
Review URL: http://codereview.chromium.org/193043
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25736 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc
index f2acda9..aada69b8 100644
--- a/net/http/http_cache_unittest.cc
+++ b/net/http/http_cache_unittest.cc
@@ -2298,6 +2298,42 @@
RemoveMockTransaction(&kRangeGET_TransactionOK);
}
+// Tests that we don't delete a sparse entry when we cancel a request.
+TEST(HttpCache, RangeGET_Cancel) {
+ MockHttpCache cache;
+ cache.http_cache()->set_enable_range_support(true);
+ AddMockTransaction(&kRangeGET_TransactionOK);
+
+ MockHttpRequest request(kRangeGET_TransactionOK);
+
+ Context* c = new Context(cache.http_cache()->CreateTransaction());
+
+ int rv = c->trans->Start(&request, &c->callback, NULL);
+ if (rv == net::ERR_IO_PENDING)
+ rv = c->callback.WaitForResult();
+
+ EXPECT_EQ(1, cache.network_layer()->transaction_count());
+ EXPECT_EQ(0, cache.disk_cache()->open_count());
+ EXPECT_EQ(1, cache.disk_cache()->create_count());
+
+ // Make sure that the entry has some data stored.
+ scoped_refptr<net::IOBufferWithSize> buf = new net::IOBufferWithSize(10);
+ rv = c->trans->Read(buf, buf->size(), &c->callback);
+ if (rv == net::ERR_IO_PENDING)
+ rv = c->callback.WaitForResult();
+ EXPECT_EQ(buf->size(), rv);
+
+ // Destroy the transaction.
+ delete c;
+
+ // Verify that the entry has not been deleted.
+ disk_cache::Entry* entry;
+ ASSERT_TRUE(cache.disk_cache()->OpenEntry(kRangeGET_TransactionOK.url,
+ &entry));
+ entry->Close();
+ RemoveMockTransaction(&kRangeGET_TransactionOK);
+}
+
#ifdef NDEBUG
// This test hits a NOTREACHED so it is a release mode only test.
TEST(HttpCache, RangeGET_OK_LoadOnlyFromCache) {