| Index: content/browser/appcache/appcache_response_unittest.cc
|
| diff --git a/content/browser/appcache/appcache_response_unittest.cc b/content/browser/appcache/appcache_response_unittest.cc
|
| index 815e69789c850d500b4584cde68ce37b8950fd55..5f91f92fbd2eb3452f9c8de15c8b535480af5027 100644
|
| --- a/content/browser/appcache/appcache_response_unittest.cc
|
| +++ b/content/browser/appcache/appcache_response_unittest.cc
|
| @@ -191,6 +191,16 @@ class AppCacheResponseTest : public testing::Test {
|
| base::Unretained(this)));
|
| }
|
|
|
| + void WriteResponseMetadata(scoped_refptr<IOBuffer> io_buffer, int buf_len) {
|
| + EXPECT_FALSE(metadata_writer_->IsWritePending());
|
| + write_buffer_ = io_buffer;
|
| + expected_write_result_ = buf_len;
|
| + metadata_writer_->WriteMetadata(
|
| + write_buffer_.get(), buf_len,
|
| + base::Bind(&AppCacheResponseTest::OnMetadataWriteComplete,
|
| + base::Unretained(this)));
|
| + }
|
| +
|
| void ReadResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) {
|
| EXPECT_FALSE(reader_->IsReadPending());
|
| read_buffer_ = io_buffer;
|
| @@ -220,6 +230,12 @@ class AppCacheResponseTest : public testing::Test {
|
| ScheduleNextTask();
|
| }
|
|
|
| + void OnMetadataWriteComplete(int result) {
|
| + EXPECT_FALSE(metadata_writer_->IsWritePending());
|
| + EXPECT_EQ(expected_write_result_, result);
|
| + ScheduleNextTask();
|
| + }
|
| +
|
| void OnReadInfoComplete(int result) {
|
| EXPECT_FALSE(reader_->IsReadPending());
|
| EXPECT_EQ(expected_read_result_, result);
|
| @@ -373,6 +389,87 @@ class AppCacheResponseTest : public testing::Test {
|
| TestFinished();
|
| }
|
|
|
| + // Metadata -------------------------------------------------
|
| + void Metadata() {
|
| + // This tests involves multiple async steps.
|
| + // 1. Write a response headers and body to storage
|
| + // a. headers
|
| + // b. body
|
| + // 2. Write metadata "Metadata First" using AppCacheResponseMetadataWriter.
|
| + // 3. Check metadata was written.
|
| + // 4. Write metadata "Second".
|
| + // 5. Check metadata was written and was truncated .
|
| + // 6. Write metadata "".
|
| + // 7. Check metadata was deleted.
|
| +
|
| + // Push tasks in reverse order.
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata,
|
| + base::Unretained(this), ""));
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo,
|
| + base::Unretained(this)));
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata,
|
| + base::Unretained(this), ""));
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata,
|
| + base::Unretained(this), "Second"));
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo,
|
| + base::Unretained(this)));
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata,
|
| + base::Unretained(this), "Second"));
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata,
|
| + base::Unretained(this), "Metadata First"));
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo,
|
| + base::Unretained(this)));
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata,
|
| + base::Unretained(this), "Metadata First"));
|
| + PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_ResetWriter,
|
| + base::Unretained(this)));
|
| + writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0));
|
| + written_response_id_ = writer_->response_id();
|
| + WriteBasicResponse();
|
| + }
|
| +
|
| + void Metadata_ResetWriter() {
|
| + writer_.reset();
|
| + ScheduleNextTask();
|
| + }
|
| +
|
| + void Metadata_WriteMetadata(const char* metadata) {
|
| + metadata_writer_.reset(service_->storage()->CreateResponseMetadataWriter(
|
| + 0, written_response_id_));
|
| + scoped_refptr<IOBuffer> buffer(new WrappedIOBuffer(metadata));
|
| + WriteResponseMetadata(buffer.get(), strlen(metadata));
|
| + }
|
| +
|
| + void Metadata_LoadResponseInfo() {
|
| + metadata_writer_.reset();
|
| + storage_delegate_.reset(new MockStorageDelegate(this));
|
| + service_->storage()->LoadResponseInfo(GURL(), 0, written_response_id_,
|
| + storage_delegate_.get());
|
| + }
|
| +
|
| + void Metadata_VerifyMetadata(const char* metadata) {
|
| + EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_);
|
| + EXPECT_TRUE(storage_delegate_->loaded_info_.get());
|
| + const net::HttpResponseInfo* read_head =
|
| + storage_delegate_->loaded_info_->http_response_info();
|
| + EXPECT_TRUE(read_head);
|
| + const int metadata_size = strlen(metadata);
|
| + if (metadata_size) {
|
| + EXPECT_TRUE(read_head->metadata.get());
|
| + EXPECT_EQ(metadata_size, read_head->metadata->size());
|
| + EXPECT_EQ(0,
|
| + memcmp(metadata, read_head->metadata->data(), metadata_size));
|
| + } else {
|
| + EXPECT_FALSE(read_head->metadata.get());
|
| + }
|
| + EXPECT_TRUE(CompareHttpResponseInfos(
|
| + write_info_buffer_->http_info.get(),
|
| + storage_delegate_->loaded_info_->http_response_info()));
|
| + EXPECT_EQ(basic_response_size(),
|
| + storage_delegate_->loaded_info_->response_data_size());
|
| + ScheduleNextTask();
|
| + }
|
| +
|
| // AmountWritten ----------------------------------------------------
|
|
|
| void AmountWritten() {
|
| @@ -667,6 +764,7 @@ class AppCacheResponseTest : public testing::Test {
|
|
|
| int64 written_response_id_;
|
| scoped_ptr<AppCacheResponseWriter> writer_;
|
| + scoped_ptr<AppCacheResponseMetadataWriter> metadata_writer_;
|
| scoped_refptr<HttpResponseInfoIOBuffer> write_info_buffer_;
|
| scoped_refptr<IOBuffer> write_buffer_;
|
| int expected_write_result_;
|
| @@ -692,6 +790,10 @@ TEST_F(AppCacheResponseTest, LoadResponseInfo_Hit) {
|
| RunTestOnIOThread(&AppCacheResponseTest::LoadResponseInfo_Hit);
|
| }
|
|
|
| +TEST_F(AppCacheResponseTest, Metadata) {
|
| + RunTestOnIOThread(&AppCacheResponseTest::Metadata);
|
| +}
|
| +
|
| TEST_F(AppCacheResponseTest, AmountWritten) {
|
| RunTestOnIOThread(&AppCacheResponseTest::AmountWritten);
|
| }
|
|
|