OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/public/test/test_download_request_handler.h" | 5 #include "content/public/test/test_download_request_handler.h" |
6 | 6 |
7 #include <inttypes.h> | 7 #include <inttypes.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 } | 278 } |
279 | 279 |
280 int64_t range_end = | 280 int64_t range_end = |
281 std::min(requested_range_end_, offset_of_next_read_ + buf_size - 1); | 281 std::min(requested_range_end_, offset_of_next_read_ + buf_size - 1); |
282 | 282 |
283 if (!parameters_->injected_errors.empty()) { | 283 if (!parameters_->injected_errors.empty()) { |
284 const InjectedError& injected_error = parameters_->injected_errors.front(); | 284 const InjectedError& injected_error = parameters_->injected_errors.front(); |
285 | 285 |
286 if (offset_of_next_read_ == injected_error.offset) { | 286 if (offset_of_next_read_ == injected_error.offset) { |
287 int error = injected_error.error; | 287 int error = injected_error.error; |
288 SetStatus(net::URLRequestStatus(net::URLRequestStatus::FAILED, error)); | |
289 DVLOG(1) << "Returning error " << net::ErrorToString(error); | 288 DVLOG(1) << "Returning error " << net::ErrorToString(error); |
290 ReportCompletedRequest(injected_error.offset - requested_range_begin_); | 289 ReportCompletedRequest(injected_error.offset - requested_range_begin_); |
291 parameters_->injected_errors.pop(); | 290 parameters_->injected_errors.pop(); |
292 return error; | 291 return error; |
293 } | 292 } |
294 | 293 |
295 if (offset_of_next_read_ < injected_error.offset && | 294 if (offset_of_next_read_ < injected_error.offset && |
296 injected_error.offset <= range_end) | 295 injected_error.offset <= range_end) |
297 range_end = injected_error.offset - 1; | 296 range_end = injected_error.offset - 1; |
298 } | 297 } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 return; | 345 return; |
347 } | 346 } |
348 | 347 |
349 response_info_.headers = new net::HttpResponseHeaders( | 348 response_info_.headers = new net::HttpResponseHeaders( |
350 net::HttpUtil::AssembleRawHeaders(headers.c_str(), headers.size())); | 349 net::HttpUtil::AssembleRawHeaders(headers.c_str(), headers.size())); |
351 NotifyHeadersCompleteAndPrepareToRead(); | 350 NotifyHeadersCompleteAndPrepareToRead(); |
352 } | 351 } |
353 | 352 |
354 void TestDownloadRequestHandler::PartialResponseJob::HandleOnStartDefault() { | 353 void TestDownloadRequestHandler::PartialResponseJob::HandleOnStartDefault() { |
355 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 354 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
356 SetStatus(net::URLRequestStatus()); | |
357 | 355 |
358 const net::HttpRequestHeaders& extra_headers = | 356 const net::HttpRequestHeaders& extra_headers = |
359 request()->extra_request_headers(); | 357 request()->extra_request_headers(); |
360 | 358 |
361 DCHECK(request()->method() == "GET") << "PartialResponseJob only " | 359 DCHECK(request()->method() == "GET") << "PartialResponseJob only " |
362 "knows how to respond to GET " | 360 "knows how to respond to GET " |
363 "requests"; | 361 "requests"; |
364 std::string value; | 362 std::string value; |
365 | 363 |
366 // If the request contains an 'If-Range' header and the value matches our | 364 // If the request contains an 'If-Range' header and the value matches our |
367 // ETag, then try to handle the range request. | 365 // ETag, then try to handle the range request. |
368 if (parameters_->support_byte_ranges && | 366 if (parameters_->support_byte_ranges && |
369 extra_headers.GetHeader(net::HttpRequestHeaders::kIfRange, &value) && | 367 extra_headers.GetHeader(net::HttpRequestHeaders::kIfRange, &value) && |
370 value == parameters_->etag && HandleRangeAssumingValidatorMatch()) | 368 value == parameters_->etag && HandleRangeAssumingValidatorMatch()) { |
371 return; | 369 return; |
| 370 } |
372 | 371 |
373 if (parameters_->support_byte_ranges && | 372 if (parameters_->support_byte_ranges && |
374 extra_headers.GetHeader("If-Match", &value)) { | 373 extra_headers.GetHeader("If-Match", &value)) { |
375 if (value == parameters_->etag && HandleRangeAssumingValidatorMatch()) | 374 if (value == parameters_->etag && HandleRangeAssumingValidatorMatch()) |
376 return; | 375 return; |
377 | 376 |
378 // Unlike If-Range, If-Match returns an error if the validators don't match. | 377 // Unlike If-Range, If-Match returns an error if the validators don't match. |
379 response_info_.headers = HeadersFromString( | 378 response_info_.headers = HeadersFromString( |
380 "HTTP/1.1 412 Precondition failed\r\n" | 379 "HTTP/1.1 412 Precondition failed\r\n" |
381 "Content-Length: 0\r\n"); | 380 "Content-Length: 0\r\n"); |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 base::RunLoop run_loop; | 663 base::RunLoop run_loop; |
665 BrowserThread::PostTaskAndReply( | 664 BrowserThread::PostTaskAndReply( |
666 BrowserThread::IO, FROM_HERE, | 665 BrowserThread::IO, FROM_HERE, |
667 base::Bind(&Interceptor::GetAndResetCompletedRequests, interceptor_, | 666 base::Bind(&Interceptor::GetAndResetCompletedRequests, interceptor_, |
668 requests), | 667 requests), |
669 run_loop.QuitClosure()); | 668 run_loop.QuitClosure()); |
670 run_loop.Run(); | 669 run_loop.Run(); |
671 } | 670 } |
672 | 671 |
673 } // namespace content | 672 } // namespace content |
OLD | NEW |