Chromium Code Reviews| 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 ec4208b2a1d4c0977b0d83a1269dab89d5912977..5c7af9644811433286c75550f5f9ee7770e5e442 100644 |
| --- a/content/browser/cache_storage/cache_storage_cache_unittest.cc |
| +++ b/content/browser/cache_storage/cache_storage_cache_unittest.cc |
| @@ -295,6 +295,16 @@ class CacheStorageCacheTest : public testing::Test { |
| return callback_error_ == CACHE_STORAGE_OK; |
| } |
| + bool MatchAll(std::vector<ServiceWorkerResponse>* responses, |
| + ScopedVector<storage::BlobDataHandle>* body_handles) { |
| + base::RunLoop loop; |
| + cache_->MatchAll(base::Bind( |
| + &CacheStorageCacheTest::ResponsesAndErrorCallback, |
| + base::Unretained(this), loop.QuitClosure(), responses, body_handles)); |
| + loop.Run(); |
| + return callback_error_ == CACHE_STORAGE_OK; |
| + } |
| + |
| bool Delete(const ServiceWorkerFetchRequest& request) { |
| CacheStorageBatchOperation operation; |
| operation.operation_type = CACHE_STORAGE_CACHE_OPERATION_TYPE_DELETE; |
| @@ -370,6 +380,19 @@ class CacheStorageCacheTest : public testing::Test { |
| run_loop->Quit(); |
| } |
| + void ResponsesAndErrorCallback( |
| + const base::Closure& quit_closure, |
| + std::vector<ServiceWorkerResponse>* responses_out, |
| + ScopedVector<storage::BlobDataHandle>* body_handles_out, |
| + CacheStorageError error, |
| + const std::vector<ServiceWorkerResponse>& responses, |
| + ScopedVector<storage::BlobDataHandle> body_handles) { |
| + callback_error_ = error; |
| + *responses_out = responses; |
| + body_handles_out->swap(body_handles); |
| + quit_closure.Run(); |
| + } |
| + |
| void CloseCallback(base::RunLoop* run_loop) { |
| EXPECT_FALSE(callback_closed_); |
| callback_closed_ = true; |
| @@ -620,6 +643,97 @@ TEST_P(CacheStorageCacheTestP, MatchBody) { |
| EXPECT_STREQ(expected_blob_data_.c_str(), response_body.c_str()); |
| } |
| +TEST_P(CacheStorageCacheTestP, MatchAll_Empty) { |
| + std::vector<ServiceWorkerResponse> responses; |
| + ScopedVector<storage::BlobDataHandle> body_handles; |
| + EXPECT_TRUE(MatchAll(&responses, &body_handles)); |
| + EXPECT_TRUE(responses.empty()); |
| + EXPECT_TRUE(body_handles.empty()); |
| +} |
| + |
| +TEST_P(CacheStorageCacheTestP, MatchAll_NoBody) { |
| + EXPECT_TRUE(Put(no_body_request_, no_body_response_)); |
| + |
| + std::vector<ServiceWorkerResponse> responses; |
| + ScopedVector<storage::BlobDataHandle> body_handles; |
| + EXPECT_TRUE(MatchAll(&responses, &body_handles)); |
| + ASSERT_EQ(1u, responses.size()); |
| + ASSERT_EQ(1u, body_handles.size()); |
| + EXPECT_EQ(200, responses[0].status_code); |
| + EXPECT_STREQ("OK", responses[0].status_text.c_str()); |
|
jkarlin
2015/08/04 13:25:07
A "bool ResponsesEqual(const ServiceWorkerResponse
nhiroki
2015/08/05 08:03:04
Done.
|
| + EXPECT_STREQ("http://example.com/no_body.html", |
| + responses[0].url.spec().c_str()); |
| + EXPECT_STREQ("", responses[0].blob_uuid.c_str()); |
| + EXPECT_EQ(0u, responses[0].blob_size); |
| + EXPECT_FALSE(body_handles[0]); |
| +} |
| + |
| +TEST_P(CacheStorageCacheTestP, MatchAll_Body) { |
| + EXPECT_TRUE(Put(body_request_, body_response_)); |
| + |
| + std::vector<ServiceWorkerResponse> responses; |
| + ScopedVector<storage::BlobDataHandle> body_handles; |
| + EXPECT_TRUE(MatchAll(&responses, &body_handles)); |
| + ASSERT_EQ(1u, responses.size()); |
| + ASSERT_EQ(1u, body_handles.size()); |
| + EXPECT_EQ(200, responses[0].status_code); |
| + EXPECT_STREQ("OK", responses[0].status_text.c_str()); |
| + EXPECT_STREQ("http://example.com/body.html", responses[0].url.spec().c_str()); |
| + EXPECT_STRNE("", responses[0].blob_uuid.c_str()); |
| + EXPECT_EQ(expected_blob_data_.size(), responses[0].blob_size); |
| + |
| + std::string response_body; |
| + CopyBody(body_handles[0], &response_body); |
| + EXPECT_STREQ(expected_blob_data_.c_str(), response_body.c_str()); |
| +} |
| + |
| +TEST_P(CacheStorageCacheTestP, MatchAll_TwoResponsesThenOne) { |
| + EXPECT_TRUE(Put(no_body_request_, no_body_response_)); |
| + EXPECT_TRUE(Put(body_request_, body_response_)); |
| + |
| + std::vector<ServiceWorkerResponse> responses; |
| + ScopedVector<storage::BlobDataHandle> body_handles; |
| + EXPECT_TRUE(MatchAll(&responses, &body_handles)); |
| + ASSERT_EQ(2u, responses.size()); |
| + ASSERT_EQ(2u, body_handles.size()); |
| + |
| + // Order of returned responses is not guaranteed. |
| + std::set<std::string> matched_set; |
| + for (size_t i = 0; i < responses.size(); ++i) { |
| + EXPECT_EQ(200, responses[i].status_code); |
| + EXPECT_STREQ("OK", responses[i].status_text.c_str()); |
| + if (responses[i].url.spec() == "http://example.com/no_body.html") { |
| + EXPECT_STREQ("", responses[i].blob_uuid.c_str()); |
| + EXPECT_EQ(0u, responses[i].blob_size); |
| + EXPECT_FALSE(body_handles[i]); |
| + matched_set.insert(responses[i].url.spec()); |
| + } else if (responses[i].url.spec() == "http://example.com/body.html") { |
| + EXPECT_STREQ("http://example.com/body.html", |
| + responses[i].url.spec().c_str()); |
| + EXPECT_STRNE("", responses[i].blob_uuid.c_str()); |
| + EXPECT_EQ(expected_blob_data_.size(), responses[i].blob_size); |
| + matched_set.insert(responses[i].url.spec()); |
| + } |
| + } |
| + EXPECT_EQ(2u, matched_set.size()); |
| + |
| + responses.clear(); |
| + body_handles.clear(); |
| + |
| + EXPECT_TRUE(Delete(body_request_)); |
| + EXPECT_TRUE(MatchAll(&responses, &body_handles)); |
| + |
| + ASSERT_EQ(1u, responses.size()); |
| + ASSERT_EQ(1u, body_handles.size()); |
| + EXPECT_EQ(200, responses[0].status_code); |
| + EXPECT_STREQ("OK", responses[0].status_text.c_str()); |
| + EXPECT_STREQ("http://example.com/no_body.html", |
| + responses[0].url.spec().c_str()); |
| + EXPECT_STREQ("", responses[0].blob_uuid.c_str()); |
| + EXPECT_EQ(0u, responses[0].blob_size); |
| + EXPECT_FALSE(body_handles[0]); |
| +} |
| + |
| TEST_P(CacheStorageCacheTestP, Vary) { |
| body_request_.headers["vary_foo"] = "foo"; |
| body_response_.headers["vary"] = "vary_foo"; |