Home | History | Annotate | Download | only in download
      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.
      4 
      5 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_INFOBAR_DELEGATE_H_
      6 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_INFOBAR_DELEGATE_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/memory/weak_ptr.h"
     10 #include "chrome/browser/download/download_request_limiter.h"
     11 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
     12 
     13 class InfoBarService;
     14 
     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 {
     20  public:
     21   typedef base::Callback<void(
     22       InfoBarService* infobar_service,
     23       base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host)>
     24     FakeCreateCallback;
     25 
     26   virtual ~DownloadRequestInfoBarDelegate();
     27 
     28   // Creates a download request delegate and adds it to |infobar_service|.
     29   static void Create(
     30       InfoBarService* infobar_service,
     31       base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host);
     32 
     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(NULL, host));
     38   }
     39 #endif
     40 
     41   static void SetCallbackForTesting(FakeCreateCallback* callback);
     42 
     43  private:
     44   static FakeCreateCallback* callback_;
     45 
     46   DownloadRequestInfoBarDelegate(
     47       InfoBarService* infobar_service,
     48       base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host);
     49 
     50   // ConfirmInfoBarDelegate:
     51   virtual int GetIconID() const OVERRIDE;
     52   virtual string16 GetMessageText() const OVERRIDE;
     53   virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
     54   virtual bool Accept() OVERRIDE;
     55   virtual bool Cancel() OVERRIDE;
     56 
     57   bool responded_;
     58   base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host_;
     59 
     60   DISALLOW_COPY_AND_ASSIGN(DownloadRequestInfoBarDelegate);
     61 };
     62 
     63 #endif  // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_INFOBAR_DELEGATE_H_
     64