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

Unified Diff: chrome/browser/download/download_shelf_context_menu.cc

Issue 852043002: Initial Implementation of Download Notification (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 5 years, 10 months 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/download/download_shelf_context_menu.cc
diff --git a/chrome/browser/download/download_shelf_context_menu.cc b/chrome/browser/download/download_shelf_context_menu.cc
index 0c87b3d88cb56d55f3587fbaddde801f243adeff..991fa5232bab9fcf327b69c1156c481cbb4bbba6 100644
--- a/chrome/browser/download/download_shelf_context_menu.cc
+++ b/chrome/browser/download/download_shelf_context_menu.cc
@@ -5,26 +5,11 @@
#include "chrome/browser/download/download_shelf_context_menu.h"
#include "base/command_line.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/download/download_crx_util.h"
#include "chrome/browser/download/download_item_model.h"
-#include "chrome/browser/download/download_prefs.h"
-#include "chrome/browser/download/download_target_determiner.h"
-#include "chrome/browser/safe_browsing/download_protection_service.h"
-#include "chrome/browser/safe_browsing/safe_browsing_service.h"
-#include "chrome/common/url_constants.h"
-#include "chrome/grit/generated_resources.h"
-#include "content/public/browser/download_item.h"
-#include "content/public/browser/download_manager.h"
-#include "content/public/browser/page_navigator.h"
#include "content/public/common/content_switches.h"
#include "extensions/common/extension.h"
#include "ui/base/l10n/l10n_util.h"
-#if defined(OS_WIN)
-#include "chrome/browser/ui/pdf/adobe_reader_info_win.h"
-#endif
-
using content::DownloadItem;
namespace {
@@ -45,17 +30,10 @@ DownloadShelfContextMenu::DownloadShelfContextMenu(
DownloadItem* download_item,
content::PageNavigator* navigator)
: download_item_(download_item),
+ download_commands_(download_item),
navigator_(navigator) {
DCHECK(download_item_);
download_item_->AddObserver(this);
-
-#if defined(OS_WIN)
- is_adobe_pdf_reader_up_to_date_ = false;
- if (IsDownloadPdf() && IsAdobeReaderDefaultPDFViewer()) {
- is_adobe_pdf_reader_up_to_date_ =
- DownloadTargetDeterminer::IsAdobeReaderUpToDate();
- }
-#endif // defined(OS_WIN)
}
ui::SimpleMenuModel* DownloadShelfContextMenu::GetMenuModel() {
@@ -83,146 +61,23 @@ ui::SimpleMenuModel* DownloadShelfContextMenu::GetMenuModel() {
}
bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const {
- if (!download_item_)
- return false;
-
- switch (static_cast<ContextMenuCommands>(command_id)) {
- case SHOW_IN_FOLDER:
- return download_item_->CanShowInFolder();
- case OPEN_WHEN_COMPLETE:
- case PLATFORM_OPEN:
- return download_item_->CanOpenDownload() &&
- !download_crx_util::IsExtensionDownload(*download_item_);
- case ALWAYS_OPEN_TYPE:
- // For temporary downloads, the target filename might be a temporary
- // filename. Don't base an "Always open" decision based on it. Also
- // exclude extensions.
- return download_item_->CanOpenDownload() &&
- !download_crx_util::IsExtensionDownload(*download_item_);
- case CANCEL:
- return !download_item_->IsDone();
- case TOGGLE_PAUSE:
- return !download_item_->IsDone();
- case DISCARD:
- case KEEP:
- case LEARN_MORE_SCANNING:
- case LEARN_MORE_INTERRUPTED:
- return true;
- }
- NOTREACHED();
- return false;
+ return download_commands_.IsCommandEnabled(
+ static_cast<DownloadCommands::Command>(command_id));
}
bool DownloadShelfContextMenu::IsCommandIdChecked(int command_id) const {
- if (!download_item_)
- return false;
-
- switch (command_id) {
- case OPEN_WHEN_COMPLETE:
- return download_item_->GetOpenWhenComplete() ||
- download_crx_util::IsExtensionDownload(*download_item_);
- case ALWAYS_OPEN_TYPE:
-#if defined(OS_WIN) || defined(OS_LINUX) || \
- (defined(OS_MACOSX) && !defined(OS_IOS))
- if (CanOpenPdfInSystemViewer()) {
- DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(
- download_item_->GetBrowserContext());
- return prefs->ShouldOpenPdfInSystemReader();
- }
-#endif
- return download_item_->ShouldOpenFileBasedOnExtension();
- case TOGGLE_PAUSE:
- return download_item_->IsPaused();
- }
- return false;
+ return download_commands_.IsCommandChecked(
+ static_cast<DownloadCommands::Command>(command_id));
}
bool DownloadShelfContextMenu::IsCommandIdVisible(int command_id) const {
- if (!download_item_)
- return false;
-
- if (command_id == PLATFORM_OPEN)
- return (DownloadItemModel(download_item_).ShouldPreferOpeningInBrowser());
-
- return true;
+ return download_commands_.IsCommandVisible(
+ static_cast<DownloadCommands::Command>(command_id));
}
void DownloadShelfContextMenu::ExecuteCommand(int command_id, int event_flags) {
- if (!download_item_)
- return;
-
- switch (static_cast<ContextMenuCommands>(command_id)) {
- case SHOW_IN_FOLDER:
- download_item_->ShowDownloadInShell();
- break;
- case OPEN_WHEN_COMPLETE:
- download_item_->OpenDownload();
- break;
- case ALWAYS_OPEN_TYPE: {
- bool is_checked = IsCommandIdChecked(ALWAYS_OPEN_TYPE);
- DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(
- download_item_->GetBrowserContext());
-#if defined(OS_WIN) || defined(OS_LINUX) || \
- (defined(OS_MACOSX) && !defined(OS_IOS))
- if (CanOpenPdfInSystemViewer()) {
- prefs->SetShouldOpenPdfInSystemReader(!is_checked);
- DownloadItemModel(download_item_).SetShouldPreferOpeningInBrowser(
- is_checked);
- break;
- }
-#endif
- base::FilePath path = download_item_->GetTargetFilePath();
- if (is_checked)
- prefs->DisableAutoOpenBasedOnExtension(path);
- else
- prefs->EnableAutoOpenBasedOnExtension(path);
- break;
- }
- case PLATFORM_OPEN:
- DownloadItemModel(download_item_).OpenUsingPlatformHandler();
- break;
- case CANCEL:
- download_item_->Cancel(true /* Cancelled by user */);
- break;
- case TOGGLE_PAUSE:
- if (download_item_->GetState() == DownloadItem::IN_PROGRESS &&
- !download_item_->IsPaused()) {
- download_item_->Pause();
- } else {
- download_item_->Resume();
- }
- break;
- case DISCARD:
- download_item_->Remove();
- break;
- case KEEP:
- download_item_->ValidateDangerousDownload();
- break;
- case LEARN_MORE_SCANNING: {
-#if defined(FULL_SAFE_BROWSING)
- using safe_browsing::DownloadProtectionService;
- SafeBrowsingService* sb_service =
- g_browser_process->safe_browsing_service();
- DownloadProtectionService* protection_service =
- (sb_service ? sb_service->download_protection_service() : NULL);
- if (protection_service) {
- protection_service->ShowDetailsForDownload(*download_item_, navigator_);
- }
-#else
- // Should only be getting invoked if we are using safe browsing.
- NOTREACHED();
-#endif
- break;
- }
- case LEARN_MORE_INTERRUPTED:
- navigator_->OpenURL(
- content::OpenURLParams(GURL(chrome::kDownloadInterruptedLearnMoreURL),
- content::Referrer(),
- NEW_FOREGROUND_TAB,
- ui::PAGE_TRANSITION_LINK,
- false));
- break;
- }
+ download_commands_.ExecuteCommand(
+ static_cast<DownloadCommands::Command>(command_id), navigator_);
}
bool DownloadShelfContextMenu::GetAcceleratorForCommandId(
@@ -231,42 +86,18 @@ bool DownloadShelfContextMenu::GetAcceleratorForCommandId(
}
bool DownloadShelfContextMenu::IsItemForCommandIdDynamic(int command_id) const {
- return command_id == TOGGLE_PAUSE;
+ return false;
asanka 2015/02/13 21:17:06 Why this change?
yoshiki 2015/02/19 15:07:02 Because we split TOGGLE_PAUSE into PAUSE and RESUM
}
base::string16 DownloadShelfContextMenu::GetLabelForCommandId(
int command_id) const {
- switch (static_cast<ContextMenuCommands>(command_id)) {
- case SHOW_IN_FOLDER:
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_SHOW);
- case OPEN_WHEN_COMPLETE:
- if (download_item_ && !download_item_->IsDone())
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE);
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN);
- case ALWAYS_OPEN_TYPE:
- return l10n_util::GetStringUTF16(GetAlwaysOpenStringId());
- case PLATFORM_OPEN:
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PLATFORM_OPEN);
- case CANCEL:
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_CANCEL);
- case TOGGLE_PAUSE:
- if (download_item_ &&
- download_item_->GetState() == DownloadItem::IN_PROGRESS &&
- !download_item_->IsPaused())
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM);
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM);
- case DISCARD:
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_DISCARD);
- case KEEP:
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_KEEP);
- case LEARN_MORE_SCANNING:
- return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING);
- case LEARN_MORE_INTERRUPTED:
- return l10n_util::GetStringUTF16(
- IDS_DOWNLOAD_MENU_LEARN_MORE_INTERRUPTED);
- }
- NOTREACHED();
- return base::string16();
+ return GetStringForCommand(
+ static_cast<DownloadCommands::Command>(command_id));
+}
+
+base::string16 DownloadShelfContextMenu::GetStringForCommand(
asanka 2015/02/13 21:17:05 Is there a need for GetStringForCommand() and a Ge
yoshiki 2015/02/19 15:07:01 Sorry, I misunderstood. I thought DownloadCommand
+ DownloadCommands::Command command) const {
+ return download_commands_.GetCommandStringForMenu(command);
}
void DownloadShelfContextMenu::DetachFromDownloadItem() {
@@ -288,18 +119,21 @@ ui::SimpleMenuModel* DownloadShelfContextMenu::GetInProgressMenuModel() {
in_progress_download_menu_model_.reset(new ui::SimpleMenuModel(this));
- in_progress_download_menu_model_->AddCheckItemWithStringId(
- OPEN_WHEN_COMPLETE, IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE);
- in_progress_download_menu_model_->AddCheckItemWithStringId(
- ALWAYS_OPEN_TYPE, GetAlwaysOpenStringId());
+ in_progress_download_menu_model_->AddCheckItem(
+ DownloadCommands::OPEN_WHEN_COMPLETE,
+ GetStringForCommand(DownloadCommands::OPEN_WHEN_COMPLETE));
+ in_progress_download_menu_model_->AddCheckItem(
+ DownloadCommands::ALWAYS_OPEN_TYPE,
+ GetStringForCommand(DownloadCommands::ALWAYS_OPEN_TYPE));
in_progress_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
- in_progress_download_menu_model_->AddItemWithStringId(
- TOGGLE_PAUSE, IDS_DOWNLOAD_MENU_PAUSE_ITEM);
- in_progress_download_menu_model_->AddItemWithStringId(
- SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW);
+ in_progress_download_menu_model_->AddItem(
+ DownloadCommands::PAUSE, GetStringForCommand(DownloadCommands::PAUSE));
+ in_progress_download_menu_model_->AddItem(
+ DownloadCommands::SHOW_IN_FOLDER,
+ GetStringForCommand(DownloadCommands::SHOW_IN_FOLDER));
in_progress_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
- in_progress_download_menu_model_->AddItemWithStringId(
- CANCEL, IDS_DOWNLOAD_MENU_CANCEL);
+ in_progress_download_menu_model_->AddItem(
+ DownloadCommands::CANCEL, GetStringForCommand(DownloadCommands::CANCEL));
return in_progress_download_menu_model_.get();
}
@@ -310,18 +144,22 @@ ui::SimpleMenuModel* DownloadShelfContextMenu::GetFinishedMenuModel() {
finished_download_menu_model_.reset(new ui::SimpleMenuModel(this));
- finished_download_menu_model_->AddItemWithStringId(
- OPEN_WHEN_COMPLETE, IDS_DOWNLOAD_MENU_OPEN);
- finished_download_menu_model_->AddCheckItemWithStringId(
- ALWAYS_OPEN_TYPE, GetAlwaysOpenStringId());
- finished_download_menu_model_->AddItemWithStringId(
- PLATFORM_OPEN, IDS_DOWNLOAD_MENU_PLATFORM_OPEN);
+ finished_download_menu_model_->AddItem(
+ DownloadCommands::OPEN_WHEN_COMPLETE,
+ GetStringForCommand(DownloadCommands::OPEN_WHEN_COMPLETE));
+ finished_download_menu_model_->AddCheckItem(
+ DownloadCommands::ALWAYS_OPEN_TYPE,
+ GetStringForCommand(DownloadCommands::ALWAYS_OPEN_TYPE));
+ finished_download_menu_model_->AddItem(
+ DownloadCommands::PLATFORM_OPEN,
+ GetStringForCommand(DownloadCommands::PLATFORM_OPEN));
finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
- finished_download_menu_model_->AddItemWithStringId(
- SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW);
+ finished_download_menu_model_->AddItem(
+ DownloadCommands::SHOW_IN_FOLDER,
+ GetStringForCommand(DownloadCommands::SHOW_IN_FOLDER));
finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
- finished_download_menu_model_->AddItemWithStringId(
- CANCEL, IDS_DOWNLOAD_MENU_CANCEL);
+ finished_download_menu_model_->AddItem(
+ DownloadCommands::CANCEL, GetStringForCommand(DownloadCommands::CANCEL));
return finished_download_menu_model_.get();
}
@@ -340,20 +178,23 @@ ui::SimpleMenuModel* DownloadShelfContextMenu::GetInterruptedMenuModel() {
interrupted_download_menu_model_.reset(new ui::SimpleMenuModel(this));
if (IsDownloadResumptionEnabled()) {
- interrupted_download_menu_model_->AddItemWithStringId(
- TOGGLE_PAUSE, IDS_DOWNLOAD_MENU_RESUME_ITEM);
+ interrupted_download_menu_model_->AddItem(
+ DownloadCommands::RESUME,
+ GetStringForCommand(DownloadCommands::RESUME));
}
#if defined(OS_WIN)
// The Help Center article is currently Windows specific.
// TODO(asanka): Enable this for other platforms when the article is expanded
// for other platforms.
- interrupted_download_menu_model_->AddItemWithStringId(
- LEARN_MORE_INTERRUPTED, IDS_DOWNLOAD_MENU_LEARN_MORE_INTERRUPTED);
+ interrupted_download_menu_model_->AddItem(
+ DownloadCommands::LEARN_MORE_INTERRUPTED,
+ GetStringForCommand(DownloadCommands::LEARN_MORE_INTERRUPTED));
#endif
if (IsDownloadResumptionEnabled()) {
interrupted_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
- interrupted_download_menu_model_->AddItemWithStringId(
- CANCEL, IDS_DOWNLOAD_MENU_CANCEL);
+ interrupted_download_menu_model_->AddItem(
+ DownloadCommands::CANCEL,
+ GetStringForCommand(DownloadCommands::CANCEL));
}
return interrupted_download_menu_model_.get();
@@ -365,11 +206,13 @@ ui::SimpleMenuModel* DownloadShelfContextMenu::GetMaybeMaliciousMenuModel() {
maybe_malicious_download_menu_model_.reset(new ui::SimpleMenuModel(this));
- maybe_malicious_download_menu_model_->AddItemWithStringId(
- KEEP, IDS_DOWNLOAD_MENU_KEEP);
+ maybe_malicious_download_menu_model_->AddItem(
+ DownloadCommands::KEEP,
+ GetStringForCommand(DownloadCommands::KEEP));
maybe_malicious_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
- maybe_malicious_download_menu_model_->AddItemWithStringId(
- LEARN_MORE_SCANNING, IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING);
+ maybe_malicious_download_menu_model_->AddItem(
+ DownloadCommands::LEARN_MORE_SCANNING,
+ GetStringForCommand(DownloadCommands::LEARN_MORE_SCANNING));
return maybe_malicious_download_menu_model_.get();
}
@@ -380,38 +223,9 @@ ui::SimpleMenuModel* DownloadShelfContextMenu::GetMaliciousMenuModel() {
malicious_download_menu_model_.reset(new ui::SimpleMenuModel(this));
DownloadItemModel download_model(download_item_);
- malicious_download_menu_model_->AddItemWithStringId(
- LEARN_MORE_SCANNING, IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING);
+ malicious_download_menu_model_->AddItem(
+ DownloadCommands::LEARN_MORE_SCANNING,
+ GetStringForCommand(DownloadCommands::LEARN_MORE_SCANNING));
return malicious_download_menu_model_.get();
}
-
-int DownloadShelfContextMenu::GetAlwaysOpenStringId() const {
-#if defined(OS_WIN)
- if (CanOpenPdfInSystemViewer())
- return IsAdobeReaderDefaultPDFViewer()
- ? IDS_DOWNLOAD_MENU_ALWAYS_OPEN_PDF_IN_READER
- : IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
-#elif defined(OS_MACOSX) || defined(OS_LINUX)
- if (CanOpenPdfInSystemViewer())
- return IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
-#endif
- return IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE;
-}
-
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
-bool DownloadShelfContextMenu::IsDownloadPdf() const {
- base::FilePath path = download_item_->GetTargetFilePath();
- return path.MatchesExtension(FILE_PATH_LITERAL(".pdf"));
-}
-#endif
-
-bool DownloadShelfContextMenu::CanOpenPdfInSystemViewer() const {
-#if defined(OS_WIN)
- return IsDownloadPdf() &&
- (IsAdobeReaderDefaultPDFViewer() ? is_adobe_pdf_reader_up_to_date_ :
- true);
-#elif defined(OS_MACOSX) || defined(OS_LINUX)
- return IsDownloadPdf();
-#endif
-}

Powered by Google App Engine
This is Rietveld 408576698