| 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 <stdint.h> | 5 #include <stdint.h> |
| 6 #include <string.h> | 6 #include <string.h> |
| 7 | 7 |
| 8 #include <stack> | 8 #include <stack> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 // Individual Tests --------------------------------------------------------- | 311 // Individual Tests --------------------------------------------------------- |
| 312 // Most of the individual tests involve multiple async steps. Each test | 312 // Most of the individual tests involve multiple async steps. Each test |
| 313 // is delineated with a section header. | 313 // is delineated with a section header. |
| 314 | 314 |
| 315 | 315 |
| 316 // ReadNonExistentResponse ------------------------------------------- | 316 // ReadNonExistentResponse ------------------------------------------- |
| 317 void ReadNonExistentResponse() { | 317 void ReadNonExistentResponse() { |
| 318 // 1. Attempt to ReadInfo | 318 // 1. Attempt to ReadInfo |
| 319 // 2. Attempt to ReadData | 319 // 2. Attempt to ReadData |
| 320 | 320 |
| 321 reader_.reset(service_->storage()->CreateResponseReader( | 321 reader_.reset( |
| 322 GURL(), 0, kNoSuchResponseId)); | 322 service_->storage()->CreateResponseReader(GURL(), kNoSuchResponseId)); |
| 323 | 323 |
| 324 // Push tasks in reverse order | 324 // Push tasks in reverse order |
| 325 PushNextTask(base::Bind(&AppCacheResponseTest::ReadNonExistentData, | 325 PushNextTask(base::Bind(&AppCacheResponseTest::ReadNonExistentData, |
| 326 base::Unretained(this))); | 326 base::Unretained(this))); |
| 327 PushNextTask(base::Bind(&AppCacheResponseTest::ReadNonExistentInfo, | 327 PushNextTask(base::Bind(&AppCacheResponseTest::ReadNonExistentInfo, |
| 328 base::Unretained(this))); | 328 base::Unretained(this))); |
| 329 ScheduleNextTask(); | 329 ScheduleNextTask(); |
| 330 } | 330 } |
| 331 | 331 |
| 332 void ReadNonExistentInfo() { | 332 void ReadNonExistentInfo() { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 347 base::Bind(&AppCacheResponseTest::OnReadComplete, | 347 base::Bind(&AppCacheResponseTest::OnReadComplete, |
| 348 base::Unretained(this))); | 348 base::Unretained(this))); |
| 349 EXPECT_TRUE(reader_->IsReadPending()); | 349 EXPECT_TRUE(reader_->IsReadPending()); |
| 350 expected_read_result_ = net::ERR_CACHE_MISS; | 350 expected_read_result_ = net::ERR_CACHE_MISS; |
| 351 } | 351 } |
| 352 | 352 |
| 353 // LoadResponseInfo_Miss ---------------------------------------------------- | 353 // LoadResponseInfo_Miss ---------------------------------------------------- |
| 354 void LoadResponseInfo_Miss() { | 354 void LoadResponseInfo_Miss() { |
| 355 PushNextTask(base::Bind(&AppCacheResponseTest::LoadResponseInfo_Miss_Verify, | 355 PushNextTask(base::Bind(&AppCacheResponseTest::LoadResponseInfo_Miss_Verify, |
| 356 base::Unretained(this))); | 356 base::Unretained(this))); |
| 357 service_->storage()->LoadResponseInfo(GURL(), 0, kNoSuchResponseId, | 357 service_->storage()->LoadResponseInfo(GURL(), kNoSuchResponseId, |
| 358 storage_delegate_.get()); | 358 storage_delegate_.get()); |
| 359 } | 359 } |
| 360 | 360 |
| 361 void LoadResponseInfo_Miss_Verify() { | 361 void LoadResponseInfo_Miss_Verify() { |
| 362 EXPECT_EQ(kNoSuchResponseId, storage_delegate_->loaded_info_id_); | 362 EXPECT_EQ(kNoSuchResponseId, storage_delegate_->loaded_info_id_); |
| 363 EXPECT_TRUE(!storage_delegate_->loaded_info_.get()); | 363 EXPECT_TRUE(!storage_delegate_->loaded_info_.get()); |
| 364 TestFinished(); | 364 TestFinished(); |
| 365 } | 365 } |
| 366 | 366 |
| 367 // LoadResponseInfo_Hit ---------------------------------------------------- | 367 // LoadResponseInfo_Hit ---------------------------------------------------- |
| 368 void LoadResponseInfo_Hit() { | 368 void LoadResponseInfo_Hit() { |
| 369 // This tests involves multiple async steps. | 369 // This tests involves multiple async steps. |
| 370 // 1. Write a response headers and body to storage | 370 // 1. Write a response headers and body to storage |
| 371 // a. headers | 371 // a. headers |
| 372 // b. body | 372 // b. body |
| 373 // 2. Use LoadResponseInfo to read the response headers back out | 373 // 2. Use LoadResponseInfo to read the response headers back out |
| 374 PushNextTask(base::Bind(&AppCacheResponseTest::LoadResponseInfo_Hit_Step2, | 374 PushNextTask(base::Bind(&AppCacheResponseTest::LoadResponseInfo_Hit_Step2, |
| 375 base::Unretained(this))); | 375 base::Unretained(this))); |
| 376 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 376 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 377 written_response_id_ = writer_->response_id(); | 377 written_response_id_ = writer_->response_id(); |
| 378 WriteBasicResponse(); | 378 WriteBasicResponse(); |
| 379 } | 379 } |
| 380 | 380 |
| 381 void LoadResponseInfo_Hit_Step2() { | 381 void LoadResponseInfo_Hit_Step2() { |
| 382 writer_.reset(); | 382 writer_.reset(); |
| 383 PushNextTask(base::Bind(&AppCacheResponseTest::LoadResponseInfo_Hit_Verify, | 383 PushNextTask(base::Bind(&AppCacheResponseTest::LoadResponseInfo_Hit_Verify, |
| 384 base::Unretained(this))); | 384 base::Unretained(this))); |
| 385 service_->storage()->LoadResponseInfo(GURL(), 0, written_response_id_, | 385 service_->storage()->LoadResponseInfo(GURL(), written_response_id_, |
| 386 storage_delegate_.get()); | 386 storage_delegate_.get()); |
| 387 } | 387 } |
| 388 | 388 |
| 389 void LoadResponseInfo_Hit_Verify() { | 389 void LoadResponseInfo_Hit_Verify() { |
| 390 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_); | 390 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_); |
| 391 EXPECT_TRUE(storage_delegate_->loaded_info_.get()); | 391 EXPECT_TRUE(storage_delegate_->loaded_info_.get()); |
| 392 EXPECT_TRUE(CompareHttpResponseInfos( | 392 EXPECT_TRUE(CompareHttpResponseInfos( |
| 393 write_info_buffer_->http_info.get(), | 393 write_info_buffer_->http_info.get(), |
| 394 storage_delegate_->loaded_info_->http_response_info())); | 394 storage_delegate_->loaded_info_->http_response_info())); |
| 395 EXPECT_EQ(basic_response_size(), | 395 EXPECT_EQ(basic_response_size(), |
| (...skipping 28 matching lines...) Expand all Loading... |
| 424 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, | 424 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, |
| 425 base::Unretained(this), "Second")); | 425 base::Unretained(this), "Second")); |
| 426 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata, | 426 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata, |
| 427 base::Unretained(this), "Metadata First")); | 427 base::Unretained(this), "Metadata First")); |
| 428 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo, | 428 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo, |
| 429 base::Unretained(this))); | 429 base::Unretained(this))); |
| 430 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, | 430 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata, |
| 431 base::Unretained(this), "Metadata First")); | 431 base::Unretained(this), "Metadata First")); |
| 432 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_ResetWriter, | 432 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_ResetWriter, |
| 433 base::Unretained(this))); | 433 base::Unretained(this))); |
| 434 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 434 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 435 written_response_id_ = writer_->response_id(); | 435 written_response_id_ = writer_->response_id(); |
| 436 WriteBasicResponse(); | 436 WriteBasicResponse(); |
| 437 } | 437 } |
| 438 | 438 |
| 439 void Metadata_ResetWriter() { | 439 void Metadata_ResetWriter() { |
| 440 writer_.reset(); | 440 writer_.reset(); |
| 441 ScheduleNextTask(); | 441 ScheduleNextTask(); |
| 442 } | 442 } |
| 443 | 443 |
| 444 void Metadata_WriteMetadata(const char* metadata) { | 444 void Metadata_WriteMetadata(const char* metadata) { |
| 445 metadata_writer_.reset(service_->storage()->CreateResponseMetadataWriter( | 445 metadata_writer_.reset(service_->storage()->CreateResponseMetadataWriter( |
| 446 0, written_response_id_)); | 446 written_response_id_)); |
| 447 scoped_refptr<IOBuffer> buffer(new WrappedIOBuffer(metadata)); | 447 scoped_refptr<IOBuffer> buffer(new WrappedIOBuffer(metadata)); |
| 448 WriteResponseMetadata(buffer.get(), strlen(metadata)); | 448 WriteResponseMetadata(buffer.get(), strlen(metadata)); |
| 449 } | 449 } |
| 450 | 450 |
| 451 void Metadata_LoadResponseInfo() { | 451 void Metadata_LoadResponseInfo() { |
| 452 metadata_writer_.reset(); | 452 metadata_writer_.reset(); |
| 453 storage_delegate_.reset(new MockStorageDelegate(this)); | 453 storage_delegate_.reset(new MockStorageDelegate(this)); |
| 454 service_->storage()->LoadResponseInfo(GURL(), 0, written_response_id_, | 454 service_->storage()->LoadResponseInfo(GURL(), written_response_id_, |
| 455 storage_delegate_.get()); | 455 storage_delegate_.get()); |
| 456 } | 456 } |
| 457 | 457 |
| 458 void Metadata_VerifyMetadata(const char* metadata) { | 458 void Metadata_VerifyMetadata(const char* metadata) { |
| 459 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_); | 459 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_); |
| 460 EXPECT_TRUE(storage_delegate_->loaded_info_.get()); | 460 EXPECT_TRUE(storage_delegate_->loaded_info_.get()); |
| 461 const net::HttpResponseInfo* read_head = | 461 const net::HttpResponseInfo* read_head = |
| 462 storage_delegate_->loaded_info_->http_response_info(); | 462 storage_delegate_->loaded_info_->http_response_info(); |
| 463 EXPECT_TRUE(read_head); | 463 EXPECT_TRUE(read_head); |
| 464 const int metadata_size = strlen(metadata); | 464 const int metadata_size = strlen(metadata); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 490 // Push tasks in reverse order. | 490 // Push tasks in reverse order. |
| 491 PushNextTask(base::Bind(&AppCacheResponseTest::Verify_AmountWritten, | 491 PushNextTask(base::Bind(&AppCacheResponseTest::Verify_AmountWritten, |
| 492 base::Unretained(this), expected_amount_written)); | 492 base::Unretained(this), expected_amount_written)); |
| 493 for (int i = 0; i < kNumBlocks; ++i) { | 493 for (int i = 0; i < kNumBlocks; ++i) { |
| 494 PushNextTask(base::Bind(&AppCacheResponseTest::WriteOneBlock, | 494 PushNextTask(base::Bind(&AppCacheResponseTest::WriteOneBlock, |
| 495 base::Unretained(this), kNumBlocks - i)); | 495 base::Unretained(this), kNumBlocks - i)); |
| 496 } | 496 } |
| 497 PushNextTask(base::Bind(&AppCacheResponseTest::WriteResponseHead, | 497 PushNextTask(base::Bind(&AppCacheResponseTest::WriteResponseHead, |
| 498 base::Unretained(this), head)); | 498 base::Unretained(this), head)); |
| 499 | 499 |
| 500 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 500 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 501 written_response_id_ = writer_->response_id(); | 501 written_response_id_ = writer_->response_id(); |
| 502 ScheduleNextTask(); | 502 ScheduleNextTask(); |
| 503 } | 503 } |
| 504 | 504 |
| 505 void Verify_AmountWritten(int expected_amount_written) { | 505 void Verify_AmountWritten(int expected_amount_written) { |
| 506 EXPECT_EQ(expected_amount_written, writer_->amount_written()); | 506 EXPECT_EQ(expected_amount_written, writer_->amount_written()); |
| 507 TestFinished(); | 507 TestFinished(); |
| 508 } | 508 } |
| 509 | 509 |
| 510 | 510 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 536 PushNextTask(base::Bind(&AppCacheResponseTest::ReadInBlocks, | 536 PushNextTask(base::Bind(&AppCacheResponseTest::ReadInBlocks, |
| 537 base::Unretained(this))); | 537 base::Unretained(this))); |
| 538 PushNextTask(base::Bind(&AppCacheResponseTest::WriteOutBlocks, | 538 PushNextTask(base::Bind(&AppCacheResponseTest::WriteOutBlocks, |
| 539 base::Unretained(this))); | 539 base::Unretained(this))); |
| 540 | 540 |
| 541 // Get them going. | 541 // Get them going. |
| 542 ScheduleNextTask(); | 542 ScheduleNextTask(); |
| 543 } | 543 } |
| 544 | 544 |
| 545 void WriteOutBlocks() { | 545 void WriteOutBlocks() { |
| 546 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 546 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 547 written_response_id_ = writer_->response_id(); | 547 written_response_id_ = writer_->response_id(); |
| 548 for (int i = 0; i < kNumBlocks; ++i) { | 548 for (int i = 0; i < kNumBlocks; ++i) { |
| 549 PushNextTask(base::Bind(&AppCacheResponseTest::WriteOneBlock, | 549 PushNextTask(base::Bind(&AppCacheResponseTest::WriteOneBlock, |
| 550 base::Unretained(this), kNumBlocks - i)); | 550 base::Unretained(this), kNumBlocks - i)); |
| 551 } | 551 } |
| 552 ScheduleNextTask(); | 552 ScheduleNextTask(); |
| 553 } | 553 } |
| 554 | 554 |
| 555 void WriteOneBlock(int block_number) { | 555 void WriteOneBlock(int block_number) { |
| 556 scoped_refptr<IOBuffer> io_buffer( | 556 scoped_refptr<IOBuffer> io_buffer( |
| 557 new IOBuffer(kBlockSize)); | 557 new IOBuffer(kBlockSize)); |
| 558 FillData(block_number, io_buffer->data(), kBlockSize); | 558 FillData(block_number, io_buffer->data(), kBlockSize); |
| 559 WriteResponseBody(io_buffer, kBlockSize); | 559 WriteResponseBody(io_buffer, kBlockSize); |
| 560 } | 560 } |
| 561 | 561 |
| 562 void ReadInBlocks() { | 562 void ReadInBlocks() { |
| 563 writer_.reset(); | 563 writer_.reset(); |
| 564 reader_.reset(service_->storage()->CreateResponseReader( | 564 reader_.reset(service_->storage()->CreateResponseReader( |
| 565 GURL(), 0, written_response_id_)); | 565 GURL(), written_response_id_)); |
| 566 for (int i = 0; i < kNumBlocks; ++i) { | 566 for (int i = 0; i < kNumBlocks; ++i) { |
| 567 PushNextTask(base::Bind(&AppCacheResponseTest::ReadOneBlock, | 567 PushNextTask(base::Bind(&AppCacheResponseTest::ReadOneBlock, |
| 568 base::Unretained(this), kNumBlocks - i)); | 568 base::Unretained(this), kNumBlocks - i)); |
| 569 } | 569 } |
| 570 ScheduleNextTask(); | 570 ScheduleNextTask(); |
| 571 } | 571 } |
| 572 | 572 |
| 573 void ReadOneBlock(int block_number) { | 573 void ReadOneBlock(int block_number) { |
| 574 PushNextTask(base::Bind(&AppCacheResponseTest::VerifyOneBlock, | 574 PushNextTask(base::Bind(&AppCacheResponseTest::VerifyOneBlock, |
| 575 base::Unretained(this), block_number)); | 575 base::Unretained(this), block_number)); |
| 576 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); | 576 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); |
| 577 } | 577 } |
| 578 | 578 |
| 579 void VerifyOneBlock(int block_number) { | 579 void VerifyOneBlock(int block_number) { |
| 580 EXPECT_TRUE(CheckData(block_number, read_buffer_->data(), kBlockSize)); | 580 EXPECT_TRUE(CheckData(block_number, read_buffer_->data(), kBlockSize)); |
| 581 ScheduleNextTask(); | 581 ScheduleNextTask(); |
| 582 } | 582 } |
| 583 | 583 |
| 584 void ReadAllAtOnce() { | 584 void ReadAllAtOnce() { |
| 585 PushNextTask(base::Bind(&AppCacheResponseTest::VerifyAllAtOnce, | 585 PushNextTask(base::Bind(&AppCacheResponseTest::VerifyAllAtOnce, |
| 586 base::Unretained(this))); | 586 base::Unretained(this))); |
| 587 reader_.reset(service_->storage()->CreateResponseReader( | 587 reader_.reset(service_->storage()->CreateResponseReader( |
| 588 GURL(), 0, written_response_id_)); | 588 GURL(), written_response_id_)); |
| 589 int big_size = kNumBlocks * kBlockSize; | 589 int big_size = kNumBlocks * kBlockSize; |
| 590 ReadResponseBody(new IOBuffer(big_size), big_size); | 590 ReadResponseBody(new IOBuffer(big_size), big_size); |
| 591 } | 591 } |
| 592 | 592 |
| 593 void VerifyAllAtOnce() { | 593 void VerifyAllAtOnce() { |
| 594 char* p = read_buffer_->data(); | 594 char* p = read_buffer_->data(); |
| 595 for (int i = 0; i < kNumBlocks; ++i, p += kBlockSize) | 595 for (int i = 0; i < kNumBlocks; ++i, p += kBlockSize) |
| 596 EXPECT_TRUE(CheckData(i + 1, p, kBlockSize)); | 596 EXPECT_TRUE(CheckData(i + 1, p, kBlockSize)); |
| 597 ScheduleNextTask(); | 597 ScheduleNextTask(); |
| 598 } | 598 } |
| 599 | 599 |
| 600 void ReadPastEOF() { | 600 void ReadPastEOF() { |
| 601 EXPECT_FALSE(reader_->IsReadPending()); | 601 EXPECT_FALSE(reader_->IsReadPending()); |
| 602 read_buffer_ = new IOBuffer(kBlockSize); | 602 read_buffer_ = new IOBuffer(kBlockSize); |
| 603 expected_read_result_ = 0; | 603 expected_read_result_ = 0; |
| 604 reader_->ReadData(read_buffer_.get(), | 604 reader_->ReadData(read_buffer_.get(), |
| 605 kBlockSize, | 605 kBlockSize, |
| 606 base::Bind(&AppCacheResponseTest::OnReadComplete, | 606 base::Bind(&AppCacheResponseTest::OnReadComplete, |
| 607 base::Unretained(this))); | 607 base::Unretained(this))); |
| 608 } | 608 } |
| 609 | 609 |
| 610 void ReadRange() { | 610 void ReadRange() { |
| 611 PushNextTask(base::Bind(&AppCacheResponseTest::VerifyRange, | 611 PushNextTask(base::Bind(&AppCacheResponseTest::VerifyRange, |
| 612 base::Unretained(this))); | 612 base::Unretained(this))); |
| 613 reader_.reset(service_->storage()->CreateResponseReader( | 613 reader_.reset(service_->storage()->CreateResponseReader( |
| 614 GURL(), 0, written_response_id_)); | 614 GURL(), written_response_id_)); |
| 615 reader_->SetReadRange(kBlockSize, kBlockSize); | 615 reader_->SetReadRange(kBlockSize, kBlockSize); |
| 616 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); | 616 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); |
| 617 } | 617 } |
| 618 | 618 |
| 619 void VerifyRange() { | 619 void VerifyRange() { |
| 620 EXPECT_TRUE(CheckData(2, read_buffer_->data(), kBlockSize)); | 620 EXPECT_TRUE(CheckData(2, read_buffer_->data(), kBlockSize)); |
| 621 ScheduleNextTask(); // ReadPastEOF is scheduled next | 621 ScheduleNextTask(); // ReadPastEOF is scheduled next |
| 622 } | 622 } |
| 623 | 623 |
| 624 void ReadRangePartiallyBeyondEOF() { | 624 void ReadRangePartiallyBeyondEOF() { |
| 625 PushNextTask(base::Bind(&AppCacheResponseTest::VerifyRangeBeyondEOF, | 625 PushNextTask(base::Bind(&AppCacheResponseTest::VerifyRangeBeyondEOF, |
| 626 base::Unretained(this))); | 626 base::Unretained(this))); |
| 627 reader_.reset(service_->storage()->CreateResponseReader( | 627 reader_.reset(service_->storage()->CreateResponseReader( |
| 628 GURL(), 0, written_response_id_)); | 628 GURL(), written_response_id_)); |
| 629 reader_->SetReadRange(kBlockSize, kNumBlocks * kBlockSize); | 629 reader_->SetReadRange(kBlockSize, kNumBlocks * kBlockSize); |
| 630 ReadResponseBody(new IOBuffer(kNumBlocks * kBlockSize), | 630 ReadResponseBody(new IOBuffer(kNumBlocks * kBlockSize), |
| 631 kNumBlocks * kBlockSize); | 631 kNumBlocks * kBlockSize); |
| 632 expected_read_result_ = (kNumBlocks - 1) * kBlockSize; | 632 expected_read_result_ = (kNumBlocks - 1) * kBlockSize; |
| 633 } | 633 } |
| 634 | 634 |
| 635 void VerifyRangeBeyondEOF() { | 635 void VerifyRangeBeyondEOF() { |
| 636 // Just verify the first 1k | 636 // Just verify the first 1k |
| 637 VerifyRange(); | 637 VerifyRange(); |
| 638 } | 638 } |
| 639 | 639 |
| 640 void ReadRangeFullyBeyondEOF() { | 640 void ReadRangeFullyBeyondEOF() { |
| 641 reader_.reset(service_->storage()->CreateResponseReader( | 641 reader_.reset(service_->storage()->CreateResponseReader( |
| 642 GURL(), 0, written_response_id_)); | 642 GURL(), written_response_id_)); |
| 643 reader_->SetReadRange((kNumBlocks * kBlockSize) + 1, kBlockSize); | 643 reader_->SetReadRange((kNumBlocks * kBlockSize) + 1, kBlockSize); |
| 644 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); | 644 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); |
| 645 expected_read_result_ = 0; | 645 expected_read_result_ = 0; |
| 646 } | 646 } |
| 647 | 647 |
| 648 // IOChaining ------------------------------------------- | 648 // IOChaining ------------------------------------------- |
| 649 void IOChaining() { | 649 void IOChaining() { |
| 650 // 1. Write several blocks out initiating the subsequent write | 650 // 1. Write several blocks out initiating the subsequent write |
| 651 // from within the completion callback of the previous write. | 651 // from within the completion callback of the previous write. |
| 652 // 2. Read and verify several blocks in similarly chaining reads. | 652 // 2. Read and verify several blocks in similarly chaining reads. |
| 653 | 653 |
| 654 // Push tasks in reverse order | 654 // Push tasks in reverse order |
| 655 PushNextTaskAsImmediate( | 655 PushNextTaskAsImmediate( |
| 656 base::Bind(&AppCacheResponseTest::ReadInBlocksImmediately, | 656 base::Bind(&AppCacheResponseTest::ReadInBlocksImmediately, |
| 657 base::Unretained(this))); | 657 base::Unretained(this))); |
| 658 PushNextTaskAsImmediate( | 658 PushNextTaskAsImmediate( |
| 659 base::Bind(&AppCacheResponseTest::WriteOutBlocksImmediately, | 659 base::Bind(&AppCacheResponseTest::WriteOutBlocksImmediately, |
| 660 base::Unretained(this))); | 660 base::Unretained(this))); |
| 661 | 661 |
| 662 // Get them going. | 662 // Get them going. |
| 663 ScheduleNextTask(); | 663 ScheduleNextTask(); |
| 664 } | 664 } |
| 665 | 665 |
| 666 void WriteOutBlocksImmediately() { | 666 void WriteOutBlocksImmediately() { |
| 667 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0)); | 667 writer_.reset(service_->storage()->CreateResponseWriter(GURL())); |
| 668 written_response_id_ = writer_->response_id(); | 668 written_response_id_ = writer_->response_id(); |
| 669 for (int i = 0; i < kNumBlocks; ++i) { | 669 for (int i = 0; i < kNumBlocks; ++i) { |
| 670 PushNextTaskAsImmediate( | 670 PushNextTaskAsImmediate( |
| 671 base::Bind(&AppCacheResponseTest::WriteOneBlock, | 671 base::Bind(&AppCacheResponseTest::WriteOneBlock, |
| 672 base::Unretained(this), kNumBlocks - i)); | 672 base::Unretained(this), kNumBlocks - i)); |
| 673 } | 673 } |
| 674 ScheduleNextTask(); | 674 ScheduleNextTask(); |
| 675 } | 675 } |
| 676 | 676 |
| 677 void ReadInBlocksImmediately() { | 677 void ReadInBlocksImmediately() { |
| 678 writer_.reset(); | 678 writer_.reset(); |
| 679 reader_.reset(service_->storage()->CreateResponseReader( | 679 reader_.reset(service_->storage()->CreateResponseReader( |
| 680 GURL(), 0, written_response_id_)); | 680 GURL(), written_response_id_)); |
| 681 for (int i = 0; i < kNumBlocks; ++i) { | 681 for (int i = 0; i < kNumBlocks; ++i) { |
| 682 PushNextTaskAsImmediate( | 682 PushNextTaskAsImmediate( |
| 683 base::Bind(&AppCacheResponseTest::ReadOneBlockImmediately, | 683 base::Bind(&AppCacheResponseTest::ReadOneBlockImmediately, |
| 684 base::Unretained(this), | 684 base::Unretained(this), |
| 685 kNumBlocks - i)); | 685 kNumBlocks - i)); |
| 686 } | 686 } |
| 687 ScheduleNextTask(); | 687 ScheduleNextTask(); |
| 688 } | 688 } |
| 689 | 689 |
| 690 void ReadOneBlockImmediately(int block_number) { | 690 void ReadOneBlockImmediately(int block_number) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 730 write_callback_was_called_ = false; | 730 write_callback_was_called_ = false; |
| 731 WriteOneBlock(5); | 731 WriteOneBlock(5); |
| 732 EXPECT_TRUE(writer_->IsWritePending()); | 732 EXPECT_TRUE(writer_->IsWritePending()); |
| 733 writer_.reset(); | 733 writer_.reset(); |
| 734 ScheduleNextTask(); | 734 ScheduleNextTask(); |
| 735 } | 735 } |
| 736 | 736 |
| 737 void ReadThenDelete() { | 737 void ReadThenDelete() { |
| 738 read_callback_was_called_ = false; | 738 read_callback_was_called_ = false; |
| 739 reader_.reset(service_->storage()->CreateResponseReader( | 739 reader_.reset(service_->storage()->CreateResponseReader( |
| 740 GURL(), 0, written_response_id_)); | 740 GURL(), written_response_id_)); |
| 741 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); | 741 ReadResponseBody(new IOBuffer(kBlockSize), kBlockSize); |
| 742 EXPECT_TRUE(reader_->IsReadPending()); | 742 EXPECT_TRUE(reader_->IsReadPending()); |
| 743 reader_.reset(); | 743 reader_.reset(); |
| 744 | 744 |
| 745 // Wait a moment to verify no callbacks. | 745 // Wait a moment to verify no callbacks. |
| 746 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 746 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 747 FROM_HERE, base::Bind(&AppCacheResponseTest::VerifyNoCallbacks, | 747 FROM_HERE, base::Bind(&AppCacheResponseTest::VerifyNoCallbacks, |
| 748 base::Unretained(this)), | 748 base::Unretained(this)), |
| 749 base::TimeDelta::FromMilliseconds(10)); | 749 base::TimeDelta::FromMilliseconds(10)); |
| 750 } | 750 } |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 816 | 816 |
| 817 TEST_F(AppCacheResponseTest, DeleteWithinCallbacks) { | 817 TEST_F(AppCacheResponseTest, DeleteWithinCallbacks) { |
| 818 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithinCallbacks); | 818 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithinCallbacks); |
| 819 } | 819 } |
| 820 | 820 |
| 821 TEST_F(AppCacheResponseTest, DeleteWithIOPending) { | 821 TEST_F(AppCacheResponseTest, DeleteWithIOPending) { |
| 822 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithIOPending); | 822 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithIOPending); |
| 823 } | 823 } |
| 824 | 824 |
| 825 } // namespace content | 825 } // namespace content |
| OLD | NEW |