Chromium Code Reviews| Index: chrome/browser/extensions/api/downloads/downloads_api.cc |
| diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc |
| index 9ee1954712d33bd84591c6b7b6eedbf8b7b80e12..a9d2951d2a3b83bef6c392dc1e41e88d1c926a9a 100644 |
| --- a/chrome/browser/extensions/api/downloads/downloads_api.cc |
| +++ b/chrome/browser/extensions/api/downloads/downloads_api.cc |
| @@ -337,13 +337,21 @@ void GetManagers( |
| } |
| } |
| -DownloadItem* GetActiveItem(Profile* profile, bool include_incognito, int id) { |
| +DownloadItem* GetDownload(Profile* profile, bool include_incognito, int id) { |
| DownloadManager* manager = NULL; |
| DownloadManager* incognito_manager = NULL; |
| GetManagers(profile, include_incognito, &manager, &incognito_manager); |
| DownloadItem* download_item = manager->GetDownload(id); |
| if (!download_item && incognito_manager) |
| download_item = incognito_manager->GetDownload(id); |
| + return download_item; |
| +} |
| + |
| +DownloadItem* GetDownloadIfInProgress( |
| + Profile* profile, |
| + bool include_incognito, |
| + int id) { |
| + DownloadItem* download_item = GetDownload(profile, include_incognito, id); |
| return download_item && download_item->IsInProgress() ? download_item : NULL; |
| } |
| @@ -687,7 +695,7 @@ bool DownloadsPauseFunction::RunImpl() { |
| scoped_ptr<extensions::api::downloads::Pause::Params> params( |
| extensions::api::downloads::Pause::Params::Create(*args_)); |
| EXTENSION_FUNCTION_VALIDATE(params.get()); |
| - DownloadItem* download_item = GetActiveItem( |
| + DownloadItem* download_item = GetDownloadIfInProgress( |
| profile(), include_incognito(), params->download_id); |
| if (download_item == NULL) { |
| // This could be due to an invalid download ID, or it could be due to the |
| @@ -709,7 +717,7 @@ bool DownloadsResumeFunction::RunImpl() { |
| scoped_ptr<extensions::api::downloads::Resume::Params> params( |
| extensions::api::downloads::Resume::Params::Create(*args_)); |
| EXTENSION_FUNCTION_VALIDATE(params.get()); |
| - DownloadItem* download_item = GetActiveItem( |
| + DownloadItem* download_item = GetDownloadIfInProgress( |
| profile(), include_incognito(), params->download_id); |
| if (download_item == NULL) { |
| // This could be due to an invalid download ID, or it could be due to the |
| @@ -731,7 +739,7 @@ bool DownloadsCancelFunction::RunImpl() { |
| scoped_ptr<extensions::api::downloads::Resume::Params> params( |
| extensions::api::downloads::Resume::Params::Create(*args_)); |
| EXTENSION_FUNCTION_VALIDATE(params.get()); |
| - DownloadItem* download_item = GetActiveItem( |
| + DownloadItem* download_item = GetDownloadIfInProgress( |
| profile(), include_incognito(), params->download_id); |
| if (download_item != NULL) |
| download_item->Cancel(true); |
| @@ -802,10 +810,19 @@ bool DownloadsOpenFunction::RunImpl() { |
| scoped_ptr<extensions::api::downloads::Open::Params> params( |
| extensions::api::downloads::Open::Params::Create(*args_)); |
| EXTENSION_FUNCTION_VALIDATE(params.get()); |
| - error_ = download_extension_errors::kNotImplementedError; |
| - if (error_.empty()) |
| - RecordApiFunctions(DOWNLOADS_FUNCTION_OPEN); |
| - return error_.empty(); |
| + DownloadItem* download_item = GetDownload( |
| + profile(), include_incognito(), params->download_id); |
| + if (!download_item) { |
| + error_ = download_extension_errors::kInvalidOperationError; |
| + return false; |
| + } |
| + if (download_item->IsComplete()) { |
| + download_item->OpenDownload(); |
|
Randy Smith (Not in Mondays)
2012/12/05 19:12:05
You know that download_item->OpenDownload() curren
|
| + }else { |
| + download_item->SetOpenWhenComplete(true); |
| + } |
| + RecordApiFunctions(DOWNLOADS_FUNCTION_OPEN); |
| + return true; |
| } |
| DownloadsDragFunction::DownloadsDragFunction() {} |
| @@ -842,12 +859,8 @@ bool DownloadsGetFileIconFunction::RunImpl() { |
| int icon_size = kDefaultIconSize; |
| if (options && options->size.get()) |
| icon_size = *options->size.get(); |
| - DownloadManager* manager = NULL; |
| - DownloadManager* incognito_manager = NULL; |
| - GetManagers(profile(), include_incognito(), &manager, &incognito_manager); |
| - DownloadItem* download_item = manager->GetDownload(params->download_id); |
| - if (!download_item && incognito_manager) |
| - download_item = incognito_manager->GetDownload(params->download_id); |
| + DownloadItem* download_item = GetDownload( |
| + profile(), include_incognito(), params->download_id); |
| if (!download_item || download_item->GetTargetFilePath().empty()) { |
| error_ = download_extension_errors::kInvalidOperationError; |
| return false; |