Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: content/common/net/url_fetcher.cc

Issue 8231004: Remaining cleanup (base::Bind): Replacing FileUtilProxy calls with new callback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "content/common/net/url_fetcher.h" 5 #include "content/common/net/url_fetcher.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 base::PlatformFileError error_code, 344 base::PlatformFileError error_code,
345 base::PassPlatformFile file_handle, 345 base::PassPlatformFile file_handle,
346 FilePath file_path) { 346 FilePath file_path) {
347 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread()); 347 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread());
348 348
349 if (base::PLATFORM_FILE_OK != error_code) { 349 if (base::PLATFORM_FILE_OK != error_code) {
350 error_code_ = error_code; 350 error_code_ = error_code;
351 RemoveTempFile(); 351 RemoveTempFile();
352 core_->delegate_loop_proxy_->PostTask( 352 core_->delegate_loop_proxy_->PostTask(
353 FROM_HERE, 353 FROM_HERE,
354 NewRunnableMethod(core_, &Core::InformDelegateFetchIsComplete)); 354 base::Bind(&Core::InformDelegateFetchIsComplete, core_));
355 return; 355 return;
356 } 356 }
357 357
358 temp_file_ = file_path; 358 temp_file_ = file_path;
359 temp_file_handle_ = file_handle.ReleaseValue(); 359 temp_file_handle_ = file_handle.ReleaseValue();
360 total_bytes_written_ = 0; 360 total_bytes_written_ = 0;
361 361
362 core_->io_message_loop_proxy_->PostTask( 362 core_->io_message_loop_proxy_->PostTask(
363 FROM_HERE, 363 FROM_HERE,
364 NewRunnableMethod(core_, &Core::StartURLRequestWhenAppropriate)); 364 base::Bind(&Core::StartURLRequestWhenAppropriate, core_));
365 } 365 }
366 366
367 void URLFetcher::Core::TempFileWriter::WriteBuffer(int num_bytes) { 367 void URLFetcher::Core::TempFileWriter::WriteBuffer(int num_bytes) {
368 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread()); 368 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread());
369 369
370 // Start writing to the temp file by setting the initial state 370 // Start writing to the temp file by setting the initial state
371 // of |pending_bytes_| and |buffer_offset_| to indicate that the 371 // of |pending_bytes_| and |buffer_offset_| to indicate that the
372 // entire buffer has not yet been written. 372 // entire buffer has not yet been written.
373 pending_bytes_ = num_bytes; 373 pending_bytes_ = num_bytes;
374 buffer_offset_ = 0; 374 buffer_offset_ = 0;
375 ContinueWrite(base::PLATFORM_FILE_OK, 0); 375 ContinueWrite(base::PLATFORM_FILE_OK, 0);
376 } 376 }
377 377
378 void URLFetcher::Core::TempFileWriter::ContinueWrite( 378 void URLFetcher::Core::TempFileWriter::ContinueWrite(
379 base::PlatformFileError error_code, 379 base::PlatformFileError error_code,
380 int bytes_written) { 380 int bytes_written) {
381 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread()); 381 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread());
382 382
383 if (base::PLATFORM_FILE_OK != error_code) { 383 if (base::PLATFORM_FILE_OK != error_code) {
384 error_code_ = error_code; 384 error_code_ = error_code;
385 RemoveTempFile(); 385 RemoveTempFile();
386 core_->delegate_loop_proxy_->PostTask( 386 core_->delegate_loop_proxy_->PostTask(
387 FROM_HERE, 387 FROM_HERE,
388 NewRunnableMethod(core_, &Core::InformDelegateFetchIsComplete)); 388 base::Bind(&Core::InformDelegateFetchIsComplete, core_));
389 return; 389 return;
390 } 390 }
391 391
392 total_bytes_written_ += bytes_written; 392 total_bytes_written_ += bytes_written;
393 buffer_offset_ += bytes_written; 393 buffer_offset_ += bytes_written;
394 pending_bytes_ -= bytes_written; 394 pending_bytes_ -= bytes_written;
395 395
396 if (pending_bytes_ > 0) { 396 if (pending_bytes_ > 0) {
397 base::FileUtilProxy::Write( 397 base::FileUtilProxy::Write(
398 file_message_loop_proxy_, temp_file_handle_, 398 file_message_loop_proxy_, temp_file_handle_,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 431
432 void URLFetcher::Core::TempFileWriter::DidCloseTempFile( 432 void URLFetcher::Core::TempFileWriter::DidCloseTempFile(
433 base::PlatformFileError error_code) { 433 base::PlatformFileError error_code) {
434 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread()); 434 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread());
435 435
436 if (base::PLATFORM_FILE_OK != error_code) { 436 if (base::PLATFORM_FILE_OK != error_code) {
437 error_code_ = error_code; 437 error_code_ = error_code;
438 RemoveTempFile(); 438 RemoveTempFile();
439 core_->delegate_loop_proxy_->PostTask( 439 core_->delegate_loop_proxy_->PostTask(
440 FROM_HERE, 440 FROM_HERE,
441 NewRunnableMethod(core_, &Core::InformDelegateFetchIsComplete)); 441 base::Bind(&Core::InformDelegateFetchIsComplete, core_));
442 return; 442 return;
443 } 443 }
444 444
445 // If the file was successfully closed, then the URL request is complete. 445 // If the file was successfully closed, then the URL request is complete.
446 core_->RetryOrCompleteUrlFetch(); 446 core_->RetryOrCompleteUrlFetch();
447 } 447 }
448 448
449 void URLFetcher::Core::TempFileWriter::RemoveTempFile() { 449 void URLFetcher::Core::TempFileWriter::RemoveTempFile() {
450 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread()); 450 DCHECK(core_->io_message_loop_proxy_->BelongsToCurrentThread());
451 451
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 if (io_message_loop_proxy_) { 556 if (io_message_loop_proxy_) {
557 DCHECK_EQ(io_message_loop_proxy_, 557 DCHECK_EQ(io_message_loop_proxy_,
558 request_context_getter_->GetIOMessageLoopProxy()); 558 request_context_getter_->GetIOMessageLoopProxy());
559 } else { 559 } else {
560 io_message_loop_proxy_ = request_context_getter_->GetIOMessageLoopProxy(); 560 io_message_loop_proxy_ = request_context_getter_->GetIOMessageLoopProxy();
561 } 561 }
562 CHECK(io_message_loop_proxy_.get()) << "We need an IO message loop proxy"; 562 CHECK(io_message_loop_proxy_.get()) << "We need an IO message loop proxy";
563 563
564 io_message_loop_proxy_->PostTask( 564 io_message_loop_proxy_->PostTask(
565 FROM_HERE, 565 FROM_HERE,
566 NewRunnableMethod(this, &Core::StartOnIOThread)); 566 base::Bind(&Core::StartOnIOThread, this));
567 } 567 }
568 568
569 void URLFetcher::Core::StartOnIOThread() { 569 void URLFetcher::Core::StartOnIOThread() {
570 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 570 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
571 571
572 switch (response_destination_) { 572 switch (response_destination_) {
573 case STRING: 573 case STRING:
574 StartURLRequestWhenAppropriate(); 574 StartURLRequestWhenAppropriate();
575 break; 575 break;
576 576
(...skipping 13 matching lines...) Expand all
590 NOTREACHED(); 590 NOTREACHED();
591 } 591 }
592 } 592 }
593 593
594 void URLFetcher::Core::Stop() { 594 void URLFetcher::Core::Stop() {
595 DCHECK(delegate_loop_proxy_->BelongsToCurrentThread()); 595 DCHECK(delegate_loop_proxy_->BelongsToCurrentThread());
596 delegate_ = NULL; 596 delegate_ = NULL;
597 fetcher_ = NULL; 597 fetcher_ = NULL;
598 if (io_message_loop_proxy_.get()) { 598 if (io_message_loop_proxy_.get()) {
599 io_message_loop_proxy_->PostTask( 599 io_message_loop_proxy_->PostTask(
600 FROM_HERE, NewRunnableMethod(this, &Core::CancelURLRequest)); 600 FROM_HERE, base::Bind(&Core::CancelURLRequest, this));
601 } 601 }
602 } 602 }
603 603
604 void URLFetcher::Core::ReceivedContentWasMalformed() { 604 void URLFetcher::Core::ReceivedContentWasMalformed() {
605 DCHECK(delegate_loop_proxy_->BelongsToCurrentThread()); 605 DCHECK(delegate_loop_proxy_->BelongsToCurrentThread());
606 if (io_message_loop_proxy_.get()) { 606 if (io_message_loop_proxy_.get()) {
607 io_message_loop_proxy_->PostTask( 607 io_message_loop_proxy_->PostTask(
608 FROM_HERE, NewRunnableMethod(this, &Core::NotifyMalformedContent)); 608 FROM_HERE, base::Bind(&Core::NotifyMalformedContent, this));
609 } 609 }
610 } 610 }
611 611
612 void URLFetcher::Core::CancelAll() { 612 void URLFetcher::Core::CancelAll() {
613 g_registry.Get().CancelAll(); 613 g_registry.Get().CancelAll();
614 } 614 }
615 615
616 void URLFetcher::Core::OnResponseStarted(net::URLRequest* request) { 616 void URLFetcher::Core::OnResponseStarted(net::URLRequest* request) {
617 DCHECK_EQ(request, request_.get()); 617 DCHECK_EQ(request, request_.get());
618 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 618 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
(...skipping 16 matching lines...) Expand all
635 static_cast<int>(content.length()), 635 static_cast<int>(content.length()),
636 is_last_chunk); 636 is_last_chunk);
637 } 637 }
638 638
639 void URLFetcher::Core::AppendChunkToUpload(const std::string& content, 639 void URLFetcher::Core::AppendChunkToUpload(const std::string& content,
640 bool is_last_chunk) { 640 bool is_last_chunk) {
641 DCHECK(delegate_loop_proxy_); 641 DCHECK(delegate_loop_proxy_);
642 CHECK(io_message_loop_proxy_.get()); 642 CHECK(io_message_loop_proxy_.get());
643 io_message_loop_proxy_->PostTask( 643 io_message_loop_proxy_->PostTask(
644 FROM_HERE, 644 FROM_HERE,
645 NewRunnableMethod(this, &Core::CompleteAddingUploadDataChunk, content, 645 base::Bind(&Core::CompleteAddingUploadDataChunk, this,
646 is_last_chunk)); 646 content, is_last_chunk));
647 } 647 }
648 648
649 // Return true if the write was done and reading may continue. 649 // Return true if the write was done and reading may continue.
650 // Return false if the write is pending, and the next read will 650 // Return false if the write is pending, and the next read will
651 // be done later. 651 // be done later.
652 bool URLFetcher::Core::WriteBuffer(int num_bytes) { 652 bool URLFetcher::Core::WriteBuffer(int num_bytes) {
653 bool write_complete = false; 653 bool write_complete = false;
654 switch (response_destination_) { 654 switch (response_destination_) {
655 case STRING: 655 case STRING:
656 data_.append(buffer_->data(), num_bytes); 656 data_.append(buffer_->data(), num_bytes);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 num_retries_ <= max_retries_) { 738 num_retries_ <= max_retries_) {
739 StartOnIOThread(); 739 StartOnIOThread();
740 return; 740 return;
741 } 741 }
742 } else { 742 } else {
743 backoff_delay = base::TimeDelta(); 743 backoff_delay = base::TimeDelta();
744 } 744 }
745 request_context_getter_ = NULL; 745 request_context_getter_ = NULL;
746 bool posted = delegate_loop_proxy_->PostTask( 746 bool posted = delegate_loop_proxy_->PostTask(
747 FROM_HERE, 747 FROM_HERE,
748 NewRunnableMethod(this, 748 base::Bind(&Core::OnCompletedURLRequest, this,
749 &Core::OnCompletedURLRequest, 749 backoff_delay));
750 backoff_delay));
751 750
752 // If the delegate message loop does not exist any more, then the delegate 751 // If the delegate message loop does not exist any more, then the delegate
753 // should be gone too. 752 // should be gone too.
754 DCHECK(posted || !delegate_); 753 DCHECK(posted || !delegate_);
755 } 754 }
756 755
757 void URLFetcher::Core::ReadResponse() { 756 void URLFetcher::Core::ReadResponse() {
758 // Some servers may treat HEAD requests as GET requests. To free up the 757 // Some servers may treat HEAD requests as GET requests. To free up the
759 // network connection as soon as possible, signal that the request has 758 // network connection as soon as possible, signal that the request has
760 // completed immediately, without trying to read any data back (all we care 759 // completed immediately, without trying to read any data back (all we care
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 original_url_); 843 original_url_);
845 } 844 }
846 845
847 int64 delay = original_url_throttler_entry_->ReserveSendingTimeForNextRequest( 846 int64 delay = original_url_throttler_entry_->ReserveSendingTimeForNextRequest(
848 GetBackoffReleaseTime()); 847 GetBackoffReleaseTime());
849 if (delay == 0) { 848 if (delay == 0) {
850 StartURLRequest(); 849 StartURLRequest();
851 } else { 850 } else {
852 MessageLoop::current()->PostDelayedTask( 851 MessageLoop::current()->PostDelayedTask(
853 FROM_HERE, 852 FROM_HERE,
854 NewRunnableMethod(this, &Core::StartURLRequest), 853 base::Bind(&Core::StartURLRequest, this),
855 delay); 854 delay);
856 } 855 }
857 } 856 }
858 857
859 void URLFetcher::Core::CancelURLRequest() { 858 void URLFetcher::Core::CancelURLRequest() {
860 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 859 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
861 860
862 if (request_.get()) { 861 if (request_.get()) {
863 request_->Cancel(); 862 request_->Cancel();
864 ReleaseRequest(); 863 ReleaseRequest();
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 DCHECK(core_->delegate_loop_proxy_->BelongsToCurrentThread()); 1110 DCHECK(core_->delegate_loop_proxy_->BelongsToCurrentThread());
1112 if (core_->response_destination_ != TEMP_FILE || 1111 if (core_->response_destination_ != TEMP_FILE ||
1113 !core_->temp_file_writer_.get()) 1112 !core_->temp_file_writer_.get())
1114 return false; 1113 return false;
1115 1114
1116 *out_response_path = core_->temp_file_writer_->temp_file(); 1115 *out_response_path = core_->temp_file_writer_->temp_file();
1117 1116
1118 if (take_ownership) { 1117 if (take_ownership) {
1119 core_->io_message_loop_proxy_->PostTask( 1118 core_->io_message_loop_proxy_->PostTask(
1120 FROM_HERE, 1119 FROM_HERE,
1121 NewRunnableMethod(core_.get(), &Core::DisownTempFile)); 1120 base::Bind(&Core::DisownTempFile, core_));
1122 } 1121 }
1123 return true; 1122 return true;
1124 } 1123 }
1125 1124
1126 // static 1125 // static
1127 void URLFetcher::CancelAll() { 1126 void URLFetcher::CancelAll() {
1128 Core::CancelAll(); 1127 Core::CancelAll();
1129 } 1128 }
1130 1129
1131 // static 1130 // static
1132 int URLFetcher::GetNumFetcherCores() { 1131 int URLFetcher::GetNumFetcherCores() {
1133 return Core::g_registry.Get().size(); 1132 return Core::g_registry.Get().size();
1134 } 1133 }
1135 1134
1136 URLFetcher::Delegate* URLFetcher::delegate() const { 1135 URLFetcher::Delegate* URLFetcher::delegate() const {
1137 return core_->delegate(); 1136 return core_->delegate();
1138 } 1137 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698