summaryrefslogtreecommitdiffstats
path: root/chrome/browser/download
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/download')
-rw-r--r--chrome/browser/download/download_file_manager.cc13
-rw-r--r--chrome/browser/download/download_file_manager.h4
2 files changed, 17 insertions, 0 deletions
diff --git a/chrome/browser/download/download_file_manager.cc b/chrome/browser/download/download_file_manager.cc
index 3c1edf9..df28bbf 100644
--- a/chrome/browser/download/download_file_manager.cc
+++ b/chrome/browser/download/download_file_manager.cc
@@ -96,6 +96,12 @@ void DownloadFileManager::CreateDownloadFile(
// TODO(phajdan.jr): fix the duplication of path info below.
info->path = info->save_info.file_path;
+ // The file is now ready, we can un-pause the request and start saving data.
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableMethod(this, &DownloadFileManager::ResumeDownloadRequest,
+ info->child_id, info->request_id));
+
StartUpdateTimer();
ChromeThread::PostTask(
@@ -104,6 +110,13 @@ void DownloadFileManager::CreateDownloadFile(
&DownloadManager::StartDownload, info));
}
+void DownloadFileManager::ResumeDownloadRequest(int child_id, int request_id) {
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
+
+ // This balances the pause in DownloadResourceHandler::OnResponseStarted.
+ resource_dispatcher_host_->PauseRequest(child_id, request_id, false);
+}
+
DownloadFile* DownloadFileManager::GetDownloadFile(int id) {
DownloadFileMap::iterator it = downloads_.find(id);
return it == downloads_.end() ? NULL : it->second;
diff --git a/chrome/browser/download/download_file_manager.h b/chrome/browser/download/download_file_manager.h
index d51d35f..9b909d9 100644
--- a/chrome/browser/download/download_file_manager.h
+++ b/chrome/browser/download/download_file_manager.h
@@ -130,6 +130,10 @@ class DownloadFileManager
void CreateDownloadFile(DownloadCreateInfo* info,
DownloadManager* download_manager);
+ // Tells the ResourceDispatcherHost to resume a download request
+ // that was paused to wait for the on-disk file to be created.
+ void ResumeDownloadRequest(int child_id, int request_id);
+
// Called only on the download thread.
DownloadFile* GetDownloadFile(int id);