1 // Copyright (c) 2011 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.
5 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_INFOBAR_DELEGATE_H_
6 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_INFOBAR_DELEGATE_H_
8 #include "base/basictypes.h"
9 #include "base/memory/weak_ptr.h"
10 #include "chrome/browser/download/download_request_limiter.h"
11 #include "components/infobars/core/confirm_infobar_delegate.h"
15 // An infobar delegate that presents the user with a choice to allow or deny
16 // multiple downloads from the same site. This confirmation step protects
17 // against "carpet-bombing", where a malicious site forces multiple downloads
18 // on an unsuspecting user.
19 class DownloadRequestInfoBarDelegate
: public ConfirmInfoBarDelegate
{
21 typedef base::Callback
<void(
22 InfoBarService
* infobar_service
,
23 base::WeakPtr
<DownloadRequestLimiter::TabDownloadState
> host
)>
26 ~DownloadRequestInfoBarDelegate() override
;
28 // Creates a download request delegate and adds it to |infobar_service|.
30 InfoBarService
* infobar_service
,
31 base::WeakPtr
<DownloadRequestLimiter::TabDownloadState
> host
);
33 #if defined(UNIT_TEST)
34 static scoped_ptr
<DownloadRequestInfoBarDelegate
> Create(
35 base::WeakPtr
<DownloadRequestLimiter::TabDownloadState
> host
) {
36 return scoped_ptr
<DownloadRequestInfoBarDelegate
>(
37 new DownloadRequestInfoBarDelegate(host
));
41 static void SetCallbackForTesting(FakeCreateCallback
* callback
);
44 static FakeCreateCallback
* callback_
;
46 explicit DownloadRequestInfoBarDelegate(
47 base::WeakPtr
<DownloadRequestLimiter::TabDownloadState
> host
);
49 // ConfirmInfoBarDelegate:
50 int GetIconId() const override
;
51 base::string16
GetMessageText() const override
;
52 base::string16
GetButtonLabel(InfoBarButton button
) const override
;
53 bool Accept() override
;
54 bool Cancel() override
;
57 base::WeakPtr
<DownloadRequestLimiter::TabDownloadState
> host_
;
59 DISALLOW_COPY_AND_ASSIGN(DownloadRequestInfoBarDelegate
);
62 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_INFOBAR_DELEGATE_H_