Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: content/public/test/test_download_request_handler.cc

Issue 1544603003: [Downloads] Do not store error responses during resumption. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@unify-downloader-core
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 // re-entrancy. 142 // re-entrancy.
143 void NotifyHeadersCompleteAndPrepareToRead(); 143 void NotifyHeadersCompleteAndPrepareToRead();
144 144
145 scoped_ptr<Parameters> parameters_; 145 scoped_ptr<Parameters> parameters_;
146 146
147 base::WeakPtr<Interceptor> interceptor_; 147 base::WeakPtr<Interceptor> interceptor_;
148 net::HttpResponseInfo response_info_; 148 net::HttpResponseInfo response_info_;
149 int64_t offset_of_next_read_ = -1; 149 int64_t offset_of_next_read_ = -1;
150 int64_t requested_range_begin_ = -1; 150 int64_t requested_range_begin_ = -1;
151 int64_t requested_range_end_ = -1; 151 int64_t requested_range_end_ = -1;
152 bool should_report_completed_request_ = false;
152 base::WeakPtrFactory<PartialResponseJob> weak_factory_; 153 base::WeakPtrFactory<PartialResponseJob> weak_factory_;
153 154
154 DISALLOW_COPY_AND_ASSIGN(PartialResponseJob); 155 DISALLOW_COPY_AND_ASSIGN(PartialResponseJob);
155 }; 156 };
156 157
157 namespace { 158 namespace {
158 159
159 template <class T> 160 template <class T>
160 void StoreValueAndInvokeClosure(const base::Closure& closure, 161 void StoreValueAndInvokeClosure(const base::Closure& closure,
161 T* value_receiver, 162 T* value_receiver,
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 net::NetworkDelegate* network_delegate) 216 net::NetworkDelegate* network_delegate)
216 : net::URLRequestJob(request, network_delegate), 217 : net::URLRequestJob(request, network_delegate),
217 parameters_(std::move(parameters)), 218 parameters_(std::move(parameters)),
218 interceptor_(interceptor), 219 interceptor_(interceptor),
219 weak_factory_(this) { 220 weak_factory_(this) {
220 DCHECK(parameters_.get()); 221 DCHECK(parameters_.get());
221 DCHECK_LT(0, parameters_->size); 222 DCHECK_LT(0, parameters_->size);
222 DCHECK_NE(-1, parameters_->pattern_generator_seed); 223 DCHECK_NE(-1, parameters_->pattern_generator_seed);
223 } 224 }
224 225
225 TestDownloadRequestHandler::PartialResponseJob::~PartialResponseJob() {} 226 TestDownloadRequestHandler::PartialResponseJob::~PartialResponseJob() {
227 if (should_report_completed_request_)
228 ReportCompletedRequest(0);
229 }
226 230
227 void TestDownloadRequestHandler::PartialResponseJob::Start() { 231 void TestDownloadRequestHandler::PartialResponseJob::Start() {
228 DCHECK_CURRENTLY_ON(BrowserThread::IO); 232 DCHECK_CURRENTLY_ON(BrowserThread::IO);
229 DVLOG(1) << "Starting request for " << request()->url().spec(); 233 DVLOG(1) << "Starting request for " << request()->url().spec();
230 234
231 if (parameters_->on_start_handler.is_null() || !interceptor_.get()) { 235 if (parameters_->on_start_handler.is_null() || !interceptor_.get()) {
232 HandleOnStartDefault(); 236 HandleOnStartDefault();
233 return; 237 return;
234 } 238 }
235 239
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 parameters_->pattern_generator_seed, offset_of_next_read_, bytes_to_copy, 306 parameters_->pattern_generator_seed, offset_of_next_read_, bytes_to_copy,
303 buf->data()); 307 buf->data());
304 DVLOG(1) << "Read " << bytes_to_copy << " bytes at offset " 308 DVLOG(1) << "Read " << bytes_to_copy << " bytes at offset "
305 << offset_of_next_read_; 309 << offset_of_next_read_;
306 offset_of_next_read_ += bytes_to_copy; 310 offset_of_next_read_ += bytes_to_copy;
307 return bytes_to_copy; 311 return bytes_to_copy;
308 } 312 }
309 313
310 void TestDownloadRequestHandler::PartialResponseJob::ReportCompletedRequest( 314 void TestDownloadRequestHandler::PartialResponseJob::ReportCompletedRequest(
311 int64_t transferred_byte_count) { 315 int64_t transferred_byte_count) {
316 should_report_completed_request_ = false;
svaldez 2016/01/13 17:29:18 Seems unnecessary since we only call this on destr
asanka 2016/01/28 02:24:17 We also call ReportCompletedRequest when the URLRe
312 if (interceptor_.get()) { 317 if (interceptor_.get()) {
313 TestDownloadRequestHandler::CompletedRequest completed_request; 318 TestDownloadRequestHandler::CompletedRequest completed_request;
314 completed_request.transferred_byte_count = transferred_byte_count; 319 completed_request.transferred_byte_count = transferred_byte_count;
315 completed_request.request_headers = request()->extra_request_headers(); 320 completed_request.request_headers = request()->extra_request_headers();
316 interceptor_->AddCompletedRequest(completed_request); 321 interceptor_->AddCompletedRequest(completed_request);
317 } 322 }
318 } 323 }
319 324
320 // static 325 // static
321 void TestDownloadRequestHandler::PartialResponseJob:: 326 void TestDownloadRequestHandler::PartialResponseJob::
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 // prevents injecting an error at offset 0, it makes it much easier to set up 472 // prevents injecting an error at offset 0, it makes it much easier to set up
468 // parameter sets for download resumption. It means that when a request is 473 // parameter sets for download resumption. It means that when a request is
469 // interrupted at offset O, a subsequent request for the range O-<end> won't 474 // interrupted at offset O, a subsequent request for the range O-<end> won't
470 // immediately interrupt as well. If we don't exclude interruptions at 475 // immediately interrupt as well. If we don't exclude interruptions at
471 // relative offset 0, then test writers would need to reset the parameter 476 // relative offset 0, then test writers would need to reset the parameter
472 // prior to each resumption rather than once at the beginning of the test. 477 // prior to each resumption rather than once at the beginning of the test.
473 while (!parameters_->injected_errors.empty() && 478 while (!parameters_->injected_errors.empty() &&
474 parameters_->injected_errors.front().offset <= requested_range_begin_) 479 parameters_->injected_errors.front().offset <= requested_range_begin_)
475 parameters_->injected_errors.pop(); 480 parameters_->injected_errors.pop();
476 481
482 // From this point on, the request is considered successful.
483 should_report_completed_request_ = true;
484
477 base::MessageLoop::current()->PostTask( 485 base::MessageLoop::current()->PostTask(
478 FROM_HERE, base::Bind(&PartialResponseJob::NotifyHeadersComplete, 486 FROM_HERE, base::Bind(&PartialResponseJob::NotifyHeadersComplete,
479 weak_factory_.GetWeakPtr())); 487 weak_factory_.GetWeakPtr()));
480 } 488 }
481 489
482 // static 490 // static
483 base::WeakPtr<TestDownloadRequestHandler::Interceptor> 491 base::WeakPtr<TestDownloadRequestHandler::Interceptor>
484 TestDownloadRequestHandler::Interceptor::Register( 492 TestDownloadRequestHandler::Interceptor::Register(
485 const GURL& url, 493 const GURL& url,
486 scoped_refptr<base::SequencedTaskRunner> client_task_runner) { 494 scoped_refptr<base::SequencedTaskRunner> client_task_runner) {
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 base::RunLoop run_loop; 672 base::RunLoop run_loop;
665 BrowserThread::PostTaskAndReply( 673 BrowserThread::PostTaskAndReply(
666 BrowserThread::IO, FROM_HERE, 674 BrowserThread::IO, FROM_HERE,
667 base::Bind(&Interceptor::GetAndResetCompletedRequests, interceptor_, 675 base::Bind(&Interceptor::GetAndResetCompletedRequests, interceptor_,
668 requests), 676 requests),
669 run_loop.QuitClosure()); 677 run_loop.QuitClosure());
670 run_loop.Run(); 678 run_loop.Run();
671 } 679 }
672 680
673 } // namespace content 681 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698