| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 } else { | 104 } else { |
| 105 RequestComplete(); | 105 RequestComplete(); |
| 106 } | 106 } |
| 107 } | 107 } |
| 108 | 108 |
| 109 void ReadSome(net::URLRequest* request) { | 109 void ReadSome(net::URLRequest* request) { |
| 110 DCHECK(amount_received_ + kBlockSize <= kNumBlocks * kBlockSize); | 110 DCHECK(amount_received_ + kBlockSize <= kNumBlocks * kBlockSize); |
| 111 scoped_refptr<IOBuffer> wrapped_buffer( | 111 scoped_refptr<IOBuffer> wrapped_buffer( |
| 112 new net::WrappedIOBuffer(received_data_->data() + amount_received_)); | 112 new net::WrappedIOBuffer(received_data_->data() + amount_received_)); |
| 113 int bytes_read = 0; | 113 int bytes_read = 0; |
| 114 EXPECT_FALSE(request->Read(wrapped_buffer, kBlockSize, &bytes_read)); | 114 EXPECT_FALSE( |
| 115 request->Read(wrapped_buffer.get(), kBlockSize, &bytes_read)); |
| 115 EXPECT_EQ(0, bytes_read); | 116 EXPECT_EQ(0, bytes_read); |
| 116 } | 117 } |
| 117 | 118 |
| 118 void RequestComplete() { | 119 void RequestComplete() { |
| 119 test_->ScheduleNextTask(); | 120 test_->ScheduleNextTask(); |
| 120 } | 121 } |
| 121 | 122 |
| 122 AppCacheURLRequestJobTest* test_; | 123 AppCacheURLRequestJobTest* test_; |
| 123 net::HttpResponseInfo received_info_; | 124 net::HttpResponseInfo received_info_; |
| 124 scoped_refptr<net::IOBuffer> received_data_; | 125 scoped_refptr<net::IOBuffer> received_data_; |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 task.Run(); | 246 task.Run(); |
| 246 else | 247 else |
| 247 base::MessageLoop::current()->PostTask(FROM_HERE, task); | 248 base::MessageLoop::current()->PostTask(FROM_HERE, task); |
| 248 } | 249 } |
| 249 | 250 |
| 250 // Wrappers to call AppCacheResponseReader/Writer Read and Write methods | 251 // Wrappers to call AppCacheResponseReader/Writer Read and Write methods |
| 251 | 252 |
| 252 void WriteBasicResponse() { | 253 void WriteBasicResponse() { |
| 253 scoped_refptr<IOBuffer> body(new WrappedIOBuffer(kHttpBasicBody)); | 254 scoped_refptr<IOBuffer> body(new WrappedIOBuffer(kHttpBasicBody)); |
| 254 std::string raw_headers(kHttpBasicHeaders, arraysize(kHttpBasicHeaders)); | 255 std::string raw_headers(kHttpBasicHeaders, arraysize(kHttpBasicHeaders)); |
| 255 WriteResponse(MakeHttpResponseInfo(raw_headers), body, | 256 WriteResponse( |
| 256 strlen(kHttpBasicBody)); | 257 MakeHttpResponseInfo(raw_headers), body.get(), strlen(kHttpBasicBody)); |
| 257 } | 258 } |
| 258 | 259 |
| 259 void WriteResponse(net::HttpResponseInfo* head, | 260 void WriteResponse(net::HttpResponseInfo* head, |
| 260 IOBuffer* body, int body_len) { | 261 IOBuffer* body, int body_len) { |
| 261 DCHECK(body); | 262 DCHECK(body); |
| 262 scoped_refptr<IOBuffer> body_ref(body); | 263 scoped_refptr<IOBuffer> body_ref(body); |
| 263 PushNextTask(base::Bind(&AppCacheURLRequestJobTest::WriteResponseBody, | 264 PushNextTask(base::Bind(&AppCacheURLRequestJobTest::WriteResponseBody, |
| 264 base::Unretained(this), body_ref, body_len)); | 265 base::Unretained(this), body_ref, body_len)); |
| 265 WriteResponseHead(head); | 266 WriteResponseHead(head); |
| 266 } | 267 } |
| 267 | 268 |
| 268 void WriteResponseHead(net::HttpResponseInfo* head) { | 269 void WriteResponseHead(net::HttpResponseInfo* head) { |
| 269 EXPECT_FALSE(writer_->IsWritePending()); | 270 EXPECT_FALSE(writer_->IsWritePending()); |
| 270 expected_write_result_ = GetHttpResponseInfoSize(head); | 271 expected_write_result_ = GetHttpResponseInfoSize(head); |
| 271 write_info_buffer_ = new HttpResponseInfoIOBuffer(head); | 272 write_info_buffer_ = new HttpResponseInfoIOBuffer(head); |
| 272 writer_->WriteInfo( | 273 writer_->WriteInfo( |
| 273 write_info_buffer_, | 274 write_info_buffer_.get(), |
| 274 base::Bind(&AppCacheURLRequestJobTest::OnWriteInfoComplete, | 275 base::Bind(&AppCacheURLRequestJobTest::OnWriteInfoComplete, |
| 275 base::Unretained(this))); | 276 base::Unretained(this))); |
| 276 } | 277 } |
| 277 | 278 |
| 278 void WriteResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { | 279 void WriteResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { |
| 279 EXPECT_FALSE(writer_->IsWritePending()); | 280 EXPECT_FALSE(writer_->IsWritePending()); |
| 280 write_buffer_ = io_buffer; | 281 write_buffer_ = io_buffer; |
| 281 expected_write_result_ = buf_len; | 282 expected_write_result_ = buf_len; |
| 282 writer_->WriteData( | 283 writer_->WriteData(write_buffer_.get(), |
| 283 write_buffer_, buf_len, | 284 buf_len, |
| 284 base::Bind(&AppCacheURLRequestJobTest::OnWriteComplete, | 285 base::Bind(&AppCacheURLRequestJobTest::OnWriteComplete, |
| 285 base::Unretained(this))); | 286 base::Unretained(this))); |
| 286 } | 287 } |
| 287 | 288 |
| 288 void ReadResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { | 289 void ReadResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { |
| 289 EXPECT_FALSE(reader_->IsReadPending()); | 290 EXPECT_FALSE(reader_->IsReadPending()); |
| 290 read_buffer_ = io_buffer; | 291 read_buffer_ = io_buffer; |
| 291 expected_read_result_ = buf_len; | 292 expected_read_result_ = buf_len; |
| 292 reader_->ReadData( | 293 reader_->ReadData(read_buffer_.get(), |
| 293 read_buffer_, buf_len, | 294 buf_len, |
| 294 base::Bind(&AppCacheURLRequestJobTest::OnReadComplete, | 295 base::Bind(&AppCacheURLRequestJobTest::OnReadComplete, |
| 295 base::Unretained(this))); | 296 base::Unretained(this))); |
| 296 } | 297 } |
| 297 | 298 |
| 298 // AppCacheResponseReader / Writer completion callbacks | 299 // AppCacheResponseReader / Writer completion callbacks |
| 299 | 300 |
| 300 void OnWriteInfoComplete(int result) { | 301 void OnWriteInfoComplete(int result) { |
| 301 EXPECT_FALSE(writer_->IsWritePending()); | 302 EXPECT_FALSE(writer_->IsWritePending()); |
| 302 EXPECT_EQ(expected_write_result_, result); | 303 EXPECT_EQ(expected_write_result_, result); |
| 303 ScheduleNextTask(); | 304 ScheduleNextTask(); |
| 304 } | 305 } |
| 305 | 306 |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 if (start_after_delivery_orders) { | 537 if (start_after_delivery_orders) { |
| 537 job->DeliverAppCachedResponse( | 538 job->DeliverAppCachedResponse( |
| 538 GURL(), 0, 111, | 539 GURL(), 0, 111, |
| 539 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), | 540 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), |
| 540 false); | 541 false); |
| 541 EXPECT_TRUE(job->is_delivering_appcache_response()); | 542 EXPECT_TRUE(job->is_delivering_appcache_response()); |
| 542 } | 543 } |
| 543 | 544 |
| 544 // Start the request. | 545 // Start the request. |
| 545 EXPECT_FALSE(job->has_been_started()); | 546 EXPECT_FALSE(job->has_been_started()); |
| 546 mock_factory_job_ = job; | 547 mock_factory_job_ = job.get(); |
| 547 request_->Start(); | 548 request_->Start(); |
| 548 EXPECT_FALSE(mock_factory_job_); | 549 EXPECT_FALSE(mock_factory_job_); |
| 549 EXPECT_TRUE(job->has_been_started()); | 550 EXPECT_TRUE(job->has_been_started()); |
| 550 | 551 |
| 551 if (!start_after_delivery_orders) { | 552 if (!start_after_delivery_orders) { |
| 552 job->DeliverAppCachedResponse( | 553 job->DeliverAppCachedResponse( |
| 553 GURL(), 0, 111, | 554 GURL(), 0, 111, |
| 554 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), | 555 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), |
| 555 false); | 556 false); |
| 556 EXPECT_TRUE(job->is_delivering_appcache_response()); | 557 EXPECT_TRUE(job->is_delivering_appcache_response()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 | 596 |
| 596 void WriteLargeResponse() { | 597 void WriteLargeResponse() { |
| 597 // 3, 1k blocks | 598 // 3, 1k blocks |
| 598 static const char kHttpHeaders[] = | 599 static const char kHttpHeaders[] = |
| 599 "HTTP/1.0 200 OK\0Content-Length: 3072\0\0"; | 600 "HTTP/1.0 200 OK\0Content-Length: 3072\0\0"; |
| 600 scoped_refptr<IOBuffer> body(new IOBuffer(kBlockSize * 3)); | 601 scoped_refptr<IOBuffer> body(new IOBuffer(kBlockSize * 3)); |
| 601 char* p = body->data(); | 602 char* p = body->data(); |
| 602 for (int i = 0; i < 3; ++i, p += kBlockSize) | 603 for (int i = 0; i < 3; ++i, p += kBlockSize) |
| 603 FillData(i + 1, p, kBlockSize); | 604 FillData(i + 1, p, kBlockSize); |
| 604 std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders)); | 605 std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders)); |
| 605 WriteResponse(MakeHttpResponseInfo(raw_headers), body, kBlockSize * 3); | 606 WriteResponse( |
| 607 MakeHttpResponseInfo(raw_headers), body.get(), kBlockSize * 3); |
| 606 } | 608 } |
| 607 | 609 |
| 608 void VerifyDeliverLargeAppCachedResponse() { | 610 void VerifyDeliverLargeAppCachedResponse() { |
| 609 EXPECT_TRUE(request_->status().is_success()); | 611 EXPECT_TRUE(request_->status().is_success()); |
| 610 EXPECT_TRUE(CompareHttpResponseInfos( | 612 EXPECT_TRUE(CompareHttpResponseInfos( |
| 611 write_info_buffer_->http_info.get(), | 613 write_info_buffer_->http_info.get(), |
| 612 &url_request_delegate_->received_info_)); | 614 &url_request_delegate_->received_info_)); |
| 613 EXPECT_EQ(3072, url_request_delegate_->amount_received_); | 615 EXPECT_EQ(3072, url_request_delegate_->amount_received_); |
| 614 char* p = url_request_delegate_->received_data_->data(); | 616 char* p = url_request_delegate_->received_data_->data(); |
| 615 for (int i = 0; i < 3; ++i, p += kBlockSize) | 617 for (int i = 0; i < 3; ++i, p += kBlockSize) |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 649 scoped_refptr<AppCacheURLRequestJob> job(new AppCacheURLRequestJob( | 651 scoped_refptr<AppCacheURLRequestJob> job(new AppCacheURLRequestJob( |
| 650 request_.get(), NULL, storage)); | 652 request_.get(), NULL, storage)); |
| 651 job->DeliverAppCachedResponse( | 653 job->DeliverAppCachedResponse( |
| 652 GURL(), 0, 111, | 654 GURL(), 0, 111, |
| 653 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), | 655 AppCacheEntry(AppCacheEntry::EXPLICIT, written_response_id_), |
| 654 false); | 656 false); |
| 655 EXPECT_TRUE(job->is_delivering_appcache_response()); | 657 EXPECT_TRUE(job->is_delivering_appcache_response()); |
| 656 | 658 |
| 657 // Start the request. | 659 // Start the request. |
| 658 EXPECT_FALSE(job->has_been_started()); | 660 EXPECT_FALSE(job->has_been_started()); |
| 659 mock_factory_job_ = job; | 661 mock_factory_job_ = job.get(); |
| 660 request_->Start(); | 662 request_->Start(); |
| 661 EXPECT_FALSE(mock_factory_job_); | 663 EXPECT_FALSE(mock_factory_job_); |
| 662 EXPECT_TRUE(job->has_been_started()); | 664 EXPECT_TRUE(job->has_been_started()); |
| 663 // Completion is async. | 665 // Completion is async. |
| 664 } | 666 } |
| 665 | 667 |
| 666 void VerifyDeliverPartialResponse() { | 668 void VerifyDeliverPartialResponse() { |
| 667 EXPECT_TRUE(request_->status().is_success()); | 669 EXPECT_TRUE(request_->status().is_success()); |
| 668 EXPECT_EQ(3, url_request_delegate_->amount_received_); | 670 EXPECT_EQ(3, url_request_delegate_->amount_received_); |
| 669 EXPECT_EQ(0, memcmp(kHttpBasicBody + 1, | 671 EXPECT_EQ(0, memcmp(kHttpBasicBody + 1, |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 798 | 800 |
| 799 TEST_F(AppCacheURLRequestJobTest, CancelRequest) { | 801 TEST_F(AppCacheURLRequestJobTest, CancelRequest) { |
| 800 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequest); | 802 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequest); |
| 801 } | 803 } |
| 802 | 804 |
| 803 TEST_F(AppCacheURLRequestJobTest, CancelRequestWithIOPending) { | 805 TEST_F(AppCacheURLRequestJobTest, CancelRequestWithIOPending) { |
| 804 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequestWithIOPending); | 806 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequestWithIOPending); |
| 805 } | 807 } |
| 806 | 808 |
| 807 } // namespace appcache | 809 } // namespace appcache |
| OLD | NEW |