OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
9 #include "chrome/browser/download/download_crx_util.h" | 9 #include "chrome/browser/download/download_crx_util.h" |
10 #include "chrome/browser/download/download_item_model.h" | 10 #include "chrome/browser/download/download_item_model.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 } | 71 } |
72 | 72 |
73 bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const { | 73 bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const { |
74 if (!download_item_) | 74 if (!download_item_) |
75 return false; | 75 return false; |
76 | 76 |
77 switch (static_cast<ContextMenuCommands>(command_id)) { | 77 switch (static_cast<ContextMenuCommands>(command_id)) { |
78 case SHOW_IN_FOLDER: | 78 case SHOW_IN_FOLDER: |
79 return download_item_->CanShowInFolder(); | 79 return download_item_->CanShowInFolder(); |
80 case OPEN_WHEN_COMPLETE: | 80 case OPEN_WHEN_COMPLETE: |
| 81 case PLATFORM_OPEN: |
81 return download_item_->CanOpenDownload() && | 82 return download_item_->CanOpenDownload() && |
82 !download_crx_util::IsExtensionDownload(*download_item_); | 83 !download_crx_util::IsExtensionDownload(*download_item_); |
83 case ALWAYS_OPEN_TYPE: | 84 case ALWAYS_OPEN_TYPE: |
84 // For temporary downloads, the target filename might be a temporary | 85 // For temporary downloads, the target filename might be a temporary |
85 // filename. Don't base an "Always open" decision based on it. Also | 86 // filename. Don't base an "Always open" decision based on it. Also |
86 // exclude extensions. | 87 // exclude extensions. |
87 return download_item_->CanOpenDownload() && | 88 return download_item_->CanOpenDownload() && |
88 !download_crx_util::IsExtensionDownload(*download_item_); | 89 !download_crx_util::IsExtensionDownload(*download_item_); |
89 case CANCEL: | 90 case CANCEL: |
90 return !download_item_->IsDone(); | 91 return !download_item_->IsDone(); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 case ALWAYS_OPEN_TYPE: { | 130 case ALWAYS_OPEN_TYPE: { |
130 DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext( | 131 DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext( |
131 download_item_->GetBrowserContext()); | 132 download_item_->GetBrowserContext()); |
132 base::FilePath path = download_item_->GetTargetFilePath(); | 133 base::FilePath path = download_item_->GetTargetFilePath(); |
133 if (!IsCommandIdChecked(ALWAYS_OPEN_TYPE)) | 134 if (!IsCommandIdChecked(ALWAYS_OPEN_TYPE)) |
134 prefs->EnableAutoOpenBasedOnExtension(path); | 135 prefs->EnableAutoOpenBasedOnExtension(path); |
135 else | 136 else |
136 prefs->DisableAutoOpenBasedOnExtension(path); | 137 prefs->DisableAutoOpenBasedOnExtension(path); |
137 break; | 138 break; |
138 } | 139 } |
| 140 case PLATFORM_OPEN: |
| 141 DownloadItemModel(download_item_).OpenUsingPlatformHandler(); |
| 142 break; |
139 case CANCEL: | 143 case CANCEL: |
140 download_item_->Cancel(true /* Cancelled by user */); | 144 download_item_->Cancel(true /* Cancelled by user */); |
141 break; | 145 break; |
142 case TOGGLE_PAUSE: | 146 case TOGGLE_PAUSE: |
143 if (download_item_->GetState() == DownloadItem::IN_PROGRESS && | 147 if (download_item_->GetState() == DownloadItem::IN_PROGRESS && |
144 !download_item_->IsPaused()) { | 148 !download_item_->IsPaused()) { |
145 download_item_->Pause(); | 149 download_item_->Pause(); |
146 } else { | 150 } else { |
147 download_item_->Resume(); | 151 download_item_->Resume(); |
148 } | 152 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 string16 DownloadShelfContextMenu::GetLabelForCommandId(int command_id) const { | 196 string16 DownloadShelfContextMenu::GetLabelForCommandId(int command_id) const { |
193 switch (static_cast<ContextMenuCommands>(command_id)) { | 197 switch (static_cast<ContextMenuCommands>(command_id)) { |
194 case SHOW_IN_FOLDER: | 198 case SHOW_IN_FOLDER: |
195 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_SHOW); | 199 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_SHOW); |
196 case OPEN_WHEN_COMPLETE: | 200 case OPEN_WHEN_COMPLETE: |
197 if (download_item_ && !download_item_->IsDone()) | 201 if (download_item_ && !download_item_->IsDone()) |
198 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE); | 202 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE); |
199 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN); | 203 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN); |
200 case ALWAYS_OPEN_TYPE: | 204 case ALWAYS_OPEN_TYPE: |
201 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); | 205 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); |
| 206 case PLATFORM_OPEN: |
| 207 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PLATFORM_OPEN); |
202 case CANCEL: | 208 case CANCEL: |
203 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_CANCEL); | 209 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_CANCEL); |
204 case TOGGLE_PAUSE: | 210 case TOGGLE_PAUSE: |
205 if (download_item_ && | 211 if (download_item_ && |
206 download_item_->GetState() == DownloadItem::IN_PROGRESS && | 212 download_item_->GetState() == DownloadItem::IN_PROGRESS && |
207 !download_item_->IsPaused()) | 213 !download_item_->IsPaused()) |
208 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM); | 214 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM); |
209 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM); | 215 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM); |
210 case DISCARD: | 216 case DISCARD: |
211 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_DISCARD); | 217 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_DISCARD); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 ui::SimpleMenuModel* DownloadShelfContextMenu::GetFinishedMenuModel() { | 265 ui::SimpleMenuModel* DownloadShelfContextMenu::GetFinishedMenuModel() { |
260 if (finished_download_menu_model_) | 266 if (finished_download_menu_model_) |
261 return finished_download_menu_model_.get(); | 267 return finished_download_menu_model_.get(); |
262 | 268 |
263 finished_download_menu_model_.reset(new ui::SimpleMenuModel(this)); | 269 finished_download_menu_model_.reset(new ui::SimpleMenuModel(this)); |
264 | 270 |
265 finished_download_menu_model_->AddItemWithStringId( | 271 finished_download_menu_model_->AddItemWithStringId( |
266 OPEN_WHEN_COMPLETE, IDS_DOWNLOAD_MENU_OPEN); | 272 OPEN_WHEN_COMPLETE, IDS_DOWNLOAD_MENU_OPEN); |
267 finished_download_menu_model_->AddCheckItemWithStringId( | 273 finished_download_menu_model_->AddCheckItemWithStringId( |
268 ALWAYS_OPEN_TYPE, IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); | 274 ALWAYS_OPEN_TYPE, IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); |
| 275 if (DownloadItemModel(download_item_).ShouldPreferOpeningInBrowser()) |
| 276 finished_download_menu_model_->AddItemWithStringId( |
| 277 PLATFORM_OPEN, IDS_DOWNLOAD_MENU_PLATFORM_OPEN); |
269 finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); | 278 finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); |
270 finished_download_menu_model_->AddItemWithStringId( | 279 finished_download_menu_model_->AddItemWithStringId( |
271 SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW); | 280 SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW); |
272 finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); | 281 finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); |
273 finished_download_menu_model_->AddItemWithStringId( | 282 finished_download_menu_model_->AddItemWithStringId( |
274 CANCEL, IDS_DOWNLOAD_MENU_CANCEL); | 283 CANCEL, IDS_DOWNLOAD_MENU_CANCEL); |
275 | 284 |
276 return finished_download_menu_model_.get(); | 285 return finished_download_menu_model_.get(); |
277 } | 286 } |
278 | 287 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 DownloadItemModel download_model(download_item_); | 347 DownloadItemModel download_model(download_item_); |
339 if (download_model.ShouldAllowDownloadFeedback()) { | 348 if (download_model.ShouldAllowDownloadFeedback()) { |
340 maybe_malicious_download_menu_model_->AddItemWithStringId( | 349 maybe_malicious_download_menu_model_->AddItemWithStringId( |
341 DISCARD, IDS_DOWNLOAD_MENU_DISCARD); | 350 DISCARD, IDS_DOWNLOAD_MENU_DISCARD); |
342 } | 351 } |
343 malicious_download_menu_model_->AddItemWithStringId( | 352 malicious_download_menu_model_->AddItemWithStringId( |
344 LEARN_MORE_SCANNING, IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING); | 353 LEARN_MORE_SCANNING, IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING); |
345 | 354 |
346 return malicious_download_menu_model_.get(); | 355 return malicious_download_menu_model_.get(); |
347 } | 356 } |
OLD | NEW |