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 164ce7134d7d1d67dddff6d3c711e5a304cccad6..10058314bd2185e00b8f7704ac3e6174ccde33db 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; |
} |
@@ -689,7 +697,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 |
@@ -711,7 +719,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 |
@@ -733,7 +741,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); |
@@ -804,10 +812,15 @@ 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 || !download_item->IsComplete()) { |
+ error_ = download_extension_errors::kInvalidOperationError; |
+ return false; |
+ } |
+ download_item->OpenDownload(); |
+ RecordApiFunctions(DOWNLOADS_FUNCTION_OPEN); |
+ return true; |
} |
DownloadsDragFunction::DownloadsDragFunction() {} |
@@ -844,12 +857,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; |