blob: f63e0dc7c008709b8b1de2e3d53c07eae83feb41 [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"
9
10class ConstrainedWindow;
[email protected]33ca232f2012-04-10 00:08:4511
12namespace content {
13class DownloadItem;
[email protected]f9f616c2012-12-11 02:07:1314class WebContents;
[email protected]33ca232f2012-04-10 00:08:4515}
16
17// Prompts the user for whether to Keep a dangerous DownloadItem using native
18// UI. This prompt is invoked by the DownloadsDOMHandler when the user wants to
19// accept a dangerous download. Having a native dialog intervene during the this
20// workflow means that the chrome://downloads page no longer has the privilege
21// to accept a dangerous download from script without user intervention. This
22// step is necessary to prevent a malicious script form abusing such a
23// privilege.
24class DownloadDangerPrompt {
25 public:
26 // Actions resulting from showing the danger prompt.
27 enum Action {
28 ACCEPT,
29 CANCEL
30 };
31
32 // Return a new self-deleting DownloadDangerPrompt. |accepted| or |canceled|
33 // will be run when the the respective action is invoked. |canceled| may also
34 // be called when |item| is either no longer dangerous or no longer in
[email protected]371d64a2012-12-14 21:11:3235 // progress, or if the tab corresponding to |web_contents| is
[email protected]33ca232f2012-04-10 00:08:4536 // closing. The returned DownloadDangerPrompt* is only used for testing. The
37 // caller does not own the object and receive no guarantees about lifetime.
38 static DownloadDangerPrompt* Create(
39 content::DownloadItem* item,
[email protected]f9f616c2012-12-11 02:07:1340 content::WebContents* web_contents,
[email protected]33ca232f2012-04-10 00:08:4541 const base::Closure& accepted,
42 const base::Closure& canceled);
43
44 protected:
45 friend class DownloadDangerPromptTest;
46
47 // Only to be used by tests. Subclasses must override to manually call the
48 // respective button click handler.
49 virtual void InvokeActionForTesting(Action action) = 0;
50};
51
52#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_DANGER_PROMPT_H_