| Index: content/browser/download/save_file_manager.cc
|
| diff --git a/content/browser/download/save_file_manager.cc b/content/browser/download/save_file_manager.cc
|
| index 256ef2811375b0a4eaffbd3518fda580fdf0e5b7..ad12d8b5b455f6dec8dea485912043227cf80a74 100644
|
| --- a/content/browser/download/save_file_manager.cc
|
| +++ b/content/browser/download/save_file_manager.cc
|
| @@ -13,6 +13,7 @@
|
| #include "base/strings/string_util.h"
|
| #include "base/threading/thread.h"
|
| #include "content/browser/child_process_security_policy_impl.h"
|
| +#include "content/browser/download/download_task_runner.h"
|
| #include "content/browser/download/save_file.h"
|
| #include "content/browser/download/save_file_resource_handler.h"
|
| #include "content/browser/download/save_package.h"
|
| @@ -59,19 +60,18 @@ SaveFileManager* SaveFileManager::Get() {
|
| // Called during the browser shutdown process to clean up any state (open files,
|
| // timers) that live on the saving thread (file thread).
|
| void SaveFileManager::Shutdown() {
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(&SaveFileManager::OnShutdown, this));
|
| + GetDownloadTaskRunner()->PostTask(
|
| + FROM_HERE, base::Bind(&SaveFileManager::OnShutdown, this));
|
| }
|
|
|
| // Stop file thread operations.
|
| void SaveFileManager::OnShutdown() {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
|
| save_file_map_.clear();
|
| }
|
|
|
| SaveFile* SaveFileManager::LookupSaveFile(SaveItemId save_item_id) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
|
| auto it = save_file_map_.find(save_item_id);
|
| return it == save_file_map_.end() ? nullptr : it->second.get();
|
| }
|
| @@ -119,9 +119,8 @@ void SaveFileManager::SaveURL(SaveItemId save_item_id,
|
|
|
| // Since the data will come from render process, so we need to start
|
| // this kind of save job by ourself.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(&SaveFileManager::StartSave, this, info));
|
| + GetDownloadTaskRunner()->PostTask(
|
| + FROM_HERE, base::Bind(&SaveFileManager::StartSave, this, info));
|
| }
|
| }
|
|
|
| @@ -160,18 +159,16 @@ SavePackage* SaveFileManager::GetSavePackageFromRenderIds(
|
| void SaveFileManager::DeleteDirectoryOrFile(const base::FilePath& full_path,
|
| bool is_dir) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(&SaveFileManager::OnDeleteDirectoryOrFile,
|
| - this, full_path, is_dir));
|
| + GetDownloadTaskRunner()->PostTask(
|
| + FROM_HERE, base::Bind(&SaveFileManager::OnDeleteDirectoryOrFile, this,
|
| + full_path, is_dir));
|
| }
|
|
|
| void SaveFileManager::SendCancelRequest(SaveItemId save_item_id) {
|
| // Cancel the request which has specific save id.
|
| DCHECK(!save_item_id.is_null());
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(&SaveFileManager::CancelSave, this, save_item_id));
|
| + GetDownloadTaskRunner()->PostTask(
|
| + FROM_HERE, base::Bind(&SaveFileManager::CancelSave, this, save_item_id));
|
| }
|
|
|
| // Notifications sent from the IO thread and run on the file thread:
|
| @@ -180,7 +177,7 @@ void SaveFileManager::SendCancelRequest(SaveItemId save_item_id) {
|
| // to create a SaveFile which will hold and finally destroy |info|. It will
|
| // then passes |info| to the UI thread for reporting saving status.
|
| void SaveFileManager::StartSave(SaveFileCreateInfo* info) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
|
| DCHECK(info);
|
| // No need to calculate hash.
|
| std::unique_ptr<SaveFile> save_file = base::MakeUnique<SaveFile>(info, false);
|
| @@ -204,7 +201,7 @@ void SaveFileManager::StartSave(SaveFileCreateInfo* info) {
|
| void SaveFileManager::UpdateSaveProgress(SaveItemId save_item_id,
|
| net::IOBuffer* data,
|
| int data_len) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
|
| SaveFile* save_file = LookupSaveFile(save_item_id);
|
| if (save_file) {
|
| DCHECK(save_file->InProgress());
|
| @@ -227,7 +224,7 @@ void SaveFileManager::SaveFinished(SaveItemId save_item_id,
|
| DVLOG(20) << __func__ << "() save_item_id = " << save_item_id
|
| << " save_package_id = " << save_package_id
|
| << " is_success = " << is_success;
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
|
|
|
| int64_t bytes_so_far = 0;
|
| SaveFile* save_file = LookupSaveFile(save_item_id);
|
| @@ -362,7 +359,7 @@ void SaveFileManager::ExecuteCancelSaveRequest(int render_process_id,
|
| // sent from the UI thread, the saving job may have already completed and
|
| // won't exist in our map.
|
| void SaveFileManager::CancelSave(SaveItemId save_item_id) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
|
| auto it = save_file_map_.find(save_item_id);
|
| if (it != save_file_map_.end()) {
|
| std::unique_ptr<SaveFile> save_file = std::move(it->second);
|
| @@ -392,7 +389,7 @@ void SaveFileManager::CancelSave(SaveItemId save_item_id) {
|
|
|
| void SaveFileManager::OnDeleteDirectoryOrFile(const base::FilePath& full_path,
|
| bool is_dir) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
|
| DCHECK(!full_path.empty());
|
|
|
| base::DeleteFile(full_path, is_dir);
|
| @@ -403,7 +400,7 @@ void SaveFileManager::RenameAllFiles(const FinalNamesMap& final_names,
|
| int render_process_id,
|
| int render_frame_routing_id,
|
| SavePackageId save_package_id) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
|
|
|
| if (!resource_dir.empty() && !base::PathExists(resource_dir))
|
| base::CreateDirectory(resource_dir);
|
| @@ -441,7 +438,7 @@ void SaveFileManager::OnFinishSavePageJob(int render_process_id,
|
|
|
| void SaveFileManager::RemoveSavedFileFromFileMap(
|
| const std::vector<SaveItemId>& save_item_ids) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| + DCHECK(GetDownloadTaskRunner()->RunsTasksInCurrentSequence());
|
|
|
| for (const SaveItemId save_item_id : save_item_ids) {
|
| auto it = save_file_map_.find(save_item_id);
|
|
|