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

Unified Diff: content/browser/download/download_item_impl.cc

Issue 17315009: [Downloads] Add more browsertests for resumption. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/download/download_item_impl.cc
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc
index 9b6b51637677c663957783b67abac46f46355138..5a8e413559ca0807df8a9ab552a0a2ef5d36a214 100644
--- a/content/browser/download/download_item_impl.cc
+++ b/content/browser/download/download_item_impl.cc
@@ -1036,8 +1036,6 @@ void DownloadItemImpl::Start(
TransitionTo(IN_PROGRESS_INTERNAL);
- last_reason_ = DOWNLOAD_INTERRUPT_REASON_NONE;
-
BrowserThread::PostTask(
BrowserThread::FILE, FROM_HERE,
base::Bind(&DownloadFile::Initialize,
@@ -1359,9 +1357,11 @@ void DownloadItemImpl::Interrupt(DownloadInterruptReason reason) {
// Cancel (delete file) if we're going to restart; no point in leaving
// data around we aren't going to use. Also cancel if resumption isn't
// enabled for the same reason.
- ReleaseDownloadFile(resume_mode == RESUME_MODE_IMMEDIATE_RESTART ||
- resume_mode == RESUME_MODE_USER_RESTART ||
- !IsDownloadResumptionEnabled());
+ if (download_file_.get()) {
Randy Smith (Not in Mondays) 2013/06/19 21:46:21 What are the circumstances that trigger this code
asanka 2013/06/20 20:04:01 That's exactly the transition that's being handled
Randy Smith (Not in Mondays) 2013/06/20 20:55:22 Gotcha. To the extent possible, I'd like to make
asanka 2013/06/20 22:40:13 Yup. That's a good suggestion.
+ ReleaseDownloadFile(resume_mode == RESUME_MODE_IMMEDIATE_RESTART ||
+ resume_mode == RESUME_MODE_USER_RESTART ||
+ !IsDownloadResumptionEnabled());
+ }
// Reset all data saved, as even if we did save all the data we're going
// to go through another round of downloading when we resume.
@@ -1376,12 +1376,18 @@ void DownloadItemImpl::Interrupt(DownloadInterruptReason reason) {
all_data_saved_ = false;
// Cancel the originating URL request.
- request_handle_->CancelRequest();
+ if (request_handle_.get())
+ request_handle_->CancelRequest();
TransitionTo(INTERRUPTED_INTERNAL);
RecordDownloadInterrupted(reason, received_bytes_, total_bytes_);
AutoResumeIfValid();
+
+ // Since the external state could be INTERRUPTED before and after the
+ // TransitionTo() calls, the observers may not be notified. Manually trigger
+ // an update since the value of CanResume() may have changed.
+ UpdateObservers();
Randy Smith (Not in Mondays) 2013/06/19 21:46:21 Making a note to myself to come back to this after
}
void DownloadItemImpl::ReleaseDownloadFile(bool destroy_file) {

Powered by Google App Engine
This is Rietveld 408576698