Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5743)

Unified Diff: chrome/browser/extensions/api/downloads/downloads_api.cc

Issue 10836003: chrome.downloads.open() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: @r171777 Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698