blob: de31c051fd0d4929a21cfca50d84904b3f542f00 [file] [log] [blame]
[email protected]33ca232f2012-04-10 00:08:451// 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
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_DANGER_PROMPT_H_
6#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_DANGER_PROMPT_H_
[email protected]33ca232f2012-04-10 00:08:457
8#include "base/callback_forward.h"
jialiul2c2638582016-06-08 22:18:089#include "chrome/common/safe_browsing/csd.pb.h"
[email protected]33ca232f2012-04-10 00:08:4510
jialiul7f11b742015-11-26 04:54:4911class GURL;
12
[email protected]33ca232f2012-04-10 00:08:4513namespace content {
14class DownloadItem;
[email protected]f9f616c2012-12-11 02:07:1315class WebContents;
[email protected]33ca232f2012-04-10 00:08:4516}
17
18// Prompts the user for whether to Keep a dangerous DownloadItem using native
19// UI. This prompt is invoked by the DownloadsDOMHandler when the user wants to
20// accept a dangerous download. Having a native dialog intervene during the this
21// workflow means that the chrome://downloads page no longer has the privilege
22// to accept a dangerous download from script without user intervention. This
23// step is necessary to prevent a malicious script form abusing such a
24// privilege.
25class DownloadDangerPrompt {
26 public:
27 // Actions resulting from showing the danger prompt.
28 enum Action {
estadebc8d9a62016-02-09 00:52:2029 // The user chose to proceed down the dangerous path.
[email protected]33ca232f2012-04-10 00:08:4530 ACCEPT,
estadebc8d9a62016-02-09 00:52:2031 // The user chose not to proceed down the dangerous path.
[email protected]f1d784d62013-07-28 18:36:0932 CANCEL,
estadebc8d9a62016-02-09 00:52:2033 // The user dismissed the dialog without making an explicit choice.
[email protected]f1d784d62013-07-28 18:36:0934 DISMISS,
[email protected]33ca232f2012-04-10 00:08:4535 };
[email protected]f1d784d62013-07-28 18:36:0936 typedef base::Callback<void(Action)> OnDone;
[email protected]33ca232f2012-04-10 00:08:4537
38 // Return a new self-deleting DownloadDangerPrompt. |accepted| or |canceled|
39 // will be run when the the respective action is invoked. |canceled| may also
40 // be called when |item| is either no longer dangerous or no longer in
[email protected]371d64a2012-12-14 21:11:3241 // progress, or if the tab corresponding to |web_contents| is
[email protected]33ca232f2012-04-10 00:08:4542 // closing. The returned DownloadDangerPrompt* is only used for testing. The
43 // caller does not own the object and receive no guarantees about lifetime.
[email protected]f82d9992013-01-18 19:19:0344 // If |show_context|, then the prompt message will contain some information
45 // about the download and its danger; otherwise it won't.
jialiul7f11b742015-11-26 04:54:4946 static DownloadDangerPrompt* Create(content::DownloadItem* item,
47 content::WebContents* web_contents,
48 bool show_context,
49 const OnDone& done);
[email protected]33ca232f2012-04-10 00:08:4550
[email protected]33ca232f2012-04-10 00:08:4551 // Only to be used by tests. Subclasses must override to manually call the
52 // respective button click handler.
53 virtual void InvokeActionForTesting(Action action) = 0;
jialiul7f11b742015-11-26 04:54:4954
55 protected:
56 // Sends download recovery report to safe browsing backend.
jialiulee910ec12016-01-11 19:42:4657 // Since it only records download url (DownloadItem::GetURL()), user's
58 // action (click through or not) and its download danger type, it isn't gated
59 // by user's extended reporting preference (i.e.
60 // prefs::kSafeBrowsingExtendedReportingEnabled). We should not put any extra
61 // information in this report.
jialiul2c2638582016-06-08 22:18:0862 static void SendSafeBrowsingDownloadReport(
63 safe_browsing::ClientSafeBrowsingReportRequest::ReportType report_type,
jialiulee910ec12016-01-11 19:42:4664 bool did_proceed,
65 const content::DownloadItem& download);
jialiul70cd6f2c2016-02-02 23:24:5766
67 // Records UMA stats for a download danger prompt event.
68 static void RecordDownloadDangerPrompt(bool did_proceed,
69 const content::DownloadItem& download);
[email protected]33ca232f2012-04-10 00:08:4570};
71
72#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_DANGER_PROMPT_H_