| Index: content/browser/download/download_manager_impl.cc
|
| diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
|
| index af74eba98afa986a63ec87758f63e4a5939c3cea..1956505137f9a1456cc318f1d59e62f8516f0597 100644
|
| --- a/content/browser/download/download_manager_impl.cc
|
| +++ b/content/browser/download/download_manager_impl.cc
|
| @@ -101,6 +101,14 @@ DownloadId DownloadManagerImpl::GetNextId() {
|
| return id_factory_->GetNextId();
|
| }
|
|
|
| +bool DownloadManagerImpl::ShouldOpenDownload(DownloadItem* item) {
|
| + return delegate_->ShouldOpenDownload(item);
|
| +}
|
| +
|
| +bool DownloadManagerImpl::ShouldOpenFileBasedOnExtension(const FilePath& path) {
|
| + return delegate_->ShouldOpenFileBasedOnExtension(path);
|
| +}
|
| +
|
| void DownloadManagerImpl::Shutdown() {
|
| VLOG(20) << __FUNCTION__ << "()"
|
| << " shutdown_needed_ = " << shutdown_needed_;
|
| @@ -134,7 +142,7 @@ void DownloadManagerImpl::Shutdown() {
|
| // The user hasn't accepted it, so we need to remove it
|
| // from the disk. This may or may not result in it being
|
| // removed from the DownloadManager queues and deleted
|
| - // (specifically, DownloadManager::RemoveDownload only
|
| + // (specifically, DownloadManager::DownloadRemoved only
|
| // removes and deletes it if it's known to the history service)
|
| // so the only thing we know after calling this function is that
|
| // the download was deleted if-and-only-if it was removed
|
| @@ -317,7 +325,7 @@ void DownloadManagerImpl::RestartDownload(
|
| }
|
| }
|
|
|
| -content::BrowserContext* DownloadManagerImpl::BrowserContext() {
|
| +content::BrowserContext* DownloadManagerImpl::BrowserContext() const {
|
| return browser_context_;
|
| }
|
|
|
| @@ -341,6 +349,26 @@ void DownloadManagerImpl::CreateDownloadItem(
|
| active_downloads_[download_id] = download;
|
| }
|
|
|
| +DownloadItem* DownloadManagerImpl::CreateSavePackageDownloadItem(
|
| + const FilePath& main_file_path,
|
| + const GURL& page_url,
|
| + bool is_otr,
|
| + DownloadItem::Observer* observer) {
|
| + DownloadItem* download = new DownloadItemImpl(
|
| + this, main_file_path, page_url, is_otr, GetNextId());
|
| +
|
| + download->AddObserver(observer);
|
| +
|
| + DCHECK(!ContainsKey(save_page_downloads_, download->GetId()));
|
| + downloads_.insert(download);
|
| + save_page_downloads_[download->GetId()] = download;
|
| +
|
| + // Will notify the observer in the callback.
|
| + delegate_->AddItemToPersistentStore(download);
|
| +
|
| + return download;
|
| +}
|
| +
|
| void DownloadManagerImpl::ContinueDownloadWithPath(
|
| DownloadItem* download, const FilePath& chosen_file) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| @@ -371,7 +399,8 @@ void DownloadManagerImpl::ContinueDownloadWithPath(
|
| BrowserThread::PostTask(
|
| BrowserThread::FILE, FROM_HERE,
|
| base::Bind(&DownloadFileManager::RenameInProgressDownloadFile,
|
| - file_manager_, download->GetGlobalId(), download_path));
|
| + file_manager_, download->GetGlobalId(),
|
| + download_path));
|
|
|
| download->Rename(download_path);
|
|
|
| @@ -411,7 +440,7 @@ void DownloadManagerImpl::OnResponseCompleted(int32 download_id,
|
| MaybeCompleteDownload(download);
|
| }
|
|
|
| -void DownloadManagerImpl::AssertQueueStateConsistent(DownloadItem* download) {
|
| +void DownloadManagerImpl::AssertStateConsistent(DownloadItem* download) const {
|
| // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
|
| if (download->GetState() == DownloadItem::REMOVING) {
|
| CHECK(!ContainsKey(downloads_, download));
|
| @@ -430,7 +459,7 @@ void DownloadManagerImpl::AssertQueueStateConsistent(DownloadItem* download) {
|
| } else {
|
| // TODO(rdsmith): Somewhat painful; make sure to disable in
|
| // release builds after resolution of http://crbug.com/85408.
|
| - for (DownloadMap::iterator it = history_downloads_.begin();
|
| + for (DownloadMap::const_iterator it = history_downloads_.begin();
|
| it != history_downloads_.end(); ++it) {
|
| CHECK(it->second != download);
|
| }
|
| @@ -510,13 +539,12 @@ void DownloadManagerImpl::MaybeCompleteDownload(DownloadItem* download) {
|
| download->OnDownloadCompleting(file_manager_);
|
| }
|
|
|
| -void DownloadManagerImpl::DownloadCompleted(int32 download_id) {
|
| +void DownloadManagerImpl::DownloadCompleted(DownloadItem* download) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - DownloadItem* download = GetDownloadItem(download_id);
|
| DCHECK(download);
|
| delegate_->UpdateItemInPersistentStore(download);
|
| - active_downloads_.erase(download_id);
|
| - AssertQueueStateConsistent(download);
|
| + active_downloads_.erase(download->GetId());
|
| + AssertStateConsistent(download);
|
| }
|
|
|
| void DownloadManagerImpl::OnDownloadRenamedToFinalName(
|
| @@ -558,7 +586,7 @@ void DownloadManagerImpl::CancelDownload(int32 download_id) {
|
| download->Cancel(true);
|
| }
|
|
|
| -void DownloadManagerImpl::DownloadCancelledInternal(DownloadItem* download) {
|
| +void DownloadManagerImpl::DownloadCancelled(DownloadItem* download) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| VLOG(20) << __FUNCTION__ << "()"
|
| @@ -567,7 +595,7 @@ void DownloadManagerImpl::DownloadCancelledInternal(DownloadItem* download) {
|
| RemoveFromActiveList(download);
|
| // This function is called from the DownloadItem, so DI state
|
| // should already have been updated.
|
| - AssertQueueStateConsistent(download);
|
| + AssertStateConsistent(download);
|
|
|
| if (file_manager_)
|
| download->OffThreadCancel(file_manager_);
|
| @@ -659,13 +687,12 @@ int DownloadManagerImpl::RemoveDownloadItems(
|
| return num_deleted;
|
| }
|
|
|
| -void DownloadManagerImpl::RemoveDownload(int64 download_handle) {
|
| - DownloadMap::iterator it = history_downloads_.find(download_handle);
|
| - if (it == history_downloads_.end())
|
| +void DownloadManagerImpl::DownloadRemoved(DownloadItem* download) {
|
| + if (history_downloads_.find(download->GetDbHandle()) ==
|
| + history_downloads_.end())
|
| return;
|
|
|
| // Make history update.
|
| - DownloadItem* download = it->second;
|
| delegate_->RemoveItemFromPersistentStore(download);
|
|
|
| // Remove from our tables and delete.
|
| @@ -687,7 +714,7 @@ int DownloadManagerImpl::RemoveDownloadsBetween(const base::Time remove_begin,
|
| if (download->GetStartTime() >= remove_begin &&
|
| (remove_end.is_null() || download->GetStartTime() < remove_end) &&
|
| (download->IsComplete() || download->IsCancelled())) {
|
| - AssertQueueStateConsistent(download);
|
| + AssertStateConsistent(download);
|
| pending_deletes.push_back(download);
|
| }
|
| }
|
| @@ -834,7 +861,8 @@ void DownloadManagerImpl::OnPersistentStoreQueryComplete(
|
| largest_db_handle_in_history_ = 0;
|
|
|
| for (size_t i = 0; i < entries->size(); ++i) {
|
| - DownloadItem* download = new DownloadItemImpl(this, entries->at(i));
|
| + DownloadItem* download = new DownloadItemImpl(
|
| + this, GetNextId(), entries->at(i));
|
| // TODO(rdsmith): Remove after http://crbug.com/85408 resolved.
|
| CHECK(!ContainsKey(history_downloads_, download->GetDbHandle()));
|
| downloads_.insert(download);
|
| @@ -1024,16 +1052,6 @@ void DownloadManagerImpl::AssertContainersConsistent() const {
|
| #endif
|
| }
|
|
|
| -void DownloadManagerImpl::SavePageDownloadStarted(DownloadItem* download) {
|
| - DCHECK(!ContainsKey(save_page_downloads_, download->GetId()));
|
| - downloads_.insert(download);
|
| - save_page_downloads_[download->GetId()] = download;
|
| -
|
| - // Add this entry to the history service.
|
| - // Additionally, the UI is notified in the callback.
|
| - delegate_->AddItemToPersistentStore(download);
|
| -}
|
| -
|
| // SavePackage will call SavePageDownloadFinished upon completion/cancellation.
|
| // The history callback will call OnSavePageItemAddedToPersistentStore.
|
| // If the download finishes before the history callback,
|
| @@ -1090,7 +1108,7 @@ void DownloadManagerImpl::SavePageDownloadFinished(DownloadItem* download) {
|
| }
|
| }
|
|
|
| -void DownloadManagerImpl::MarkDownloadOpened(DownloadItem* download) {
|
| +void DownloadManagerImpl::DownloadOpened(DownloadItem* download) {
|
| delegate_->UpdateItemInPersistentStore(download);
|
| int num_unopened = 0;
|
| for (DownloadMap::iterator it = history_downloads_.begin();
|
|
|