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_danger_prompt.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/chrome_download_manager_delegate.h" 110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/download/download_stats.h" 1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/extensions/api/experience_sampling_private/experience_sampling.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_modal_confirm_dialog.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" 1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/chromium_strings.h" 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_danger_type.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/download_item.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using extensions::ExperienceSamplingEvent; 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(wittman): Create a native web contents modal dialog implementation of 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// this dialog for non-Views platforms, to support bold formatting of the 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// message lead. 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implements DownloadDangerPrompt using a TabModalConfirmDialog. 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class DownloadDangerPromptImpl : public DownloadDangerPrompt, 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public content::DownloadItem::Observer, 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public TabModalConfirmDialogDelegate { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadDangerPromptImpl(content::DownloadItem* item, 35fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch content::WebContents* web_contents, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_context, 37558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const OnDone& done); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DownloadDangerPromptImpl(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // DownloadDangerPrompt: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InvokeActionForTesting(Action action) OVERRIDE; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // content::DownloadItem::Observer: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDownloadUpdated(content::DownloadItem* download) OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // TabModalConfirmDialogDelegate: 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetTitle() OVERRIDE; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual base::string16 GetDialogMessage() OVERRIDE; 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetAcceptButtonTitle() OVERRIDE; 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetCancelButtonTitle() OVERRIDE; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnAccepted() OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCanceled() OVERRIDE; 54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void OnClosed() OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void RunDone(Action action); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadItem* download_; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_context_; 60558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch OnDone done_; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<ExperienceSamplingEvent> sampling_event_; 6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DownloadDangerPromptImpl); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadDangerPromptImpl::DownloadDangerPromptImpl( 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadItem* download, 69fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch content::WebContents* web_contents, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_context, 71558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const OnDone& done) 72fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch : TabModalConfirmDialogDelegate(web_contents), 73fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch download_(download), 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_context_(show_context), 75558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch done_(done) { 76558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch DCHECK(!done_.is_null()); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_->AddObserver(this); 780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) RecordOpenedDangerousConfirmDialog(download_->GetDangerType()); 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // ExperienceSampling: A malicious download warning is being shown to the 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // user, so we start a new SamplingEvent and track it. 8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) sampling_event_.reset(new ExperienceSamplingEvent( 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ExperienceSamplingEvent::kDownloadDangerPrompt, 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) download->GetURL(), 8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) download->GetReferrerUrl(), 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) download->GetBrowserContext())); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadDangerPromptImpl::~DownloadDangerPromptImpl() { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |this| might be deleted without invoking any callbacks. E.g. pressing Esc 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on GTK or if the user navigates away from the page showing the prompt. 92558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch RunDone(DISMISS); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DownloadDangerPromptImpl::InvokeActionForTesting(Action action) { 96558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch switch (action) { 97558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch case ACCEPT: Accept(); break; 98558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch case CANCEL: Cancel(); break; 99558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch case DISMISS: 100558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch RunDone(DISMISS); 101558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch Cancel(); 102558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch break; 103558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DownloadDangerPromptImpl::OnDownloadUpdated( 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadItem* download) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the download is nolonger dangerous (accepted externally) or the download 109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // is in a terminal state, then the download danger prompt is no longer 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // necessary. 111558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!download->IsDangerous() || download->IsDone()) { 112558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch RunDone(DISMISS); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Cancel(); 114558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 DownloadDangerPromptImpl::GetTitle() { 1188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (show_context_) 1198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CONFIRM_KEEP_DANGEROUS_DOWNLOAD_TITLE); 1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switch (download_->GetDangerType()) { 1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: 1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT: 1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST: 1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED: { 1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return l10n_util::GetStringUTF16( 1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_RESTORE_KEEP_DANGEROUS_DOWNLOAD_TITLE); 1271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) default: { 1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return l10n_util::GetStringUTF16( 1301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_CONFIRM_KEEP_DANGEROUS_DOWNLOAD_TITLE); 1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 DownloadDangerPromptImpl::GetDialogMessage() { 1368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (show_context_) { 1378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) switch (download_->GetDangerType()) { 1388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE: { 1398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringFUTF16( 1408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IDS_PROMPT_DANGEROUS_DOWNLOAD, 1418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) download_->GetFileNameToReportUser().LossyDisplayName()); 1428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: // Fall through 1448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT: 1458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST: { 146ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return l10n_util::GetStringFUTF16( 147ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch IDS_PROMPT_MALICIOUS_DOWNLOAD_CONTENT, 148ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch download_->GetFileNameToReportUser().LossyDisplayName()); 149ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT: { 1518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringFUTF16( 1528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IDS_PROMPT_UNCOMMON_DOWNLOAD_CONTENT, 1538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) download_->GetFileNameToReportUser().LossyDisplayName()); 1548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED: { 1568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringFUTF16( 1571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_PROMPT_DOWNLOAD_CHANGES_SETTINGS, 1588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) download_->GetFileNameToReportUser().LossyDisplayName()); 1598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS: 1618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT: 1628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_USER_VALIDATED: 1638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_MAX: { 1648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) break; 1658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } else { 1688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) switch (download_->GetDangerType()) { 1698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: 1708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT: 1718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST: { 1728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringUTF16( 1731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_PROMPT_CONFIRM_KEEP_MALICIOUS_DOWNLOAD_LEAD) + 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ASCIIToUTF16("\n\n") + 1751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) l10n_util::GetStringUTF16( 1761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_PROMPT_CONFIRM_KEEP_MALICIOUS_DOWNLOAD_BODY); 1778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) default: { 1798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringUTF16( 1808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IDS_PROMPT_CONFIRM_KEEP_DANGEROUS_DOWNLOAD); 1818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 182ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 184a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch NOTREACHED(); 185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return base::string16(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 DownloadDangerPromptImpl::GetAcceptButtonTitle() { 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (show_context_) 1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CONFIRM_DOWNLOAD); 1918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) switch (download_->GetDangerType()) { 1928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: 1938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT: 1941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST: 1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED: { 1968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CONFIRM_DOWNLOAD_AGAIN_MALICIOUS); 1978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 1988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) default: 1998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CONFIRM_DOWNLOAD_AGAIN); 2008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 2018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 2028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 DownloadDangerPromptImpl::GetCancelButtonTitle() { 2048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (show_context_) 2058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CANCEL); 2068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) switch (download_->GetDangerType()) { 2078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: 2088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT: 2091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_HOST: 2101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case content::DOWNLOAD_DANGER_TYPE_POTENTIALLY_UNWANTED: { 2118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CONFIRM_CANCEL_AGAIN_MALICIOUS); 2128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 2138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) default: 2148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CANCEL); 2158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DownloadDangerPromptImpl::OnAccepted() { 21903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // ExperienceSampling: User proceeded through the warning. 22003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kProceed); 221558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch RunDone(ACCEPT); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DownloadDangerPromptImpl::OnCanceled() { 22503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // ExperienceSampling: User canceled the warning. 22603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kDeny); 227558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch RunDone(CANCEL); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 230a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void DownloadDangerPromptImpl::OnClosed() { 23103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // ExperienceSampling: User canceled the warning. 23203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) sampling_event_->CreateUserDecisionEvent(ExperienceSamplingEvent::kDeny); 2333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) RunDone(DISMISS); 234a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 235a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 236558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid DownloadDangerPromptImpl::RunDone(Action action) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoking the callback can cause the download item state to change or cause 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the constrained window to close, and |callback| refers to a member 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // variable. 240558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch OnDone done = done_; 241558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch done_.Reset(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (download_ != NULL) { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_->RemoveObserver(this); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) download_ = NULL; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 246558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!done.is_null()) 247558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch done.Run(action); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 252a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if !defined(USE_AURA) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DownloadDangerPrompt* DownloadDangerPrompt::Create( 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::DownloadItem* item, 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents, 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_context, 258558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const OnDone& done) { 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadDangerPromptImpl* prompt = new DownloadDangerPromptImpl( 260fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch item, web_contents, show_context, done); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |prompt| will be deleted when the dialog is done. 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabModalConfirmDialog::Create(prompt, web_contents); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prompt; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 266