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

Side by Side Diff: chrome/browser/download/download_shelf_context_menu.cc

Issue 8757007: Implement additional UI changes for dangerous download warnings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add DCHECKs Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/download/download_shelf_context_menu.h" 5 #include "chrome/browser/download/download_shelf_context_menu.h"
6 6
7 #include "chrome/browser/download/download_item_model.h" 7 #include "chrome/browser/download/download_item_model.h"
8 #include "chrome/browser/download/download_prefs.h" 8 #include "chrome/browser/download/download_prefs.h"
9 #include "chrome/browser/ui/browser_list.h"
9 #include "chrome/common/extensions/extension.h" 10 #include "chrome/common/extensions/extension.h"
10 #include "content/browser/download/download_item.h" 11 #include "content/browser/download/download_item.h"
11 #include "content/browser/download/download_manager.h" 12 #include "content/browser/download/download_manager.h"
13 #include "content/browser/tab_contents/page_navigator.h"
12 #include "grit/generated_resources.h" 14 #include "grit/generated_resources.h"
13 #include "ui/base/l10n/l10n_util.h" 15 #include "ui/base/l10n/l10n_util.h"
14 16
15 DownloadShelfContextMenu::~DownloadShelfContextMenu() {} 17 DownloadShelfContextMenu::~DownloadShelfContextMenu() {}
16 18
17 DownloadShelfContextMenu::DownloadShelfContextMenu( 19 DownloadShelfContextMenu::DownloadShelfContextMenu(
18 BaseDownloadItemModel* download_model) 20 BaseDownloadItemModel* download_model)
19 : download_model_(download_model), 21 : download_model_(download_model),
20 download_item_(download_model->download()) { 22 download_item_(download_model->download()) {
21 } 23 }
22 24
23 ui::SimpleMenuModel* DownloadShelfContextMenu::GetMenuModel() { 25 ui::SimpleMenuModel* DownloadShelfContextMenu::GetMenuModel() {
24 return download_item_->IsComplete() ? GetFinishedMenuModel() 26 ui::SimpleMenuModel* model;
25 : GetInProgressMenuModel(); 27
28 if (download_item_->GetSafetyState() == DownloadItem::DANGEROUS &&
dmazzoni 2011/12/01 19:49:22 What does it mean if GetSafetyState() == DANGEROUS
asanka 2011/12/02 00:05:04 Done. Went with your 'if' suggestion.
29 (download_item_->GetDangerType() == DownloadStateInfo::DANGEROUS_URL ||
30 download_item_->GetDangerType() == DownloadStateInfo::DANGEROUS_CONTENT))
31 model = GetMaliciousMenuModel();
32 else if (download_item_->IsComplete())
33 model = GetFinishedMenuModel();
34 else
35 model = GetInProgressMenuModel();
36 return model;
26 } 37 }
27 38
28 bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const { 39 bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const {
29 switch (command_id) { 40 switch (command_id) {
30 case SHOW_IN_FOLDER: 41 case SHOW_IN_FOLDER:
31 case OPEN_WHEN_COMPLETE: 42 case OPEN_WHEN_COMPLETE:
32 return download_item_->CanShowInFolder(); 43 return download_item_->CanShowInFolder();
33 case ALWAYS_OPEN_TYPE: 44 case ALWAYS_OPEN_TYPE:
34 return download_item_->CanOpenDownload() && 45 return download_item_->CanOpenDownload() &&
35 !Extension::IsExtension(download_item_->GetStateInfo().target_name); 46 !Extension::IsExtension(download_item_->GetStateInfo().target_name);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 case CANCEL: 86 case CANCEL:
76 download_model_->CancelTask(); 87 download_model_->CancelTask();
77 break; 88 break;
78 case TOGGLE_PAUSE: 89 case TOGGLE_PAUSE:
79 // It is possible for the download to complete before the user clicks the 90 // It is possible for the download to complete before the user clicks the
80 // menu item, recheck if the download is in progress state before toggling 91 // menu item, recheck if the download is in progress state before toggling
81 // pause. 92 // pause.
82 if (download_item_->IsPartialDownload()) 93 if (download_item_->IsPartialDownload())
83 download_item_->TogglePause(); 94 download_item_->TogglePause();
84 break; 95 break;
96 case DISCARD:
97 if (download_item_->IsPartialDownload())
98 download_item_->Cancel(true);
dmazzoni 2011/12/01 19:49:22 Does Cancel take effect immediately, does it close
asanka 2011/12/02 00:05:04 Calling Delete() results in a task posted to the F
99 download_item_->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD);
Randy Smith (Not in Mondays) 2011/12/01 19:50:46 Remove (which Delete() calls) does a Cancel unilat
asanka 2011/12/02 00:05:04 Done.
100 // We have been deleted!
dmazzoni 2011/12/01 19:49:22 Get rid of this comment
Randy Smith (Not in Mondays) 2011/12/01 19:50:46 Have you looked over the callers to this routine,
asanka 2011/12/02 00:05:04 Done.
asanka 2011/12/02 00:05:04 Done. In general, any time we run a message loop w
101 break;
102 case KEEP:
103 download_item_->DangerousDownloadValidated();
104 break;
105 case LEARN_MORE: {
106 Browser* browser = BrowserList::GetLastActive();
107 DCHECK(browser && browser->is_type_tabbed());
108 GURL learn_more_url(
109 l10n_util::GetStringUTF8(IDS_DOWNLOAD_SAFE_BROWSING_LEARN_MORE_URL));
110 OpenURLParams params(learn_more_url, GURL(), NEW_FOREGROUND_TAB,
111 content::PAGE_TRANSITION_TYPED, false);
112 browser->OpenURL(params);
113 break;
114 }
85 default: 115 default:
86 NOTREACHED(); 116 NOTREACHED();
87 } 117 }
88 } 118 }
89 119
90 bool DownloadShelfContextMenu::GetAcceleratorForCommandId( 120 bool DownloadShelfContextMenu::GetAcceleratorForCommandId(
91 int command_id, ui::Accelerator* accelerator) { 121 int command_id, ui::Accelerator* accelerator) {
92 return false; 122 return false;
93 } 123 }
94 124
(...skipping 11 matching lines...) Expand all
106 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN); 136 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN);
107 case ALWAYS_OPEN_TYPE: 137 case ALWAYS_OPEN_TYPE:
108 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); 138 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE);
109 case CANCEL: 139 case CANCEL:
110 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_CANCEL); 140 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_CANCEL);
111 case TOGGLE_PAUSE: { 141 case TOGGLE_PAUSE: {
112 if (download_item_->IsPaused()) 142 if (download_item_->IsPaused())
113 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM); 143 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM);
114 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM); 144 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM);
115 } 145 }
146 case DISCARD:
147 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_DISCARD);
148 case KEEP:
149 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_KEEP);
150 case LEARN_MORE:
151 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_LEARN_MORE);
116 default: 152 default:
117 NOTREACHED(); 153 NOTREACHED();
118 break; 154 break;
119 } 155 }
120 return string16(); 156 return string16();
121 } 157 }
122 158
123 ui::SimpleMenuModel* DownloadShelfContextMenu::GetInProgressMenuModel() { 159 ui::SimpleMenuModel* DownloadShelfContextMenu::GetInProgressMenuModel() {
124 if (in_progress_download_menu_model_.get()) 160 if (in_progress_download_menu_model_.get())
125 return in_progress_download_menu_model_.get(); 161 return in_progress_download_menu_model_.get();
(...skipping 28 matching lines...) Expand all
154 ALWAYS_OPEN_TYPE, IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); 190 ALWAYS_OPEN_TYPE, IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE);
155 finished_download_menu_model_->AddSeparator(); 191 finished_download_menu_model_->AddSeparator();
156 finished_download_menu_model_->AddItemWithStringId( 192 finished_download_menu_model_->AddItemWithStringId(
157 SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW); 193 SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW);
158 finished_download_menu_model_->AddSeparator(); 194 finished_download_menu_model_->AddSeparator();
159 finished_download_menu_model_->AddItemWithStringId( 195 finished_download_menu_model_->AddItemWithStringId(
160 CANCEL, IDS_DOWNLOAD_MENU_CANCEL); 196 CANCEL, IDS_DOWNLOAD_MENU_CANCEL);
161 197
162 return finished_download_menu_model_.get(); 198 return finished_download_menu_model_.get();
163 } 199 }
200
201 ui::SimpleMenuModel* DownloadShelfContextMenu::GetMaliciousMenuModel() {
202 if (malicious_download_menu_model_.get())
203 return malicious_download_menu_model_.get();
204
205 malicious_download_menu_model_.reset(new ui::SimpleMenuModel(this));
206
207 malicious_download_menu_model_->AddItemWithStringId(
208 DISCARD, IDS_DOWNLOAD_MENU_DISCARD);
209 malicious_download_menu_model_->AddItemWithStringId(
210 KEEP, IDS_DOWNLOAD_MENU_KEEP);
211 malicious_download_menu_model_->AddSeparator();
212 malicious_download_menu_model_->AddItemWithStringId(
213 LEARN_MORE, IDS_DOWNLOAD_MENU_LEARN_MORE);
214
215 return malicious_download_menu_model_.get();
216 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698