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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 } | 72 } |
73 | 73 |
74 bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const { | 74 bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const { |
75 if (!download_item_) | 75 if (!download_item_) |
76 return false; | 76 return false; |
77 | 77 |
78 switch (static_cast<ContextMenuCommands>(command_id)) { | 78 switch (static_cast<ContextMenuCommands>(command_id)) { |
79 case SHOW_IN_FOLDER: | 79 case SHOW_IN_FOLDER: |
80 return download_item_->CanShowInFolder(); | 80 return download_item_->CanShowInFolder(); |
81 case OPEN_WHEN_COMPLETE: | 81 case OPEN_WHEN_COMPLETE: |
| 82 case PLATFORM_OPEN: |
82 return download_item_->CanOpenDownload() && | 83 return download_item_->CanOpenDownload() && |
83 !download_crx_util::IsExtensionDownload(*download_item_); | 84 !download_crx_util::IsExtensionDownload(*download_item_); |
84 case ALWAYS_OPEN_TYPE: | 85 case ALWAYS_OPEN_TYPE: |
85 // For temporary downloads, the target filename might be a temporary | 86 // For temporary downloads, the target filename might be a temporary |
86 // filename. Don't base an "Always open" decision based on it. Also | 87 // filename. Don't base an "Always open" decision based on it. Also |
87 // exclude extensions. | 88 // exclude extensions. |
88 return download_item_->CanOpenDownload() && | 89 return download_item_->CanOpenDownload() && |
89 !download_crx_util::IsExtensionDownload(*download_item_); | 90 !download_crx_util::IsExtensionDownload(*download_item_); |
90 case CANCEL: | 91 case CANCEL: |
91 return !download_item_->IsDone(); | 92 return !download_item_->IsDone(); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 case ALWAYS_OPEN_TYPE: { | 132 case ALWAYS_OPEN_TYPE: { |
132 DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext( | 133 DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext( |
133 download_item_->GetBrowserContext()); | 134 download_item_->GetBrowserContext()); |
134 base::FilePath path = download_item_->GetTargetFilePath(); | 135 base::FilePath path = download_item_->GetTargetFilePath(); |
135 if (!IsCommandIdChecked(ALWAYS_OPEN_TYPE)) | 136 if (!IsCommandIdChecked(ALWAYS_OPEN_TYPE)) |
136 prefs->EnableAutoOpenBasedOnExtension(path); | 137 prefs->EnableAutoOpenBasedOnExtension(path); |
137 else | 138 else |
138 prefs->DisableAutoOpenBasedOnExtension(path); | 139 prefs->DisableAutoOpenBasedOnExtension(path); |
139 break; | 140 break; |
140 } | 141 } |
| 142 case PLATFORM_OPEN: |
| 143 DownloadItemModel(download_item_).OpenUsingPlatformHandler(); |
| 144 break; |
141 case CANCEL: | 145 case CANCEL: |
142 download_item_->Cancel(true /* Cancelled by user */); | 146 download_item_->Cancel(true /* Cancelled by user */); |
143 break; | 147 break; |
144 case TOGGLE_PAUSE: | 148 case TOGGLE_PAUSE: |
145 if (download_item_->GetState() == DownloadItem::IN_PROGRESS && | 149 if (download_item_->GetState() == DownloadItem::IN_PROGRESS && |
146 !download_item_->IsPaused()) { | 150 !download_item_->IsPaused()) { |
147 download_item_->Pause(); | 151 download_item_->Pause(); |
148 } else { | 152 } else { |
149 download_item_->Resume(); | 153 download_item_->Resume(); |
150 } | 154 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 string16 DownloadShelfContextMenu::GetLabelForCommandId(int command_id) const { | 218 string16 DownloadShelfContextMenu::GetLabelForCommandId(int command_id) const { |
215 switch (static_cast<ContextMenuCommands>(command_id)) { | 219 switch (static_cast<ContextMenuCommands>(command_id)) { |
216 case SHOW_IN_FOLDER: | 220 case SHOW_IN_FOLDER: |
217 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_SHOW); | 221 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_SHOW); |
218 case OPEN_WHEN_COMPLETE: | 222 case OPEN_WHEN_COMPLETE: |
219 if (download_item_ && !download_item_->IsDone()) | 223 if (download_item_ && !download_item_->IsDone()) |
220 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE); | 224 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE); |
221 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN); | 225 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN); |
222 case ALWAYS_OPEN_TYPE: | 226 case ALWAYS_OPEN_TYPE: |
223 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); | 227 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); |
| 228 case PLATFORM_OPEN: |
| 229 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PLATFORM_OPEN); |
224 case CANCEL: | 230 case CANCEL: |
225 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_CANCEL); | 231 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_CANCEL); |
226 case TOGGLE_PAUSE: | 232 case TOGGLE_PAUSE: |
227 if (download_item_ && | 233 if (download_item_ && |
228 download_item_->GetState() == DownloadItem::IN_PROGRESS && | 234 download_item_->GetState() == DownloadItem::IN_PROGRESS && |
229 !download_item_->IsPaused()) | 235 !download_item_->IsPaused()) |
230 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM); | 236 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM); |
231 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM); | 237 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM); |
232 case DISCARD: | 238 case DISCARD: |
233 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_DISCARD); | 239 return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_DISCARD); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 ui::SimpleMenuModel* DownloadShelfContextMenu::GetFinishedMenuModel() { | 289 ui::SimpleMenuModel* DownloadShelfContextMenu::GetFinishedMenuModel() { |
284 if (finished_download_menu_model_) | 290 if (finished_download_menu_model_) |
285 return finished_download_menu_model_.get(); | 291 return finished_download_menu_model_.get(); |
286 | 292 |
287 finished_download_menu_model_.reset(new ui::SimpleMenuModel(this)); | 293 finished_download_menu_model_.reset(new ui::SimpleMenuModel(this)); |
288 | 294 |
289 finished_download_menu_model_->AddItemWithStringId( | 295 finished_download_menu_model_->AddItemWithStringId( |
290 OPEN_WHEN_COMPLETE, IDS_DOWNLOAD_MENU_OPEN); | 296 OPEN_WHEN_COMPLETE, IDS_DOWNLOAD_MENU_OPEN); |
291 finished_download_menu_model_->AddCheckItemWithStringId( | 297 finished_download_menu_model_->AddCheckItemWithStringId( |
292 ALWAYS_OPEN_TYPE, IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); | 298 ALWAYS_OPEN_TYPE, IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); |
| 299 if (DownloadItemModel(download_item_).ShouldPreferOpeningInBrowser()) |
| 300 finished_download_menu_model_->AddItemWithStringId( |
| 301 PLATFORM_OPEN, IDS_DOWNLOAD_MENU_PLATFORM_OPEN); |
293 finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); | 302 finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); |
294 finished_download_menu_model_->AddItemWithStringId( | 303 finished_download_menu_model_->AddItemWithStringId( |
295 SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW); | 304 SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW); |
296 finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); | 305 finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); |
297 finished_download_menu_model_->AddItemWithStringId( | 306 finished_download_menu_model_->AddItemWithStringId( |
298 CANCEL, IDS_DOWNLOAD_MENU_CANCEL); | 307 CANCEL, IDS_DOWNLOAD_MENU_CANCEL); |
299 | 308 |
300 return finished_download_menu_model_.get(); | 309 return finished_download_menu_model_.get(); |
301 } | 310 } |
302 | 311 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 DownloadItemModel download_model(download_item_); | 368 DownloadItemModel download_model(download_item_); |
360 if (download_model.ShouldAllowDownloadFeedback()) { | 369 if (download_model.ShouldAllowDownloadFeedback()) { |
361 malicious_download_menu_model_->AddItemWithStringId( | 370 malicious_download_menu_model_->AddItemWithStringId( |
362 REPORT, IDS_DOWNLOAD_MENU_REPORT); | 371 REPORT, IDS_DOWNLOAD_MENU_REPORT); |
363 } | 372 } |
364 malicious_download_menu_model_->AddItemWithStringId( | 373 malicious_download_menu_model_->AddItemWithStringId( |
365 LEARN_MORE_SCANNING, IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING); | 374 LEARN_MORE_SCANNING, IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING); |
366 | 375 |
367 return malicious_download_menu_model_.get(); | 376 return malicious_download_menu_model_.get(); |
368 } | 377 } |
OLD | NEW |