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(host)); 38 } 39 #endif 40 41 static void SetCallbackForTesting(FakeCreateCallback* callback); 42 43 private: 44 static FakeCreateCallback* callback_; 45 46 explicit DownloadRequestInfoBarDelegate( 47 base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host); 48 49 // ConfirmInfoBarDelegate: 50 virtual int GetIconID() const OVERRIDE; 51 virtual base::string16 GetMessageText() const OVERRIDE; 52 virtual base::string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; 53 virtual bool Accept() OVERRIDE; 54 virtual bool Cancel() OVERRIDE; 55 56 bool responded_; 57 base::WeakPtr<DownloadRequestLimiter::TabDownloadState> host_; 58 59 DISALLOW_COPY_AND_ASSIGN(DownloadRequestInfoBarDelegate); 60 }; 61 62 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_REQUEST_INFOBAR_DELEGATE_H_ 63