| 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/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 NetworkDelegate* network_delegate) | 108 NetworkDelegate* network_delegate) |
| 109 : URLRequestJob(request, network_delegate), | 109 : URLRequestJob(request, network_delegate), |
| 110 bytes_already_sent_(0), | 110 bytes_already_sent_(0), |
| 111 should_error_download_(false), | 111 should_error_download_(false), |
| 112 should_finish_download_(false), | 112 should_finish_download_(false), |
| 113 buffer_size_(0), | 113 buffer_size_(0), |
| 114 weak_factory_(this) { | 114 weak_factory_(this) { |
| 115 } | 115 } |
| 116 | 116 |
| 117 void URLRequestSlowDownloadJob::StartAsync() { | 117 void URLRequestSlowDownloadJob::StartAsync() { |
| 118 if (LowerCaseEqualsASCII(kFinishDownloadUrl, request_->url().spec().c_str())) | 118 if (base::LowerCaseEqualsASCII(kFinishDownloadUrl, |
| 119 request_->url().spec().c_str())) |
| 119 URLRequestSlowDownloadJob::FinishPendingRequests(); | 120 URLRequestSlowDownloadJob::FinishPendingRequests(); |
| 120 if (LowerCaseEqualsASCII(kErrorDownloadUrl, request_->url().spec().c_str())) | 121 if (base::LowerCaseEqualsASCII(kErrorDownloadUrl, |
| 122 request_->url().spec().c_str())) |
| 121 URLRequestSlowDownloadJob::ErrorPendingRequests(); | 123 URLRequestSlowDownloadJob::ErrorPendingRequests(); |
| 122 | 124 |
| 123 NotifyHeadersComplete(); | 125 NotifyHeadersComplete(); |
| 124 } | 126 } |
| 125 | 127 |
| 126 // ReadRawData and CheckDoneStatus together implement a state | 128 // ReadRawData and CheckDoneStatus together implement a state |
| 127 // machine. ReadRawData may be called arbitrarily by the network stack. | 129 // machine. ReadRawData may be called arbitrarily by the network stack. |
| 128 // It responds by: | 130 // It responds by: |
| 129 // * If there are bytes remaining in the first chunk, they are | 131 // * If there are bytes remaining in the first chunk, they are |
| 130 // returned. | 132 // returned. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 bytes_already_sent_ += bytes_to_write; | 173 bytes_already_sent_ += bytes_to_write; |
| 172 return BUFFER_FILLED; | 174 return BUFFER_FILLED; |
| 173 } | 175 } |
| 174 | 176 |
| 175 return REQUEST_COMPLETE; | 177 return REQUEST_COMPLETE; |
| 176 } | 178 } |
| 177 | 179 |
| 178 bool URLRequestSlowDownloadJob::ReadRawData(IOBuffer* buf, | 180 bool URLRequestSlowDownloadJob::ReadRawData(IOBuffer* buf, |
| 179 int buf_size, | 181 int buf_size, |
| 180 int* bytes_read) { | 182 int* bytes_read) { |
| 181 if (LowerCaseEqualsASCII(kFinishDownloadUrl, | 183 if (base::LowerCaseEqualsASCII(kFinishDownloadUrl, |
| 182 request_->url().spec().c_str()) || | 184 request_->url().spec().c_str()) || |
| 183 LowerCaseEqualsASCII(kErrorDownloadUrl, request_->url().spec().c_str())) { | 185 base::LowerCaseEqualsASCII(kErrorDownloadUrl, |
| 186 request_->url().spec().c_str())) { |
| 184 VLOG(10) << __FUNCTION__ << " called w/ kFinish/ErrorDownloadUrl."; | 187 VLOG(10) << __FUNCTION__ << " called w/ kFinish/ErrorDownloadUrl."; |
| 185 *bytes_read = 0; | 188 *bytes_read = 0; |
| 186 return true; | 189 return true; |
| 187 } | 190 } |
| 188 | 191 |
| 189 VLOG(10) << __FUNCTION__ << " called at position " << bytes_already_sent_ | 192 VLOG(10) << __FUNCTION__ << " called at position " << bytes_already_sent_ |
| 190 << " in the stream."; | 193 << " in the stream."; |
| 191 ReadStatus status = FillBufferHelper(buf, buf_size, bytes_read); | 194 ReadStatus status = FillBufferHelper(buf, buf_size, bytes_read); |
| 192 switch (status) { | 195 switch (status) { |
| 193 case BUFFER_FILLED: | 196 case BUFFER_FILLED: |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 | 243 |
| 241 URLRequestSlowDownloadJob::~URLRequestSlowDownloadJob() { | 244 URLRequestSlowDownloadJob::~URLRequestSlowDownloadJob() { |
| 242 pending_requests_.Get().erase(this); | 245 pending_requests_.Get().erase(this); |
| 243 } | 246 } |
| 244 | 247 |
| 245 // Private const version. | 248 // Private const version. |
| 246 void URLRequestSlowDownloadJob::GetResponseInfoConst( | 249 void URLRequestSlowDownloadJob::GetResponseInfoConst( |
| 247 HttpResponseInfo* info) const { | 250 HttpResponseInfo* info) const { |
| 248 // Send back mock headers. | 251 // Send back mock headers. |
| 249 std::string raw_headers; | 252 std::string raw_headers; |
| 250 if (LowerCaseEqualsASCII(kFinishDownloadUrl, | 253 if (base::LowerCaseEqualsASCII(kFinishDownloadUrl, |
| 251 request_->url().spec().c_str()) || | 254 request_->url().spec().c_str()) || |
| 252 LowerCaseEqualsASCII(kErrorDownloadUrl, request_->url().spec().c_str())) { | 255 base::LowerCaseEqualsASCII(kErrorDownloadUrl, |
| 256 request_->url().spec().c_str())) { |
| 253 raw_headers.append( | 257 raw_headers.append( |
| 254 "HTTP/1.1 200 OK\n" | 258 "HTTP/1.1 200 OK\n" |
| 255 "Content-type: text/plain\n"); | 259 "Content-type: text/plain\n"); |
| 256 } else { | 260 } else { |
| 257 raw_headers.append( | 261 raw_headers.append( |
| 258 "HTTP/1.1 200 OK\n" | 262 "HTTP/1.1 200 OK\n" |
| 259 "Content-type: application/octet-stream\n" | 263 "Content-type: application/octet-stream\n" |
| 260 "Cache-Control: max-age=0\n"); | 264 "Cache-Control: max-age=0\n"); |
| 261 | 265 |
| 262 if (LowerCaseEqualsASCII(kKnownSizeUrl, request_->url().spec().c_str())) { | 266 if (base::LowerCaseEqualsASCII(kKnownSizeUrl, |
| 267 request_->url().spec().c_str())) { |
| 263 raw_headers.append(base::StringPrintf( | 268 raw_headers.append(base::StringPrintf( |
| 264 "Content-Length: %d\n", kFirstDownloadSize + kSecondDownloadSize)); | 269 "Content-Length: %d\n", kFirstDownloadSize + kSecondDownloadSize)); |
| 265 } | 270 } |
| 266 } | 271 } |
| 267 | 272 |
| 268 // ParseRawHeaders expects \0 to end each header line. | 273 // ParseRawHeaders expects \0 to end each header line. |
| 269 ReplaceSubstringsAfterOffset(&raw_headers, 0, "\n", std::string("\0", 1)); | 274 ReplaceSubstringsAfterOffset(&raw_headers, 0, "\n", std::string("\0", 1)); |
| 270 info->headers = new HttpResponseHeaders(raw_headers); | 275 info->headers = new HttpResponseHeaders(raw_headers); |
| 271 } | 276 } |
| 272 | 277 |
| 273 bool URLRequestSlowDownloadJob::GetMimeType(std::string* mime_type) const { | 278 bool URLRequestSlowDownloadJob::GetMimeType(std::string* mime_type) const { |
| 274 HttpResponseInfo info; | 279 HttpResponseInfo info; |
| 275 GetResponseInfoConst(&info); | 280 GetResponseInfoConst(&info); |
| 276 return info.headers.get() && info.headers->GetMimeType(mime_type); | 281 return info.headers.get() && info.headers->GetMimeType(mime_type); |
| 277 } | 282 } |
| 278 | 283 |
| 279 } // namespace net | 284 } // namespace net |
| OLD | NEW |