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

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

Issue 8404049: Added member data to classes to support download resumption. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rearranged structures for greater consistency. Created 9 years, 1 month 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.cc
diff --git a/content/browser/download/download_item.cc b/content/browser/download/download_item.cc
index 3318a0769a6f2459d9971b7e6377d0a55e04db13..904d1257ab25073897f0617b71b08c16868e8d41 100644
--- a/content/browser/download/download_item.cc
+++ b/content/browser/download/download_item.cc
@@ -131,12 +131,19 @@ const char DownloadItem::kEmptyFileHash[] = "";
// Constructor for reading from the history service.
DownloadItem::DownloadItem(DownloadManager* download_manager,
const DownloadPersistentStoreInfo& info)
- : download_id_(download_manager->GetNextId()),
+ : state_info_(info.target_name, FilePath(), false,
+ content::PAGE_TRANSITION_LINK, false, 0,
+ DownloadStateInfo::NOT_DANGEROUS),
+ download_id_(download_manager->GetNextId()),
full_path_(info.path),
url_chain_(1, info.url),
referrer_url_(info.referrer_url),
total_bytes_(info.total_bytes),
received_bytes_(info.received_bytes),
+ hash_state_(info.hash_state),
+ last_modified_time_(info.last_modified_time),
+ etag_(info.etag),
+ last_reason_(info.last_reason),
start_tick_(base::TimeTicks()),
state_(static_cast<DownloadState>(info.state)),
start_time_(info.start_time),
@@ -182,6 +189,9 @@ DownloadItem::DownloadItem(DownloadManager* download_manager,
referrer_charset_(info.referrer_charset),
total_bytes_(info.total_bytes),
received_bytes_(0),
+ hash_(DownloadItem::kEmptyFileHash),
+ last_modified_time_(info.last_modified),
+ etag_(info.etag),
last_reason_(DOWNLOAD_INTERRUPT_REASON_NONE),
start_tick_(base::TimeTicks::Now()),
state_(IN_PROGRESS),
@@ -215,6 +225,7 @@ DownloadItem::DownloadItem(DownloadManager* download_manager,
referrer_url_(GURL()),
total_bytes_(0),
received_bytes_(0),
+ hash_(DownloadItem::kEmptyFileHash),
last_reason_(DOWNLOAD_INTERRUPT_REASON_NONE),
start_tick_(base::TimeTicks::Now()),
state_(IN_PROGRESS),
@@ -340,10 +351,17 @@ void DownloadItem::UpdateSize(int64 bytes_so_far) {
total_bytes_ = 0;
}
+void DownloadItem::UpdateSizeAndHashState(int64 bytes_so_far,
+ const std::string& hash_state) {
+ hash_state_ = hash_state;
+
+ UpdateSize(bytes_so_far);
+}
+
// Updates from the download thread may have been posted while this download
// was being cancelled in the UI thread, so we'll accept them unless we're
// complete.
-void DownloadItem::Update(int64 bytes_so_far) {
+void DownloadItem::Update(int64 bytes_so_far, const std::string& hash_state) {
// TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -351,7 +369,7 @@ void DownloadItem::Update(int64 bytes_so_far) {
NOTREACHED();
return;
}
- UpdateSize(bytes_so_far);
+ UpdateSizeAndHashState(bytes_so_far, hash_state);
UpdateObservers();
}
@@ -398,8 +416,8 @@ void DownloadItem::OnAllDataSaved(int64 size, const std::string& final_hash) {
DCHECK(!all_data_saved_);
all_data_saved_ = true;
- UpdateSize(size);
hash_ = final_hash;
+ UpdateSize(size);
}
void DownloadItem::OnDownloadedFileRemoved() {
@@ -460,7 +478,9 @@ void DownloadItem::UpdateTarget() {
state_info_.target_name = full_path_.BaseName();
}
-void DownloadItem::Interrupted(int64 size, InterruptReason reason) {
+void DownloadItem::Interrupted(int64 size,
+ const std::string& hash_state,
+ InterruptReason reason) {
// TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -468,7 +488,7 @@ void DownloadItem::Interrupted(int64 size, InterruptReason reason) {
return;
last_reason_ = reason;
- UpdateSize(size);
+ UpdateSizeAndHashState(size, hash_state);
download_stats::RecordDownloadInterrupted(reason,
received_bytes_,
total_bytes_);
@@ -685,6 +705,7 @@ void DownloadItem::MarkContentDangerous() {
DownloadPersistentStoreInfo DownloadItem::GetPersistentStoreInfo() const {
return DownloadPersistentStoreInfo(full_path(),
+ target_name(),
GetURL(),
referrer_url(),
start_time(),
@@ -693,7 +714,11 @@ DownloadPersistentStoreInfo DownloadItem::GetPersistentStoreInfo() const {
total_bytes(),
state(),
db_handle(),
- opened());
+ opened(),
+ hash_state_,
+ last_modified_time_,
+ etag_,
+ last_reason_);
}
TabContents* DownloadItem::GetTabContents() const {
@@ -738,9 +763,8 @@ void DownloadItem::Init(bool active) {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
UpdateTarget();
- if (active) {
+ if (active)
download_stats::RecordDownloadCount(download_stats::START_COUNT);
- }
VLOG(20) << __FUNCTION__ << "() " << DebugString(true);
}
@@ -801,6 +825,8 @@ std::string DownloadItem::DebugString(bool verbose) const {
" is_paused = %c"
" is_otr = %c"
" safety_state = %s"
+ " last_modified = '%s'"
+ " etag = '%s'"
" url_chain = \n\t\"%s\"\n\t"
" target_name = \"%" PRFilePath "\""
" full_path = \"%" PRFilePath "\"",
@@ -810,6 +836,8 @@ std::string DownloadItem::DebugString(bool verbose) const {
is_paused() ? 'T' : 'F',
is_otr() ? 'T' : 'F',
DebugSafetyStateString(safety_state()),
+ last_modified_time_.c_str(),
+ etag_.c_str(),
url_list.c_str(),
state_info_.target_name.value().c_str(),
full_path().value().c_str());

Powered by Google App Engine
This is Rietveld 408576698