| 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/test/url_request/url_request_slow_download_job.h" | 5 #include "net/test/url_request/url_request_slow_download_job.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/location.h" | 9 #include "base/location.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 buf->data()[i] = '*'; | 172 buf->data()[i] = '*'; |
| 173 } | 173 } |
| 174 *bytes_written = bytes_to_write; | 174 *bytes_written = bytes_to_write; |
| 175 bytes_already_sent_ += bytes_to_write; | 175 bytes_already_sent_ += bytes_to_write; |
| 176 return BUFFER_FILLED; | 176 return BUFFER_FILLED; |
| 177 } | 177 } |
| 178 | 178 |
| 179 return REQUEST_COMPLETE; | 179 return REQUEST_COMPLETE; |
| 180 } | 180 } |
| 181 | 181 |
| 182 bool URLRequestSlowDownloadJob::ReadRawData(IOBuffer* buf, | 182 int URLRequestSlowDownloadJob::ReadRawData(IOBuffer* buf, int buf_size) { |
| 183 int buf_size, | |
| 184 int* bytes_read) { | |
| 185 if (base::LowerCaseEqualsASCII(kFinishDownloadUrl, | 183 if (base::LowerCaseEqualsASCII(kFinishDownloadUrl, |
| 186 request_->url().spec().c_str()) || | 184 request_->url().spec().c_str()) || |
| 187 base::LowerCaseEqualsASCII(kErrorDownloadUrl, | 185 base::LowerCaseEqualsASCII(kErrorDownloadUrl, |
| 188 request_->url().spec().c_str())) { | 186 request_->url().spec().c_str())) { |
| 189 VLOG(10) << __FUNCTION__ << " called w/ kFinish/ErrorDownloadUrl."; | 187 VLOG(10) << __FUNCTION__ << " called w/ kFinish/ErrorDownloadUrl."; |
| 190 *bytes_read = 0; | 188 return 0; |
| 191 return true; | |
| 192 } | 189 } |
| 193 | 190 |
| 194 VLOG(10) << __FUNCTION__ << " called at position " << bytes_already_sent_ | 191 VLOG(10) << __FUNCTION__ << " called at position " << bytes_already_sent_ |
| 195 << " in the stream."; | 192 << " in the stream."; |
| 196 ReadStatus status = FillBufferHelper(buf, buf_size, bytes_read); | 193 int bytes_read = 0; |
| 194 ReadStatus status = FillBufferHelper(buf, buf_size, &bytes_read); |
| 197 switch (status) { | 195 switch (status) { |
| 198 case BUFFER_FILLED: | 196 case BUFFER_FILLED: |
| 199 return true; | 197 case REQUEST_COMPLETE: |
| 198 return bytes_read; |
| 200 case REQUEST_BLOCKED: | 199 case REQUEST_BLOCKED: |
| 201 buffer_ = buf; | 200 buffer_ = buf; |
| 202 buffer_size_ = buf_size; | 201 buffer_size_ = buf_size; |
| 203 SetStatus(URLRequestStatus(URLRequestStatus::IO_PENDING, 0)); | |
| 204 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 202 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 205 FROM_HERE, base::Bind(&URLRequestSlowDownloadJob::CheckDoneStatus, | 203 FROM_HERE, base::Bind(&URLRequestSlowDownloadJob::CheckDoneStatus, |
| 206 weak_factory_.GetWeakPtr()), | 204 weak_factory_.GetWeakPtr()), |
| 207 base::TimeDelta::FromMilliseconds(100)); | 205 base::TimeDelta::FromMilliseconds(100)); |
| 208 return false; | 206 return ERR_IO_PENDING; |
| 209 case REQUEST_COMPLETE: | |
| 210 *bytes_read = 0; | |
| 211 return true; | |
| 212 } | 207 } |
| 213 NOTREACHED(); | 208 NOTREACHED(); |
| 214 return true; | 209 return OK; |
| 215 } | 210 } |
| 216 | 211 |
| 217 void URLRequestSlowDownloadJob::CheckDoneStatus() { | 212 void URLRequestSlowDownloadJob::CheckDoneStatus() { |
| 218 if (should_finish_download_) { | 213 if (should_finish_download_) { |
| 219 VLOG(10) << __FUNCTION__ << " called w/ should_finish_download_ set."; | 214 VLOG(10) << __FUNCTION__ << " called w/ should_finish_download_ set."; |
| 220 DCHECK(NULL != buffer_.get()); | 215 DCHECK(NULL != buffer_.get()); |
| 221 int bytes_written = 0; | 216 int bytes_written = 0; |
| 222 ReadStatus status = | 217 ReadStatus status = |
| 223 FillBufferHelper(buffer_.get(), buffer_size_, &bytes_written); | 218 FillBufferHelper(buffer_.get(), buffer_size_, &bytes_written); |
| 224 DCHECK_EQ(BUFFER_FILLED, status); | 219 DCHECK_EQ(BUFFER_FILLED, status); |
| 225 buffer_ = NULL; // Release the reference. | 220 buffer_ = NULL; // Release the reference. |
| 226 SetStatus(URLRequestStatus()); | 221 ReadRawDataComplete(bytes_written); |
| 227 NotifyReadComplete(bytes_written); | |
| 228 } else if (should_error_download_) { | 222 } else if (should_error_download_) { |
| 229 VLOG(10) << __FUNCTION__ << " called w/ should_finish_ownload_ set."; | 223 VLOG(10) << __FUNCTION__ << " called w/ should_finish_ownload_ set."; |
| 230 NotifyDone( | 224 ReadRawDataComplete(ERR_CONNECTION_RESET); |
| 231 URLRequestStatus(URLRequestStatus::FAILED, ERR_CONNECTION_RESET)); | |
| 232 } else { | 225 } else { |
| 233 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 226 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 234 FROM_HERE, base::Bind(&URLRequestSlowDownloadJob::CheckDoneStatus, | 227 FROM_HERE, base::Bind(&URLRequestSlowDownloadJob::CheckDoneStatus, |
| 235 weak_factory_.GetWeakPtr()), | 228 weak_factory_.GetWeakPtr()), |
| 236 base::TimeDelta::FromMilliseconds(100)); | 229 base::TimeDelta::FromMilliseconds(100)); |
| 237 } | 230 } |
| 238 } | 231 } |
| 239 | 232 |
| 240 // Public virtual version. | 233 // Public virtual version. |
| 241 void URLRequestSlowDownloadJob::GetResponseInfo(HttpResponseInfo* info) { | 234 void URLRequestSlowDownloadJob::GetResponseInfo(HttpResponseInfo* info) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 info->headers = new HttpResponseHeaders(raw_headers); | 271 info->headers = new HttpResponseHeaders(raw_headers); |
| 279 } | 272 } |
| 280 | 273 |
| 281 bool URLRequestSlowDownloadJob::GetMimeType(std::string* mime_type) const { | 274 bool URLRequestSlowDownloadJob::GetMimeType(std::string* mime_type) const { |
| 282 HttpResponseInfo info; | 275 HttpResponseInfo info; |
| 283 GetResponseInfoConst(&info); | 276 GetResponseInfoConst(&info); |
| 284 return info.headers.get() && info.headers->GetMimeType(mime_type); | 277 return info.headers.get() && info.headers->GetMimeType(mime_type); |
| 285 } | 278 } |
| 286 | 279 |
| 287 } // namespace net | 280 } // namespace net |
| OLD | NEW |