download_shelf_context_menu.cc revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_shelf_context_menu.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_crx_util.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_item_model.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_prefs.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/safe_browsing/download_protection_service.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/safe_browsing/safe_browsing_service.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/url_constants.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_item.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_manager.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::DownloadItem; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DownloadShelfContextMenu::~DownloadShelfContextMenu() { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DetachFromDownloadItem(); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadShelfContextMenu::DownloadShelfContextMenu( 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItem* download_item, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PageNavigator* navigator) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : download_item_(download_item), 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigator_(navigator) { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(download_item_); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_item_->AddObserver(this); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ui::SimpleMenuModel* DownloadShelfContextMenu::GetMenuModel() { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SimpleMenuModel* model = NULL; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!download_item_) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadItemModel download_model(download_item_); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We shouldn't be opening a context menu for a dangerous download, unless it 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is a malicious download. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!download_model.IsDangerous() || download_model.IsMalicious()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (download_model.IsMalicious()) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model = GetMaliciousMenuModel(); 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) else if (download_item_->GetState() == DownloadItem::COMPLETE) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model = GetFinishedMenuModel(); 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) else if (download_item_->GetState() == DownloadItem::INTERRUPTED) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model = GetInterruptedMenuModel(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model = GetInProgressMenuModel(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return model; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!download_item_) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (static_cast<ContextMenuCommands>(command_id)) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SHOW_IN_FOLDER: 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return download_item_->CanShowInFolder(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case OPEN_WHEN_COMPLETE: 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return download_item_->CanOpenDownload() && 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !download_crx_util::IsExtensionDownload(*download_item_); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ALWAYS_OPEN_TYPE: 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For temporary downloads, the target filename might be a temporary 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // filename. Don't base an "Always open" decision based on it. Also 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // exclude extensions. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return download_item_->CanOpenDownload() && 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !download_crx_util::IsExtensionDownload(*download_item_); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CANCEL: 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return download_item_->IsPartialDownload(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case TOGGLE_PAUSE: 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return download_item_->GetState() == DownloadItem::IN_PROGRESS; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case DISCARD: 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case KEEP: 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case LEARN_MORE_SCANNING: 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case LEARN_MORE_INTERRUPTED: 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool DownloadShelfContextMenu::IsCommandIdChecked(int command_id) const { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!download_item_) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (command_id) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case OPEN_WHEN_COMPLETE: 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return download_item_->GetOpenWhenComplete() || 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_crx_util::IsExtensionDownload(*download_item_); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ALWAYS_OPEN_TYPE: 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return download_item_->ShouldOpenFileBasedOnExtension(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case TOGGLE_PAUSE: 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return download_item_->IsPaused(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DownloadShelfContextMenu::ExecuteCommand(int command_id, int event_flags) { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!download_item_) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (static_cast<ContextMenuCommands>(command_id)) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SHOW_IN_FOLDER: 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item_->ShowDownloadInShell(); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case OPEN_WHEN_COMPLETE: 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item_->OpenDownload(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ALWAYS_OPEN_TYPE: { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext( 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item_->GetBrowserContext()); 11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath path = download_item_->GetTargetFilePath(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!IsCommandIdChecked(ALWAYS_OPEN_TYPE)) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->EnableAutoOpenBasedOnExtension(path); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->DisableAutoOpenBasedOnExtension(path); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CANCEL: 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_item_->Cancel(true /* Cancelled by user */); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case TOGGLE_PAUSE: 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It is possible for the download to complete before the user clicks the 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // menu item, recheck if the download is in progress state before toggling 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pause. 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (download_item_->IsPartialDownload()) { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (download_item_->IsPaused()) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_item_->Resume(); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_item_->Pause(); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case DISCARD: 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item_->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case KEEP: 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_item_->DangerousDownloadValidated(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case LEARN_MORE_SCANNING: { 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FULL_SAFE_BROWSING) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using safe_browsing::DownloadProtectionService; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingService* sb_service = 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser_process->safe_browsing_service(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadProtectionService* protection_service = 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (sb_service ? sb_service->download_protection_service() : NULL); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (protection_service) { 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protection_service->ShowDetailsForDownload(*download_item_, navigator_); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should only be getting invoked if we are using safe browsing. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case LEARN_MORE_INTERRUPTED: 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) navigator_->OpenURL( 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::OpenURLParams(GURL(chrome::kDownloadInterruptedLearnMoreURL), 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Referrer(), 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NEW_FOREGROUND_TAB, 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::PAGE_TRANSITION_LINK, 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false)); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool DownloadShelfContextMenu::GetAcceleratorForCommandId( 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int command_id, ui::Accelerator* accelerator) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool DownloadShelfContextMenu::IsItemForCommandIdDynamic(int command_id) const { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return command_id == TOGGLE_PAUSE; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 DownloadShelfContextMenu::GetLabelForCommandId(int command_id) const { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (static_cast<ContextMenuCommands>(command_id)) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SHOW_IN_FOLDER: 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_SHOW); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case OPEN_WHEN_COMPLETE: 18690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (download_item_ && 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) download_item_->GetState() == DownloadItem::IN_PROGRESS) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_OPEN); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ALWAYS_OPEN_TYPE: 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CANCEL: 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_CANCEL); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case TOGGLE_PAUSE: 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (download_item_ && download_item_->IsPaused()) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case DISCARD: 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_DISCARD); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case KEEP: 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_KEEP); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case LEARN_MORE_SCANNING: 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case LEARN_MORE_INTERRUPTED: 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return l10n_util::GetStringUTF16( 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_DOWNLOAD_MENU_LEARN_MORE_INTERRUPTED); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return string16(); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DownloadShelfContextMenu::DetachFromDownloadItem() { 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!download_item_) 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_item_->RemoveObserver(this); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) download_item_ = NULL; 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DownloadShelfContextMenu::OnDownloadDestroyed(DownloadItem* download) { 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(download_item_ == download); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DetachFromDownloadItem(); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ui::SimpleMenuModel* DownloadShelfContextMenu::GetInProgressMenuModel() { 226b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (in_progress_download_menu_model_) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return in_progress_download_menu_model_.get(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in_progress_download_menu_model_.reset(new ui::SimpleMenuModel(this)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in_progress_download_menu_model_->AddCheckItemWithStringId( 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OPEN_WHEN_COMPLETE, IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in_progress_download_menu_model_->AddCheckItemWithStringId( 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ALWAYS_OPEN_TYPE, IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in_progress_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in_progress_download_menu_model_->AddItemWithStringId( 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TOGGLE_PAUSE, IDS_DOWNLOAD_MENU_PAUSE_ITEM); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in_progress_download_menu_model_->AddItemWithStringId( 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in_progress_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) in_progress_download_menu_model_->AddItemWithStringId( 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CANCEL, IDS_DOWNLOAD_MENU_CANCEL); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return in_progress_download_menu_model_.get(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ui::SimpleMenuModel* DownloadShelfContextMenu::GetFinishedMenuModel() { 248b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (finished_download_menu_model_) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return finished_download_menu_model_.get(); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finished_download_menu_model_.reset(new ui::SimpleMenuModel(this)); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finished_download_menu_model_->AddItemWithStringId( 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OPEN_WHEN_COMPLETE, IDS_DOWNLOAD_MENU_OPEN); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finished_download_menu_model_->AddCheckItemWithStringId( 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ALWAYS_OPEN_TYPE, IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finished_download_menu_model_->AddItemWithStringId( 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SHOW_IN_FOLDER, IDS_DOWNLOAD_MENU_SHOW); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finished_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finished_download_menu_model_->AddItemWithStringId( 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CANCEL, IDS_DOWNLOAD_MENU_CANCEL); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return finished_download_menu_model_.get(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::SimpleMenuModel* DownloadShelfContextMenu::GetInterruptedMenuModel() { 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The Help Center article is currently Windows specific. 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(asanka): Enable this for other platforms when the article is expanded 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for other platforms. 272b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (interrupted_download_menu_model_) 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return interrupted_download_menu_model_.get(); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interrupted_download_menu_model_.reset(new ui::SimpleMenuModel(this)); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interrupted_download_menu_model_->AddItemWithStringId( 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LEARN_MORE_INTERRUPTED, IDS_DOWNLOAD_MENU_LEARN_MORE_INTERRUPTED); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return interrupted_download_menu_model_.get(); 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetInProgressMenuModel(); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ui::SimpleMenuModel* DownloadShelfContextMenu::GetMaliciousMenuModel() { 287b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (malicious_download_menu_model_) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return malicious_download_menu_model_.get(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) malicious_download_menu_model_.reset(new ui::SimpleMenuModel(this)); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) malicious_download_menu_model_->AddItemWithStringId( 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISCARD, IDS_DOWNLOAD_MENU_DISCARD); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) malicious_download_menu_model_->AddItemWithStringId( 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEEP, IDS_DOWNLOAD_MENU_KEEP); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) malicious_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) malicious_download_menu_model_->AddItemWithStringId( 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LEARN_MORE_SCANNING, IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return malicious_download_menu_model_.get(); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 302