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

Unified Diff: content/browser/cache_storage/cache_storage_cache_unittest.cc

Issue 1113303003: CacheStorage: Support multiple batch operations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_responses
Patch Set: add comments Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/cache_storage/cache_storage_cache_unittest.cc
diff --git a/content/browser/cache_storage/cache_storage_cache_unittest.cc b/content/browser/cache_storage/cache_storage_cache_unittest.cc
index c1d8224d0844117dbef62cd31970987fa1c2d66e..57350d2cc27a2b064de51fa0a8c963a0267e9923 100644
--- a/content/browser/cache_storage/cache_storage_cache_unittest.cc
+++ b/content/browser/cache_storage/cache_storage_cache_unittest.cc
@@ -252,21 +252,12 @@ class CacheStorageCacheTest : public testing::Test {
request.is_reload));
}
- scoped_ptr<ServiceWorkerResponse> CopyFetchResponse(
- const ServiceWorkerResponse& response) {
- scoped_ptr<ServiceWorkerResponse> sw_response(new ServiceWorkerResponse(
- response.url, response.status_code, response.status_text,
- response.response_type, response.headers, response.blob_uuid,
- response.blob_size, response.stream_url));
- return sw_response.Pass();
- }
-
- bool Put(const ServiceWorkerFetchRequest& request,
- const ServiceWorkerResponse& response) {
+ CacheStorageError BatchOperation(
+ const std::vector<CacheStorageBatchOperation>& operations) {
scoped_ptr<base::RunLoop> loop(new base::RunLoop());
- cache_->Put(
- CopyFetchRequest(request), CopyFetchResponse(response),
+ cache_->BatchOperation(
+ operations,
base::Bind(&CacheStorageCacheTest::ErrorTypeCallback,
base::Unretained(this), base::Unretained(loop.get())));
// TODO(jkarlin): These functions should use base::RunLoop().RunUntilIdle()
@@ -274,7 +265,19 @@ class CacheStorageCacheTest : public testing::Test {
// thread.
loop->Run();
- return callback_error_ == CACHE_STORAGE_OK;
+ return callback_error_;
+ }
+
+ bool Put(const ServiceWorkerFetchRequest& request,
+ const ServiceWorkerResponse& response) {
+ CacheStorageBatchOperation operation;
+ operation.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT;
+ operation.request = request;
+ operation.response = response;
+
+ CacheStorageError error =
+ BatchOperation(std::vector<CacheStorageBatchOperation>(1, operation));
+ return error == CACHE_STORAGE_OK;
}
bool Match(const ServiceWorkerFetchRequest& request) {
@@ -290,15 +293,13 @@ class CacheStorageCacheTest : public testing::Test {
}
bool Delete(const ServiceWorkerFetchRequest& request) {
- scoped_ptr<base::RunLoop> loop(new base::RunLoop());
-
- cache_->Delete(
- CopyFetchRequest(request),
- base::Bind(&CacheStorageCacheTest::ErrorTypeCallback,
- base::Unretained(this), base::Unretained(loop.get())));
- loop->Run();
+ CacheStorageBatchOperation operation;
+ operation.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_DELETE;
+ operation.request = request;
- return callback_error_ == CACHE_STORAGE_OK;
+ CacheStorageError error =
+ BatchOperation(std::vector<CacheStorageBatchOperation>(1, operation));
+ return error == CACHE_STORAGE_OK;
}
bool Keys() {
@@ -456,6 +457,44 @@ TEST_P(CacheStorageCacheTestP, PutBody) {
EXPECT_TRUE(Put(body_request_, body_response_));
}
+TEST_P(CacheStorageCacheTestP, PutBody_Multiple) {
+ CacheStorageBatchOperation operation1;
+ operation1.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT;
+ operation1.request = body_request_;
+ operation1.request.url = GURL("http://example.com/1");
+ operation1.response = body_response_;
+ operation1.response.url = GURL("http://example.com/1");
+
+ CacheStorageBatchOperation operation2;
+ operation2.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT;
+ operation2.request = body_request_;
+ operation2.request.url = GURL("http://example.com/2");
+ operation2.response = body_response_;
+ operation2.response.url = GURL("http://example.com/2");
+
+ CacheStorageBatchOperation operation3;
+ operation3.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT;
+ operation3.request = body_request_;
+ operation3.request.url = GURL("http://example.com/3");
+ operation3.response = body_response_;
+ operation3.response.url = GURL("http://example.com/3");
+
+ std::vector<CacheStorageBatchOperation> operations;
+ operations.push_back(operation1);
+ operations.push_back(operation2);
+ operations.push_back(operation3);
+
+ EXPECT_EQ(CACHE_STORAGE_OK, BatchOperation(operations));
+ EXPECT_TRUE(Match(operation1.request));
+ EXPECT_TRUE(Match(operation2.request));
+ EXPECT_TRUE(Match(operation3.request));
+}
+
+// TODO(nhiroki): Add a test for the case where one of PUT operations fails.
+// Currently there is no handy way to fail only one operation in a batch.
+// This could be easily achieved after adding some security checks in the
+// browser side (http://crbug.com/425505).
+
TEST_P(CacheStorageCacheTestP, ResponseURLDiffersFromRequestURL) {
no_body_response_.url = GURL("http://example.com/foobar");
EXPECT_STRNE("http://example.com/foobar",
@@ -475,11 +514,16 @@ TEST_P(CacheStorageCacheTestP, ResponseURLEmpty) {
}
TEST_F(CacheStorageCacheTest, PutBodyDropBlobRef) {
+ CacheStorageBatchOperation operation;
+ operation.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT;
+ operation.request = body_request_;
+ operation.response = body_response_;
+
scoped_ptr<base::RunLoop> loop(new base::RunLoop());
- cache_->Put(CopyFetchRequest(body_request_),
- CopyFetchResponse(body_response_),
- base::Bind(&CacheStorageCacheTestP::ErrorTypeCallback,
- base::Unretained(this), base::Unretained(loop.get())));
+ cache_->BatchOperation(
+ std::vector<CacheStorageBatchOperation>(1, operation),
+ base::Bind(&CacheStorageCacheTestP::ErrorTypeCallback,
+ base::Unretained(this), base::Unretained(loop.get())));
// The handle should be held by the cache now so the deref here should be
// okay.
blob_handle_.reset();
@@ -502,6 +546,28 @@ TEST_P(CacheStorageCacheTestP, PutReplace) {
EXPECT_FALSE(callback_response_data_);
}
+TEST_P(CacheStorageCacheTestP, PutReplcaceInBatch) {
+ CacheStorageBatchOperation operation1;
+ operation1.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT;
+ operation1.request = body_request_;
+ operation1.response = no_body_response_;
+
+ CacheStorageBatchOperation operation2;
+ operation2.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT;
+ operation2.request = body_request_;
+ operation2.response = body_response_;
+
+ std::vector<CacheStorageBatchOperation> operations;
+ operations.push_back(operation1);
+ operations.push_back(operation2);
+
+ EXPECT_EQ(CACHE_STORAGE_OK, BatchOperation(operations));
+
+ // |operation2| should win.
+ EXPECT_TRUE(Match(operation2.request));
+ EXPECT_TRUE(callback_response_data_);
+}
+
TEST_P(CacheStorageCacheTestP, MatchNoBody) {
EXPECT_TRUE(Put(no_body_request_, no_body_response_));
EXPECT_TRUE(Match(no_body_request_));
@@ -761,23 +827,29 @@ TEST_P(CacheStorageCacheTestP, VerifySerialScheduling) {
int sequence_out = -1;
- scoped_ptr<ServiceWorkerResponse> response1 =
- CopyFetchResponse(body_response_);
+ CacheStorageBatchOperation operation1;
+ operation1.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT;
+ operation1.request = body_request_;
+ operation1.response = body_response_;
+
scoped_ptr<base::RunLoop> close_loop1(new base::RunLoop());
- cache_->Put(
- CopyFetchRequest(body_request_), response1.Pass(),
+ cache_->BatchOperation(
+ std::vector<CacheStorageBatchOperation>(1, operation1),
base::Bind(&CacheStorageCacheTest::SequenceCallback,
base::Unretained(this), 1, &sequence_out, close_loop1.get()));
// Blocks on opening the cache entry.
base::RunLoop().RunUntilIdle();
+ CacheStorageBatchOperation operation2;
+ operation2.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT;
+ operation2.request = body_request_;
+ operation2.response = body_response_;
+
delayable_backend->set_delay_open(false);
- scoped_ptr<ServiceWorkerResponse> response2 =
- CopyFetchResponse(body_response_);
scoped_ptr<base::RunLoop> close_loop2(new base::RunLoop());
- cache_->Put(
- CopyFetchRequest(body_request_), response2.Pass(),
+ cache_->BatchOperation(
+ std::vector<CacheStorageBatchOperation>(1, operation2),
base::Bind(&CacheStorageCacheTest::SequenceCallback,
base::Unretained(this), 2, &sequence_out, close_loop2.get()));
« no previous file with comments | « content/browser/cache_storage/cache_storage_cache.cc ('k') | content/browser/cache_storage/cache_storage_dispatcher_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698