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

Side by Side Diff: content/browser/download/download_request_core.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, 10 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 (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 "content/browser/download/download_request_core.h" 5 #include "content/browser/download/download_request_core.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 192
193 DownloadRequestCore::DownloadRequestCore(net::URLRequest* request, 193 DownloadRequestCore::DownloadRequestCore(net::URLRequest* request,
194 Delegate* delegate) 194 Delegate* delegate)
195 : delegate_(delegate), 195 : delegate_(delegate),
196 request_(request), 196 request_(request),
197 download_id_(DownloadItem::kInvalidId), 197 download_id_(DownloadItem::kInvalidId),
198 last_buffer_size_(0), 198 last_buffer_size_(0),
199 bytes_read_(0), 199 bytes_read_(0),
200 pause_count_(0), 200 pause_count_(0),
201 was_deferred_(false), 201 was_deferred_(false),
202 is_partial_request_(false),
202 started_(false), 203 started_(false),
203 abort_reason_(DOWNLOAD_INTERRUPT_REASON_NONE) { 204 abort_reason_(DOWNLOAD_INTERRUPT_REASON_NONE) {
204 DCHECK(request_); 205 DCHECK(request_);
205 DCHECK(delegate_); 206 DCHECK(delegate_);
206 RecordDownloadCount(UNTHROTTLED_COUNT); 207 RecordDownloadCount(UNTHROTTLED_COUNT);
207 power_save_blocker_ = PowerSaveBlocker::Create( 208 power_save_blocker_ = PowerSaveBlocker::Create(
208 PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, 209 PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension,
209 PowerSaveBlocker::kReasonOther, "Download in progress"); 210 PowerSaveBlocker::kReasonOther, "Download in progress");
210 DownloadRequestData* request_data = DownloadRequestData::Get(request_); 211 DownloadRequestData* request_data = DownloadRequestData::Get(request_);
211 if (request_data) { 212 if (request_data) {
212 save_info_ = request_data->TakeSaveInfo(); 213 save_info_ = request_data->TakeSaveInfo();
213 download_id_ = request_data->download_id(); 214 download_id_ = request_data->download_id();
214 on_started_callback_ = request_data->callback(); 215 on_started_callback_ = request_data->callback();
215 DownloadRequestData::Detach(request_); 216 DownloadRequestData::Detach(request_);
217 is_partial_request_ = save_info_->offset > 0;
216 } else { 218 } else {
217 save_info_.reset(new DownloadSaveInfo); 219 save_info_.reset(new DownloadSaveInfo);
218 } 220 }
219 } 221 }
220 222
221 DownloadRequestCore::~DownloadRequestCore() { 223 DownloadRequestCore::~DownloadRequestCore() {
222 DCHECK_CURRENTLY_ON(BrowserThread::IO); 224 DCHECK_CURRENTLY_ON(BrowserThread::IO);
223 // Remove output stream callback if a stream exists. 225 // Remove output stream callback if a stream exists.
224 if (stream_writer_) 226 if (stream_writer_)
225 stream_writer_->RegisterCallback(base::Closure()); 227 stream_writer_->RegisterCallback(base::Closure());
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 create_info->save_info->suggested_name.clear(); 327 create_info->save_info->suggested_name.clear();
326 328
327 RecordDownloadMimeType(create_info->mime_type); 329 RecordDownloadMimeType(create_info->mime_type);
328 RecordDownloadContentDisposition(create_info->content_disposition); 330 RecordDownloadContentDisposition(create_info->content_disposition);
329 331
330 delegate_->OnStart(std::move(create_info), std::move(stream_reader), 332 delegate_->OnStart(std::move(create_info), std::move(stream_reader),
331 base::ResetAndReturn(&on_started_callback_)); 333 base::ResetAndReturn(&on_started_callback_));
332 return true; 334 return true;
333 } 335 }
334 336
337 bool DownloadRequestCore::OnRequestRedirected() {
338 DVLOG(20) << __FUNCTION__ << "() " << DebugString();
339 if (is_partial_request_) {
340 // A redirect while attempting a partial resumption indicates a potential
341 // middle box. Trigger another interruption so that the DownloadItem can
342 // retry.
343 abort_reason_ = DOWNLOAD_INTERRUPT_REASON_SERVER_UNREACHABLE;
344 return false;
345 }
346 return true;
347 }
348
335 // Create a new buffer, which will be handed to the download thread for file 349 // Create a new buffer, which will be handed to the download thread for file
336 // writing and deletion. 350 // writing and deletion.
337 bool DownloadRequestCore::OnWillRead(scoped_refptr<net::IOBuffer>* buf, 351 bool DownloadRequestCore::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
338 int* buf_size, 352 int* buf_size,
339 int min_size) { 353 int min_size) {
340 DCHECK_CURRENTLY_ON(BrowserThread::IO); 354 DCHECK_CURRENTLY_ON(BrowserThread::IO);
341 DCHECK(buf && buf_size); 355 DCHECK(buf && buf_size);
342 DCHECK(!read_buffer_.get()); 356 DCHECK(!read_buffer_.get());
343 357
344 *buf_size = min_size < 0 ? kReadBufSize : min_size; 358 *buf_size = min_size < 0 ? kReadBufSize : min_size;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 } 395 }
382 396
383 read_buffer_ = NULL; // Drop our reference. 397 read_buffer_ = NULL; // Drop our reference.
384 398
385 if (pause_count_ > 0) 399 if (pause_count_ > 0)
386 *defer = was_deferred_ = true; 400 *defer = was_deferred_ = true;
387 401
388 return true; 402 return true;
389 } 403 }
390 404
405 void DownloadRequestCore::OnWillAbort(DownloadInterruptReason reason) {
406 DVLOG(20) << __FUNCTION__ << "() reason=" << reason << " " << DebugString();
407 DCHECK(!started_);
408 abort_reason_ = reason;
409 }
410
391 void DownloadRequestCore::OnResponseCompleted( 411 void DownloadRequestCore::OnResponseCompleted(
392 const net::URLRequestStatus& status) { 412 const net::URLRequestStatus& status) {
393 DCHECK_CURRENTLY_ON(BrowserThread::IO); 413 DCHECK_CURRENTLY_ON(BrowserThread::IO);
394 int response_code = status.is_success() ? request()->GetResponseCode() : 0; 414 int response_code = status.is_success() ? request()->GetResponseCode() : 0;
395 DVLOG(20) << __FUNCTION__ << "()" << DebugString() 415 DVLOG(20) << __FUNCTION__ << "()" << DebugString()
396 << " status.status() = " << status.status() 416 << " status.status() = " << status.status()
397 << " status.error() = " << status.error() 417 << " status.error() = " << status.error()
398 << " response_code = " << response_code; 418 << " response_code = " << response_code;
399 419
400 DownloadInterruptReason reason = HandleRequestStatus(status); 420 DownloadInterruptReason reason = HandleRequestStatus(status);
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 return DOWNLOAD_INTERRUPT_REASON_NONE; 628 return DOWNLOAD_INTERRUPT_REASON_NONE;
609 } 629 }
610 630
611 if (http_headers.response_code() == net::HTTP_PARTIAL_CONTENT) 631 if (http_headers.response_code() == net::HTTP_PARTIAL_CONTENT)
612 return DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT; 632 return DOWNLOAD_INTERRUPT_REASON_SERVER_BAD_CONTENT;
613 633
614 return DOWNLOAD_INTERRUPT_REASON_NONE; 634 return DOWNLOAD_INTERRUPT_REASON_NONE;
615 } 635 }
616 636
617 } // namespace content 637 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_request_core.h ('k') | content/browser/download/download_resource_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698