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 33be97bde5a2c16ffb56d0943df35447826e05b1..d7157030503061b5c91f4bd3751a317613992dae 100644 |
--- a/chrome/browser/download/download_shelf_context_menu.cc |
+++ b/chrome/browser/download/download_shelf_context_menu.cc |
@@ -6,9 +6,11 @@ |
#include "chrome/browser/download/download_item_model.h" |
#include "chrome/browser/download/download_prefs.h" |
+#include "chrome/browser/ui/browser_list.h" |
#include "chrome/common/extensions/extension.h" |
#include "content/browser/download/download_item.h" |
#include "content/browser/download/download_manager.h" |
+#include "content/browser/tab_contents/page_navigator.h" |
#include "grit/generated_resources.h" |
#include "ui/base/l10n/l10n_util.h" |
@@ -21,8 +23,17 @@ DownloadShelfContextMenu::DownloadShelfContextMenu( |
} |
ui::SimpleMenuModel* DownloadShelfContextMenu::GetMenuModel() { |
- return download_item_->IsComplete() ? GetFinishedMenuModel() |
- : GetInProgressMenuModel(); |
+ ui::SimpleMenuModel* model; |
+ |
+ if (download_item_->GetSafetyState() == DownloadItem::DANGEROUS && |
+ (download_item_->GetDangerType() == DownloadStateInfo::DANGEROUS_URL || |
+ download_item_->GetDangerType() == DownloadStateInfo::DANGEROUS_CONTENT)) |
+ model = GetMaliciousMenuModel(); |
+ else if (download_item_->IsComplete()) |
+ model = GetFinishedMenuModel(); |
+ else |
+ model = GetInProgressMenuModel(); |
+ return model; |
} |
bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const { |
@@ -82,6 +93,26 @@ void DownloadShelfContextMenu::ExecuteCommand(int command_id) { |
if (download_item_->IsPartialDownload()) |
download_item_->TogglePause(); |
break; |
+ case DISCARD: |
+ if (download_item_->IsPartialDownload()) |
+ download_item_->Cancel(true); |
noelutz
2011/12/01 00:48:27
Is that the same as calling CancelTask()?
asanka
2011/12/01 18:45:08
download_model_->CancelTask() does different thing
|
+ download_item_->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); |
+ // We have been deleted! |
+ break; |
+ case KEEP: |
+ download_item_->DangerousDownloadValidated(); |
+ break; |
+ case LEARN_MORE: { |
+ Browser* browser = BrowserList::GetLastActive(); |
+ if (!browser) |
noelutz
2011/12/01 00:48:27
is that a failure case? should we dcheck here?
asanka
2011/12/01 18:45:08
It shouldn't happen. Aside from not being NULL, we
|
+ break; |
+ GURL learn_more_url( |
+ l10n_util::GetStringUTF8(IDS_DOWNLOAD_SAFE_BROWSING_LEARN_MORE_URL)); |
+ OpenURLParams params(learn_more_url, GURL(), NEW_FOREGROUND_TAB, |
+ content::PAGE_TRANSITION_TYPED, false); |
+ browser->OpenURL(params); |
+ break; |
+ } |
default: |
NOTREACHED(); |
} |
@@ -113,6 +144,12 @@ string16 DownloadShelfContextMenu::GetLabelForCommandId(int command_id) const { |
return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM); |
return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM); |
} |
+ case DISCARD: |
+ return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_DISCARD); |
+ case KEEP: |
+ return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_KEEP); |
+ case LEARN_MORE: |
+ return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_LEARN_MORE); |
default: |
NOTREACHED(); |
break; |
@@ -161,3 +198,20 @@ ui::SimpleMenuModel* DownloadShelfContextMenu::GetFinishedMenuModel() { |
return finished_download_menu_model_.get(); |
} |
+ |
+ui::SimpleMenuModel* DownloadShelfContextMenu::GetMaliciousMenuModel() { |
+ if (malicious_download_menu_model_.get()) |
+ return malicious_download_menu_model_.get(); |
+ |
+ malicious_download_menu_model_.reset(new ui::SimpleMenuModel(this)); |
+ |
+ malicious_download_menu_model_->AddItemWithStringId( |
+ DISCARD, IDS_DOWNLOAD_MENU_DISCARD); |
+ malicious_download_menu_model_->AddItemWithStringId( |
+ KEEP, IDS_DOWNLOAD_MENU_KEEP); |
+ malicious_download_menu_model_->AddSeparator(); |
+ malicious_download_menu_model_->AddItemWithStringId( |
+ LEARN_MORE, IDS_DOWNLOAD_MENU_LEARN_MORE); |
+ |
+ return malicious_download_menu_model_.get(); |
+} |