| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stack> | 5 #include <stack> |
| 6 #include <string> | 6 #include <string> |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 void WriteResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { | 184 void WriteResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { |
| 185 EXPECT_FALSE(writer_->IsWritePending()); | 185 EXPECT_FALSE(writer_->IsWritePending()); |
| 186 write_buffer_ = io_buffer; | 186 write_buffer_ = io_buffer; |
| 187 expected_write_result_ = buf_len; | 187 expected_write_result_ = buf_len; |
| 188 writer_->WriteData(write_buffer_.get(), | 188 writer_->WriteData(write_buffer_.get(), |
| 189 buf_len, | 189 buf_len, |
| 190 base::Bind(&AppCacheResponseTest::OnWriteComplete, | 190 base::Bind(&AppCacheResponseTest::OnWriteComplete, |
| 191 base::Unretained(this))); | 191 base::Unretained(this))); |
| 192 } | 192 } |
| 193 | 193 |
| 194 void WriteResponseMetadata(scoped_refptr<IOBuffer> io_buffer, int buf_len) { |
| 195 EXPECT_FALSE(metadata_writer_->IsWritePending()); |
| 196 write_buffer_ = io_buffer; |
| 197 expected_write_result_ = buf_len; |
| 198 metadata_writer_->WriteMetadata( |
| 199 write_buffer_.get(), buf_len, |
| 200 base::Bind(&AppCacheResponseTest::OnMetadataWriteComplete, |
| 201 base::Unretained(this))); |
| 202 } |
| 203 |
| 194 void ReadResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { | 204 void ReadResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { |
| 195 EXPECT_FALSE(reader_->IsReadPending()); | 205 EXPECT_FALSE(reader_->IsReadPending()); |
| 196 read_buffer_ = io_buffer; | 206 read_buffer_ = io_buffer; |
| 197 expected_read_result_ = buf_len; | 207 expected_read_result_ = buf_len; |
| 198 reader_->ReadData(read_buffer_.get(), | 208 reader_->ReadData(read_buffer_.get(), |
| 199 buf_len, | 209 buf_len, |
| 200 base::Bind(&AppCacheResponseTest::OnReadComplete, | 210 base::Bind(&AppCacheResponseTest::OnReadComplete, |
| 201 base::Unretained(this))); | 211 base::Unretained(this))); |
| 202 } | 212 } |
| 203 | 213 |
| 204 // AppCacheResponseReader / Writer completion callbacks | 214 // AppCacheResponseReader / Writer completion callbacks |
| 205 | 215 |
| 206 void OnWriteInfoComplete(int result) { | 216 void OnWriteInfoComplete(int result) { |
| 207 EXPECT_FALSE(writer_->IsWritePending()); | 217 EXPECT_FALSE(writer_->IsWritePending()); |
| 208 EXPECT_EQ(expected_write_result_, result); | 218 EXPECT_EQ(expected_write_result_, result); |
| 209 ScheduleNextTask(); | 219 ScheduleNextTask(); |
| 210 } | 220 } |
| 211 | 221 |
| 212 void OnWriteComplete(int result) { | 222 void OnWriteComplete(int result) { |
| 213 EXPECT_FALSE(writer_->IsWritePending()); | 223 EXPECT_FALSE(writer_->IsWritePending()); |
| 214 write_callback_was_called_ = true; | 224 write_callback_was_called_ = true; |
| 215 EXPECT_EQ(expected_write_result_, result); | 225 EXPECT_EQ(expected_write_result_, result); |
| 216 if (should_delete_writer_in_completion_callback_ && | 226 if (should_delete_writer_in_completion_callback_ && |
| 217 --writer_deletion_count_down_ == 0) { | 227 --writer_deletion_count_down_ == 0) { |
| 218 writer_.reset(); | 228 writer_.reset(); |
| 219 } | 229 } |
| 220 ScheduleNextTask(); | 230 ScheduleNextTask(); |
| 221 } | 231 } |
| 222 | 232 |
| 233 void OnMetadataWriteComplete(int result) { |
| 234 EXPECT_FALSE(metadata_writer_->IsWritePending()); |
| 235 EXPECT_EQ(expected_write_result_, result); |
| 236 ScheduleNextTask(); |
| 237 } |
| 238 |
| 223 void OnReadInfoComplete(int result) { | 239 void OnReadInfoComplete(int result) { |
| 224 EXPECT_FALSE(reader_->IsReadPending()); | 240 EXPECT_FALSE(reader_->IsReadPending()); |
| 225 EXPECT_EQ(expected_read_result_, result); | 241 EXPECT_EQ(expected_read_result_, result); |
| 226 ScheduleNextTask(); | 242 ScheduleNextTask(); |
| 227 } | 243 } |
| 228 | 244 |
| 229 void OnReadComplete(int result) { | 245 void OnReadComplete(int result) { |
| 230 EXPECT_FALSE(reader_->IsReadPending()); | 246 EXPECT_FALSE(reader_->IsReadPending()); |
| 231 read_callback_was_called_ = true; | 247 read_callback_was_called_ = true; |
| 232 EXPECT_EQ(expected_read_result_, result); | 248 EXPECT_EQ(expected_read_result_, result); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_); | 382 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_); |
| 367 EXPECT_TRUE(storage_delegate_->loaded_info_.get()); | 383 EXPECT_TRUE(storage_delegate_->loaded_info_.get()); |
| 368 EXPECT_TRUE(CompareHttpResponseInfos( | 384 EXPECT_TRUE(CompareHttpResponseInfos( |
| 369 write_info_buffer_->http_info.get(), | 385 write_info_buffer_->http_info.get(), |
| 370 storage_delegate_->loaded_info_->http_response_info())); | 386 storage_delegate_->loaded_info_->http_response_info())); |
| 371 EXPECT_EQ(basic_response_size(), | 387 EXPECT_EQ(basic_response_size(), |
| 372 storage_delegate_->loaded_info_->response_data_size()); | 388 storage_delegate_->loaded_info_->response_data_size()); |
| 373 TestFinished(); | 389 TestFinished(); |
| 374 } | 390 } |
| 375 | 391 |
| 392 // Metadata ------------------------------------------------- |
| 393 void Metadata() { |
| 394 // This tests involves multiple async steps. |
| 395 // 1. Write a response headers and body to storage |
| 396 // a. headers |
| 397 // b. body |
| 398 // 2. Write metadata "Metadata First" using AppCacheResponseMetadataWriter. |
| 399 // 3. Check metadata was written. |
| 400 // 4. Write metadata "Second". |
| 401 // 5. Check metadata was written and was truncated . |
| 402 // 6. Write metadata "". |
| 403 // 7. Check metadata was deleted. |
| 404 |
| 405 // Push tasks in reverse order. |
| 406 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata, |
| 407 base::Unretained(this), "")); |
| 408 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo, |
| 409 base::Unretained(this))); |
| 410 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, |
| 411 base::Unretained(this), "")); |
| 412 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata, |
| 413 base::Unretained(this), "Second")); |
| 414 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo, |
| 415 base::Unretained(this))); |
| 416 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, |
| 417 base::Unretained(this), "Second")); |
| 418 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata, |
| 419 base::Unretained(this), "Metadata First")); |
| 420 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo, |
| 421 base::Unretained(this))); |
| 422 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, |
| 423 base::Unretained(this), "Metadata First")); |
| 424 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_ResetWriter, |
| 425 base::Unretained(this))); |
| 426 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); |
| 427 written_response_id_ = writer_->response_id(); |
| 428 WriteBasicResponse(); |
| 429 } |
| 430 |
| 431 void Metadata_ResetWriter() { |
| 432 writer_.reset(); |
| 433 ScheduleNextTask(); |
| 434 } |
| 435 |
| 436 void Metadata_WriteMetadata(const char* metadata) { |
| 437 metadata_writer_.reset(service_->storage()->CreateResponseMetadataWriter( |
| 438 0, written_response_id_)); |
| 439 scoped_refptr<IOBuffer> buffer(new WrappedIOBuffer(metadata)); |
| 440 WriteResponseMetadata(buffer.get(), strlen(metadata)); |
| 441 } |
| 442 |
| 443 void Metadata_LoadResponseInfo() { |
| 444 metadata_writer_.reset(); |
| 445 storage_delegate_.reset(new MockStorageDelegate(this)); |
| 446 service_->storage()->LoadResponseInfo(GURL(), 0, written_response_id_, |
| 447 storage_delegate_.get()); |
| 448 } |
| 449 |
| 450 void Metadata_VerifyMetadata(const char* metadata) { |
| 451 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_); |
| 452 EXPECT_TRUE(storage_delegate_->loaded_info_.get()); |
| 453 const net::HttpResponseInfo* read_head = |
| 454 storage_delegate_->loaded_info_->http_response_info(); |
| 455 EXPECT_TRUE(read_head); |
| 456 const int metadata_size = strlen(metadata); |
| 457 if (metadata_size) { |
| 458 EXPECT_TRUE(read_head->metadata.get()); |
| 459 EXPECT_EQ(metadata_size, read_head->metadata->size()); |
| 460 EXPECT_EQ(0, |
| 461 memcmp(metadata, read_head->metadata->data(), metadata_size)); |
| 462 } else { |
| 463 EXPECT_FALSE(read_head->metadata.get()); |
| 464 } |
| 465 EXPECT_TRUE(CompareHttpResponseInfos( |
| 466 write_info_buffer_->http_info.get(), |
| 467 storage_delegate_->loaded_info_->http_response_info())); |
| 468 EXPECT_EQ(basic_response_size(), |
| 469 storage_delegate_->loaded_info_->response_data_size()); |
| 470 ScheduleNextTask(); |
| 471 } |
| 472 |
| 376 // AmountWritten ---------------------------------------------------- | 473 // AmountWritten ---------------------------------------------------- |
| 377 | 474 |
| 378 void AmountWritten() { | 475 void AmountWritten() { |
| 379 static const char kHttpHeaders[] = "HTTP/1.0 200 OK\0\0"; | 476 static const char kHttpHeaders[] = "HTTP/1.0 200 OK\0\0"; |
| 380 std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders)); | 477 std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders)); |
| 381 net::HttpResponseInfo* head = MakeHttpResponseInfo(raw_headers); | 478 net::HttpResponseInfo* head = MakeHttpResponseInfo(raw_headers); |
| 382 int expected_amount_written = | 479 int expected_amount_written = |
| 383 GetHttpResponseInfoSize(head) + kNumBlocks * kBlockSize; | 480 GetHttpResponseInfoSize(head) + kNumBlocks * kBlockSize; |
| 384 | 481 |
| 385 // Push tasks in reverse order. | 482 // Push tasks in reverse order. |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 scoped_ptr<AppCacheResponseReader> reader_; | 757 scoped_ptr<AppCacheResponseReader> reader_; |
| 661 scoped_refptr<HttpResponseInfoIOBuffer> read_info_buffer_; | 758 scoped_refptr<HttpResponseInfoIOBuffer> read_info_buffer_; |
| 662 scoped_refptr<IOBuffer> read_buffer_; | 759 scoped_refptr<IOBuffer> read_buffer_; |
| 663 int expected_read_result_; | 760 int expected_read_result_; |
| 664 bool should_delete_reader_in_completion_callback_; | 761 bool should_delete_reader_in_completion_callback_; |
| 665 int reader_deletion_count_down_; | 762 int reader_deletion_count_down_; |
| 666 bool read_callback_was_called_; | 763 bool read_callback_was_called_; |
| 667 | 764 |
| 668 int64 written_response_id_; | 765 int64 written_response_id_; |
| 669 scoped_ptr<AppCacheResponseWriter> writer_; | 766 scoped_ptr<AppCacheResponseWriter> writer_; |
| 767 scoped_ptr<AppCacheResponseMetadataWriter> metadata_writer_; |
| 670 scoped_refptr<HttpResponseInfoIOBuffer> write_info_buffer_; | 768 scoped_refptr<HttpResponseInfoIOBuffer> write_info_buffer_; |
| 671 scoped_refptr<IOBuffer> write_buffer_; | 769 scoped_refptr<IOBuffer> write_buffer_; |
| 672 int expected_write_result_; | 770 int expected_write_result_; |
| 673 bool should_delete_writer_in_completion_callback_; | 771 bool should_delete_writer_in_completion_callback_; |
| 674 int writer_deletion_count_down_; | 772 int writer_deletion_count_down_; |
| 675 bool write_callback_was_called_; | 773 bool write_callback_was_called_; |
| 676 | 774 |
| 677 static scoped_ptr<base::Thread> io_thread_; | 775 static scoped_ptr<base::Thread> io_thread_; |
| 678 }; | 776 }; |
| 679 | 777 |
| 680 // static | 778 // static |
| 681 scoped_ptr<base::Thread> AppCacheResponseTest::io_thread_; | 779 scoped_ptr<base::Thread> AppCacheResponseTest::io_thread_; |
| 682 | 780 |
| 683 TEST_F(AppCacheResponseTest, ReadNonExistentResponse) { | 781 TEST_F(AppCacheResponseTest, ReadNonExistentResponse) { |
| 684 RunTestOnIOThread(&AppCacheResponseTest::ReadNonExistentResponse); | 782 RunTestOnIOThread(&AppCacheResponseTest::ReadNonExistentResponse); |
| 685 } | 783 } |
| 686 | 784 |
| 687 TEST_F(AppCacheResponseTest, LoadResponseInfo_Miss) { | 785 TEST_F(AppCacheResponseTest, LoadResponseInfo_Miss) { |
| 688 RunTestOnIOThread(&AppCacheResponseTest::LoadResponseInfo_Miss); | 786 RunTestOnIOThread(&AppCacheResponseTest::LoadResponseInfo_Miss); |
| 689 } | 787 } |
| 690 | 788 |
| 691 TEST_F(AppCacheResponseTest, LoadResponseInfo_Hit) { | 789 TEST_F(AppCacheResponseTest, LoadResponseInfo_Hit) { |
| 692 RunTestOnIOThread(&AppCacheResponseTest::LoadResponseInfo_Hit); | 790 RunTestOnIOThread(&AppCacheResponseTest::LoadResponseInfo_Hit); |
| 693 } | 791 } |
| 694 | 792 |
| 793 TEST_F(AppCacheResponseTest, Metadata) { |
| 794 RunTestOnIOThread(&AppCacheResponseTest::Metadata); |
| 795 } |
| 796 |
| 695 TEST_F(AppCacheResponseTest, AmountWritten) { | 797 TEST_F(AppCacheResponseTest, AmountWritten) { |
| 696 RunTestOnIOThread(&AppCacheResponseTest::AmountWritten); | 798 RunTestOnIOThread(&AppCacheResponseTest::AmountWritten); |
| 697 } | 799 } |
| 698 | 800 |
| 699 TEST_F(AppCacheResponseTest, WriteThenVariouslyReadResponse) { | 801 TEST_F(AppCacheResponseTest, WriteThenVariouslyReadResponse) { |
| 700 RunTestOnIOThread(&AppCacheResponseTest::WriteThenVariouslyReadResponse); | 802 RunTestOnIOThread(&AppCacheResponseTest::WriteThenVariouslyReadResponse); |
| 701 } | 803 } |
| 702 | 804 |
| 703 TEST_F(AppCacheResponseTest, IOChaining) { | 805 TEST_F(AppCacheResponseTest, IOChaining) { |
| 704 RunTestOnIOThread(&AppCacheResponseTest::IOChaining); | 806 RunTestOnIOThread(&AppCacheResponseTest::IOChaining); |
| 705 } | 807 } |
| 706 | 808 |
| 707 TEST_F(AppCacheResponseTest, DeleteWithinCallbacks) { | 809 TEST_F(AppCacheResponseTest, DeleteWithinCallbacks) { |
| 708 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithinCallbacks); | 810 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithinCallbacks); |
| 709 } | 811 } |
| 710 | 812 |
| 711 TEST_F(AppCacheResponseTest, DeleteWithIOPending) { | 813 TEST_F(AppCacheResponseTest, DeleteWithIOPending) { |
| 712 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithIOPending); | 814 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithIOPending); |
| 713 } | 815 } |
| 714 | 816 |
| 715 } // namespace content | 817 } // namespace content |
| OLD | NEW |