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 |