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 "components/infobars/core/confirm_infobar_delegate.h" 12 13class 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. 19class 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