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

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

Issue 7749013: Made the cancel from CancelDownloadOnRename go through the full cancel path, (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Got rid of unnecessary local variable. Created 9 years, 4 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
« no previous file with comments | « content/browser/download/download_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/download/download_manager.cc
diff --git a/content/browser/download/download_manager.cc b/content/browser/download/download_manager.cc
index e17524c109783a749101d723fbb1830e0f351bf8..85c9710863e09024508aeb168cbf14ff8817ffc6 100644
--- a/content/browser/download/download_manager.cc
+++ b/content/browser/download/download_manager.cc
@@ -52,7 +52,8 @@ DownloadManager::DownloadManager(DownloadManagerDelegate* delegate,
browser_context_(NULL),
file_manager_(NULL),
status_updater_(status_updater->AsWeakPtr()),
- delegate_(delegate) {
+ delegate_(delegate),
+ largest_db_handle_in_history_(DownloadItem::kUninitializedHandle) {
if (status_updater_)
status_updater_->AddDelegate(this);
}
@@ -288,6 +289,8 @@ void DownloadManager::CreateDownloadItem(DownloadCreateInfo* info) {
browser_context_->IsOffTheRecord());
int32 download_id = info->download_id;
DCHECK(!ContainsKey(in_progress_, download_id));
+
+ // TODO(rdsmith): Remove after http://crbug.com/85408 resolved.
CHECK(!ContainsKey(active_downloads_, download_id));
downloads_.insert(download);
active_downloads_[download_id] = download;
@@ -506,38 +509,36 @@ void DownloadManager::OnDownloadRenamedToFinalName(int download_id,
delegate_->UpdatePathForItemInPersistentStore(item, full_path);
}
-void DownloadManager::DownloadCancelled(int32 download_id) {
+void DownloadManager::CancelDownload(int32 download_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DownloadMap::iterator it = in_progress_.find(download_id);
- if (it == in_progress_.end())
+ DownloadItem* download = GetDownloadItem(download_id);
+ if (!download)
return;
- DownloadItem* download = it->second;
- VLOG(20) << __FUNCTION__ << "()" << " download_id = " << download_id
+ download->Cancel(true);
+}
+
+void DownloadManager::DownloadCancelledInternal(DownloadItem* download) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ int download_id = download->id();
+
+ VLOG(20) << __FUNCTION__ << "()"
<< " download = " << download->DebugString(true);
// Clean up will happen when the history system create callback runs if we
// don't have a valid db_handle yet.
if (download->db_handle() != DownloadItem::kUninitializedHandle) {
- in_progress_.erase(it);
+ in_progress_.erase(download_id);
active_downloads_.erase(download_id);
UpdateDownloadProgress(); // Reflect removal from in_progress_.
delegate_->UpdateItemInPersistentStore(download);
+
+ // This function is called from the DownloadItem, so DI state
+ // should already have been updated.
AssertQueueStateConsistent(download);
}
- DownloadCancelledInternal(download_id, download->request_handle());
-}
-
-void DownloadManager::DownloadCancelledInternal(
- int download_id, const DownloadRequestHandle& request_handle) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- request_handle.CancelRequest();
-
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- NewRunnableMethod(
- file_manager_, &DownloadFileManager::CancelDownload, download_id));
+ download->OffThreadCancel(file_manager_);
}
void DownloadManager::OnDownloadError(int32 download_id,
@@ -762,7 +763,7 @@ void DownloadManager::FileSelectionCanceled(void* params) {
VLOG(20) << __FUNCTION__ << "()"
<< " download = " << download->DebugString(true);
- DownloadCancelledInternal(download_id, download->request_handle());
+ download->OffThreadCancel(file_manager_);
}
// Operations posted to us from the history service ----------------------------
@@ -771,13 +772,21 @@ void DownloadManager::FileSelectionCanceled(void* params) {
// 'DownloadPersistentStoreInfo's in sorted order (by ascending start_time).
void DownloadManager::OnPersistentStoreQueryComplete(
std::vector<DownloadPersistentStoreInfo>* entries) {
+ // TODO(rdsmith): Remove this and related logic when
+ // http://crbug.com/84508 is fixed.
+ largest_db_handle_in_history_ = 0;
+
for (size_t i = 0; i < entries->size(); ++i) {
DownloadItem* download = new DownloadItem(this, entries->at(i));
+ // TODO(rdsmith): Remove after http://crbug.com/85408 resolved.
CHECK(!ContainsKey(history_downloads_, download->db_handle()));
downloads_.insert(download);
history_downloads_[download->db_handle()] = download;
VLOG(20) << __FUNCTION__ << "()" << i << ">"
<< " download = " << download->DebugString(true);
+
+ if (download->db_handle() > largest_db_handle_in_history_)
+ largest_db_handle_in_history_ = download->db_handle();
}
NotifyModelChanged();
CheckForHistoryFilesRemoval();
@@ -794,6 +803,8 @@ void DownloadManager::AddDownloadItemToHistory(DownloadItem* download,
DCHECK(download->db_handle() == DownloadItem::kUninitializedHandle);
download->set_db_handle(db_handle);
+ // TODO(rdsmith): Convert to DCHECK() when http://crbug.com/84508
+ // is fixed.
CHECK(!ContainsKey(history_downloads_, download->db_handle()));
history_downloads_[download->db_handle()] = download;
@@ -830,6 +841,11 @@ void DownloadManager::OnDownloadItemAddedToPersistentStore(int32 download_id,
<< " download_id = " << download_id
<< " download = " << download->DebugString(true);
+ // TODO(rdsmith): Remove after http://crbug.com/85408 resolved.
+ CHECK(!ContainsKey(history_downloads_, download->db_handle()));
+ int64 largest_handle = largest_db_handle_in_history_;
+ base::debug::Alias(&largest_handle);
+
AddDownloadItemToHistory(download, db_handle);
// If the download is still in progress, try to complete it.
@@ -842,6 +858,8 @@ void DownloadManager::OnDownloadItemAddedToPersistentStore(int32 download_id,
if (download->IsInProgress()) {
MaybeCompleteDownload(download);
} else {
+ // TODO(rdsmith): Convert to DCHECK() when http://crbug.com/84508
+ // is fixed.
CHECK(download->IsCancelled())
<< " download = " << download->DebugString(true);
in_progress_.erase(download_id);
@@ -979,6 +997,11 @@ void DownloadManager::OnSavePageItemAddedToPersistentStore(int32 download_id,
return;
}
+ // TODO(rdsmith): Remove after http://crbug.com/85408 resolved.
+ CHECK(!ContainsKey(history_downloads_, download->db_handle()));
+ int64 largest_handle = largest_db_handle_in_history_;
+ base::debug::Alias(&largest_handle);
+
AddDownloadItemToHistory(download, db_handle);
// Finalize this download if it finished before the history callback.
« no previous file with comments | « content/browser/download/download_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698