summaryrefslogtreecommitdiffstats
path: root/chrome/browser/download/download_shelf.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/download/download_shelf.cc')
-rw-r--r--chrome/browser/download/download_shelf.cc102
1 files changed, 102 insertions, 0 deletions
diff --git a/chrome/browser/download/download_shelf.cc b/chrome/browser/download/download_shelf.cc
index 826dc4e..3feca71 100644
--- a/chrome/browser/download/download_shelf.cc
+++ b/chrome/browser/download/download_shelf.cc
@@ -4,15 +4,23 @@
#include "chrome/browser/download/download_shelf.h"
+#include "base/file_util.h"
#include "chrome/browser/dom_ui/downloads_ui.h"
+#include "chrome/browser/download/download_item_model.h"
+#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/metrics/user_metrics.h"
+#include "chrome/common/l10n_util.h"
+#include "grit/generated_resources.h"
#if defined(OS_WIN)
+#include "chrome/browser/download/download_util.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#elif defined(OS_POSIX)
#include "chrome/common/temp_scaffolding_stubs.h"
#endif
+// DownloadShelf ---------------------------------------------------------------
+
void DownloadShelf::ShowAllDownloads() {
#if defined(OS_WIN)
Profile* profile = tab_contents_->profile();
@@ -32,3 +40,97 @@ void DownloadShelf::ChangeTabContents(TabContents* old_contents,
DCHECK(old_contents == tab_contents_);
tab_contents_ = new_contents;
}
+
+// DownloadShelfContextMenu ----------------------------------------------------
+
+DownloadShelfContextMenu::DownloadShelfContextMenu(
+ BaseDownloadItemModel* download_model)
+ : download_(download_model->download()),
+ model_(download_model) {
+}
+
+DownloadShelfContextMenu::~DownloadShelfContextMenu() {
+}
+
+bool DownloadShelfContextMenu::ItemIsChecked(int id) const {
+ switch (id) {
+ case OPEN_WHEN_COMPLETE:
+ return download_->open_when_complete();
+ case ALWAYS_OPEN_TYPE: {
+ const FilePath::StringType extension =
+ file_util::GetFileExtensionFromPath(download_->full_path());
+ return download_->manager()->ShouldOpenFileExtension(extension);
+ }
+ }
+ return false;
+}
+
+bool DownloadShelfContextMenu::ItemIsDefault(int id) const {
+ return id == OPEN_WHEN_COMPLETE;
+}
+
+std::wstring DownloadShelfContextMenu::GetItemLabel(int id) const {
+ switch (id) {
+ case SHOW_IN_FOLDER:
+ return l10n_util::GetString(IDS_DOWNLOAD_LINK_SHOW);
+ case OPEN_WHEN_COMPLETE:
+ if (download_->state() == DownloadItem::IN_PROGRESS)
+ return l10n_util::GetString(IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE);
+ return l10n_util::GetString(IDS_DOWNLOAD_MENU_OPEN);
+ case ALWAYS_OPEN_TYPE:
+ return l10n_util::GetString(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE);
+ case CANCEL:
+ return l10n_util::GetString(IDS_DOWNLOAD_MENU_CANCEL);
+ default:
+ NOTREACHED();
+ }
+ return std::wstring();
+}
+
+bool DownloadShelfContextMenu::IsItemCommandEnabled(int id) const {
+ switch (id) {
+ case SHOW_IN_FOLDER:
+ case OPEN_WHEN_COMPLETE:
+ return download_->state() != DownloadItem::CANCELLED;
+ case ALWAYS_OPEN_TYPE:
+#if defined(OS_WIN)
+ return download_util::CanOpenDownload(download_);
+#else
+ // TODO(port): port download_util
+ NOTIMPLEMENTED();
+ return true;
+#endif
+ case CANCEL:
+ return download_->state() == DownloadItem::IN_PROGRESS;
+ default:
+ return id > 0 && id < MENU_LAST;
+ }
+}
+
+void DownloadShelfContextMenu::ExecuteItemCommand(int id) {
+ switch (id) {
+ case SHOW_IN_FOLDER:
+ download_->manager()->ShowDownloadInShell(download_);
+ break;
+ case OPEN_WHEN_COMPLETE:
+#if defined(OS_WIN)
+ download_util::OpenDownload(download_);
+#else
+ // TODO(port): port download_util
+ NOTIMPLEMENTED();
+#endif
+ break;
+ case ALWAYS_OPEN_TYPE: {
+ const FilePath::StringType extension =
+ file_util::GetFileExtensionFromPath(download_->full_path());
+ download_->manager()->OpenFilesOfExtension(
+ extension, !ItemIsChecked(ALWAYS_OPEN_TYPE));
+ break;
+ }
+ case CANCEL:
+ model_->CancelTask();
+ break;
+ default:
+ NOTREACHED();
+ }
+}