| 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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 NetworkDelegate* network_delegate) | 94 NetworkDelegate* network_delegate) |
| 95 : URLRequestJob(request, network_delegate), | 95 : URLRequestJob(request, network_delegate), |
| 96 bytes_already_sent_(0), | 96 bytes_already_sent_(0), |
| 97 should_error_download_(false), | 97 should_error_download_(false), |
| 98 should_finish_download_(false), | 98 should_finish_download_(false), |
| 99 buffer_size_(0), | 99 buffer_size_(0), |
| 100 weak_factory_(this) { | 100 weak_factory_(this) { |
| 101 } | 101 } |
| 102 | 102 |
| 103 void URLRequestSlowDownloadJob::StartAsync() { | 103 void URLRequestSlowDownloadJob::StartAsync() { |
| 104 if (LowerCaseEqualsASCII(kFinishDownloadUrl, request_->url().spec().c_str())) | 104 if (base::LowerCaseEqualsASCII(kFinishDownloadUrl, |
| 105 request_->url().spec().c_str())) { |
| 105 URLRequestSlowDownloadJob::FinishPendingRequests(); | 106 URLRequestSlowDownloadJob::FinishPendingRequests(); |
| 106 if (LowerCaseEqualsASCII(kErrorDownloadUrl, request_->url().spec().c_str())) | 107 } |
| 108 if (base::LowerCaseEqualsASCII(kErrorDownloadUrl, |
| 109 request_->url().spec().c_str())) { |
| 107 URLRequestSlowDownloadJob::ErrorPendingRequests(); | 110 URLRequestSlowDownloadJob::ErrorPendingRequests(); |
| 111 } |
| 108 | 112 |
| 109 NotifyHeadersComplete(); | 113 NotifyHeadersComplete(); |
| 110 } | 114 } |
| 111 | 115 |
| 112 // ReadRawData and CheckDoneStatus together implement a state | 116 // ReadRawData and CheckDoneStatus together implement a state |
| 113 // machine. ReadRawData may be called arbitrarily by the network stack. | 117 // machine. ReadRawData may be called arbitrarily by the network stack. |
| 114 // It responds by: | 118 // It responds by: |
| 115 // * If there are bytes remaining in the first chunk, they are | 119 // * If there are bytes remaining in the first chunk, they are |
| 116 // returned. | 120 // returned. |
| 117 // [No bytes remaining in first chunk. ] | 121 // [No bytes remaining in first chunk. ] |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 bytes_already_sent_ += bytes_to_write; | 161 bytes_already_sent_ += bytes_to_write; |
| 158 return BUFFER_FILLED; | 162 return BUFFER_FILLED; |
| 159 } | 163 } |
| 160 | 164 |
| 161 return REQUEST_COMPLETE; | 165 return REQUEST_COMPLETE; |
| 162 } | 166 } |
| 163 | 167 |
| 164 bool URLRequestSlowDownloadJob::ReadRawData(IOBuffer* buf, | 168 bool URLRequestSlowDownloadJob::ReadRawData(IOBuffer* buf, |
| 165 int buf_size, | 169 int buf_size, |
| 166 int* bytes_read) { | 170 int* bytes_read) { |
| 167 if (LowerCaseEqualsASCII(kFinishDownloadUrl, | 171 if (base::LowerCaseEqualsASCII(kFinishDownloadUrl, |
| 168 request_->url().spec().c_str()) || | 172 request_->url().spec().c_str()) || |
| 169 LowerCaseEqualsASCII(kErrorDownloadUrl, request_->url().spec().c_str())) { | 173 base::LowerCaseEqualsASCII(kErrorDownloadUrl, |
| 174 request_->url().spec().c_str())) { |
| 170 VLOG(10) << __FUNCTION__ << " called w/ kFinish/ErrorDownloadUrl."; | 175 VLOG(10) << __FUNCTION__ << " called w/ kFinish/ErrorDownloadUrl."; |
| 171 *bytes_read = 0; | 176 *bytes_read = 0; |
| 172 return true; | 177 return true; |
| 173 } | 178 } |
| 174 | 179 |
| 175 VLOG(10) << __FUNCTION__ << " called at position " << bytes_already_sent_ | 180 VLOG(10) << __FUNCTION__ << " called at position " << bytes_already_sent_ |
| 176 << " in the stream."; | 181 << " in the stream."; |
| 177 ReadStatus status = FillBufferHelper(buf, buf_size, bytes_read); | 182 ReadStatus status = FillBufferHelper(buf, buf_size, bytes_read); |
| 178 switch (status) { | 183 switch (status) { |
| 179 case BUFFER_FILLED: | 184 case BUFFER_FILLED: |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 | 231 |
| 227 URLRequestSlowDownloadJob::~URLRequestSlowDownloadJob() { | 232 URLRequestSlowDownloadJob::~URLRequestSlowDownloadJob() { |
| 228 pending_requests_.Get().erase(this); | 233 pending_requests_.Get().erase(this); |
| 229 } | 234 } |
| 230 | 235 |
| 231 // Private const version. | 236 // Private const version. |
| 232 void URLRequestSlowDownloadJob::GetResponseInfoConst( | 237 void URLRequestSlowDownloadJob::GetResponseInfoConst( |
| 233 HttpResponseInfo* info) const { | 238 HttpResponseInfo* info) const { |
| 234 // Send back mock headers. | 239 // Send back mock headers. |
| 235 std::string raw_headers; | 240 std::string raw_headers; |
| 236 if (LowerCaseEqualsASCII(kFinishDownloadUrl, | 241 if (base::LowerCaseEqualsASCII(kFinishDownloadUrl, |
| 237 request_->url().spec().c_str()) || | 242 request_->url().spec().c_str()) || |
| 238 LowerCaseEqualsASCII(kErrorDownloadUrl, request_->url().spec().c_str())) { | 243 base::LowerCaseEqualsASCII(kErrorDownloadUrl, |
| 244 request_->url().spec().c_str())) { |
| 239 raw_headers.append( | 245 raw_headers.append( |
| 240 "HTTP/1.1 200 OK\n" | 246 "HTTP/1.1 200 OK\n" |
| 241 "Content-type: text/plain\n"); | 247 "Content-type: text/plain\n"); |
| 242 } else { | 248 } else { |
| 243 raw_headers.append( | 249 raw_headers.append( |
| 244 "HTTP/1.1 200 OK\n" | 250 "HTTP/1.1 200 OK\n" |
| 245 "Content-type: application/octet-stream\n" | 251 "Content-type: application/octet-stream\n" |
| 246 "Cache-Control: max-age=0\n"); | 252 "Cache-Control: max-age=0\n"); |
| 247 | 253 |
| 248 if (LowerCaseEqualsASCII(kKnownSizeUrl, request_->url().spec().c_str())) { | 254 if (base::LowerCaseEqualsASCII(kKnownSizeUrl, |
| 255 request_->url().spec().c_str())) { |
| 249 raw_headers.append(base::StringPrintf( | 256 raw_headers.append(base::StringPrintf( |
| 250 "Content-Length: %d\n", kFirstDownloadSize + kSecondDownloadSize)); | 257 "Content-Length: %d\n", kFirstDownloadSize + kSecondDownloadSize)); |
| 251 } | 258 } |
| 252 } | 259 } |
| 253 | 260 |
| 254 // ParseRawHeaders expects \0 to end each header line. | 261 // ParseRawHeaders expects \0 to end each header line. |
| 255 ReplaceSubstringsAfterOffset(&raw_headers, 0, "\n", std::string("\0", 1)); | 262 base::ReplaceSubstringsAfterOffset(&raw_headers, 0, "\n", |
| 263 std::string("\0", 1)); |
| 256 info->headers = new HttpResponseHeaders(raw_headers); | 264 info->headers = new HttpResponseHeaders(raw_headers); |
| 257 } | 265 } |
| 258 | 266 |
| 259 bool URLRequestSlowDownloadJob::GetMimeType(std::string* mime_type) const { | 267 bool URLRequestSlowDownloadJob::GetMimeType(std::string* mime_type) const { |
| 260 HttpResponseInfo info; | 268 HttpResponseInfo info; |
| 261 GetResponseInfoConst(&info); | 269 GetResponseInfoConst(&info); |
| 262 return info.headers.get() && info.headers->GetMimeType(mime_type); | 270 return info.headers.get() && info.headers->GetMimeType(mime_type); |
| 263 } | 271 } |
| 264 | 272 |
| 265 } // namespace net | 273 } // namespace net |
| OLD | NEW |