| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/url_request/url_fetcher_core.h" | 5 #include "net/url_request/url_fetcher_core.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 delegate_(d), | 71 delegate_(d), |
| 72 delegate_task_runner_( | 72 delegate_task_runner_( |
| 73 base::ThreadTaskRunnerHandle::Get()), | 73 base::ThreadTaskRunnerHandle::Get()), |
| 74 request_(NULL), | 74 request_(NULL), |
| 75 load_flags_(LOAD_NORMAL), | 75 load_flags_(LOAD_NORMAL), |
| 76 response_code_(URLFetcher::RESPONSE_CODE_INVALID), | 76 response_code_(URLFetcher::RESPONSE_CODE_INVALID), |
| 77 buffer_(new IOBuffer(kBufferSize)), | 77 buffer_(new IOBuffer(kBufferSize)), |
| 78 url_request_data_key_(NULL), | 78 url_request_data_key_(NULL), |
| 79 was_fetched_via_proxy_(false), | 79 was_fetched_via_proxy_(false), |
| 80 upload_content_set_(false), | 80 upload_content_set_(false), |
| 81 upload_range_offset_(0), |
| 82 upload_range_length_(0), |
| 81 is_chunked_upload_(false), | 83 is_chunked_upload_(false), |
| 82 was_cancelled_(false), | 84 was_cancelled_(false), |
| 83 file_writer_(NULL), | 85 file_writer_(NULL), |
| 84 response_destination_(STRING), | 86 response_destination_(STRING), |
| 85 stop_on_redirect_(false), | 87 stop_on_redirect_(false), |
| 86 stopped_on_redirect_(false), | 88 stopped_on_redirect_(false), |
| 87 automatically_retry_on_5xx_(true), | 89 automatically_retry_on_5xx_(true), |
| 88 num_retries_on_5xx_(0), | 90 num_retries_on_5xx_(0), |
| 89 max_retries_on_5xx_(0), | 91 max_retries_on_5xx_(0), |
| 90 num_retries_on_network_changes_(0), | 92 num_retries_on_network_changes_(0), |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 DCHECK(upload_content.empty() || !upload_content_type.empty()); | 140 DCHECK(upload_content.empty() || !upload_content_type.empty()); |
| 139 | 141 |
| 140 upload_content_type_ = upload_content_type; | 142 upload_content_type_ = upload_content_type; |
| 141 upload_content_ = upload_content; | 143 upload_content_ = upload_content; |
| 142 upload_content_set_ = true; | 144 upload_content_set_ = true; |
| 143 } | 145 } |
| 144 | 146 |
| 145 void URLFetcherCore::SetUploadFilePath( | 147 void URLFetcherCore::SetUploadFilePath( |
| 146 const std::string& upload_content_type, | 148 const std::string& upload_content_type, |
| 147 const base::FilePath& file_path, | 149 const base::FilePath& file_path, |
| 150 uint64 range_offset, |
| 151 uint64 range_length, |
| 148 scoped_refptr<base::TaskRunner> file_task_runner) { | 152 scoped_refptr<base::TaskRunner> file_task_runner) { |
| 149 DCHECK(!is_chunked_upload_); | 153 DCHECK(!is_chunked_upload_); |
| 150 DCHECK(!upload_content_set_); | 154 DCHECK(!upload_content_set_); |
| 151 DCHECK(upload_content_.empty()); | 155 DCHECK(upload_content_.empty()); |
| 152 DCHECK(upload_file_path_.empty()); | 156 DCHECK(upload_file_path_.empty()); |
| 157 DCHECK_EQ(upload_range_offset_, 0ULL); |
| 158 DCHECK_EQ(upload_range_length_, 0ULL); |
| 153 DCHECK(upload_content_type_.empty()); | 159 DCHECK(upload_content_type_.empty()); |
| 154 DCHECK(!upload_content_type.empty()); | 160 DCHECK(!upload_content_type.empty()); |
| 155 | 161 |
| 156 upload_content_type_ = upload_content_type; | 162 upload_content_type_ = upload_content_type; |
| 157 upload_file_path_ = file_path; | 163 upload_file_path_ = file_path; |
| 164 upload_range_offset_ = range_offset; |
| 165 upload_range_length_ = range_length; |
| 158 upload_file_task_runner_ = file_task_runner; | 166 upload_file_task_runner_ = file_task_runner; |
| 159 upload_content_set_ = true; | 167 upload_content_set_ = true; |
| 160 } | 168 } |
| 161 | 169 |
| 162 void URLFetcherCore::SetChunkedUpload(const std::string& content_type) { | 170 void URLFetcherCore::SetChunkedUpload(const std::string& content_type) { |
| 163 DCHECK(is_chunked_upload_ || | 171 DCHECK(is_chunked_upload_ || |
| 164 (upload_content_type_.empty() && | 172 (upload_content_type_.empty() && |
| 165 upload_content_.empty())); | 173 upload_content_.empty())); |
| 166 | 174 |
| 167 // Empty |content_type| is not allowed here, because it is impossible | 175 // Empty |content_type| is not allowed here, because it is impossible |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 } | 570 } |
| 563 if (!upload_content_.empty()) { | 571 if (!upload_content_.empty()) { |
| 564 scoped_ptr<UploadElementReader> reader(new UploadBytesElementReader( | 572 scoped_ptr<UploadElementReader> reader(new UploadBytesElementReader( |
| 565 upload_content_.data(), upload_content_.size())); | 573 upload_content_.data(), upload_content_.size())); |
| 566 request_->set_upload(make_scoped_ptr( | 574 request_->set_upload(make_scoped_ptr( |
| 567 UploadDataStream::CreateWithReader(reader.Pass(), 0))); | 575 UploadDataStream::CreateWithReader(reader.Pass(), 0))); |
| 568 } else if (!upload_file_path_.empty()) { | 576 } else if (!upload_file_path_.empty()) { |
| 569 scoped_ptr<UploadElementReader> reader(new UploadFileElementReader( | 577 scoped_ptr<UploadElementReader> reader(new UploadFileElementReader( |
| 570 upload_file_task_runner_, | 578 upload_file_task_runner_, |
| 571 upload_file_path_, | 579 upload_file_path_, |
| 572 0, kuint64max, base::Time())); | 580 upload_range_offset_, |
| 581 upload_range_length_, |
| 582 base::Time())); |
| 573 request_->set_upload(make_scoped_ptr( | 583 request_->set_upload(make_scoped_ptr( |
| 574 UploadDataStream::CreateWithReader(reader.Pass(), 0))); | 584 UploadDataStream::CreateWithReader(reader.Pass(), 0))); |
| 575 } | 585 } |
| 576 | 586 |
| 577 current_upload_bytes_ = -1; | 587 current_upload_bytes_ = -1; |
| 578 // TODO(kinaba): http://crbug.com/118103. Implement upload callback in the | 588 // TODO(kinaba): http://crbug.com/118103. Implement upload callback in the |
| 579 // layer and avoid using timer here. | 589 // layer and avoid using timer here. |
| 580 upload_progress_checker_timer_.reset( | 590 upload_progress_checker_timer_.reset( |
| 581 new base::RepeatingTimer<URLFetcherCore>()); | 591 new base::RepeatingTimer<URLFetcherCore>()); |
| 582 upload_progress_checker_timer_->Start( | 592 upload_progress_checker_timer_->Start( |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 900 } | 910 } |
| 901 | 911 |
| 902 void URLFetcherCore::InformDelegateDownloadDataInDelegateThread( | 912 void URLFetcherCore::InformDelegateDownloadDataInDelegateThread( |
| 903 scoped_ptr<std::string> download_data) { | 913 scoped_ptr<std::string> download_data) { |
| 904 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); | 914 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); |
| 905 if (delegate_) | 915 if (delegate_) |
| 906 delegate_->OnURLFetchDownloadData(fetcher_, download_data.Pass()); | 916 delegate_->OnURLFetchDownloadData(fetcher_, download_data.Pass()); |
| 907 } | 917 } |
| 908 | 918 |
| 909 } // namespace net | 919 } // namespace net |
| OLD | NEW |