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 #include "base/memory/scoped_ptr.h"
6 #include "base/memory/weak_ptr.h"
7 #include "chrome/browser/download/download_request_infobar_delegate.h"
8 #include "chrome/browser/download/download_request_limiter.h"
9 #include "testing/gtest/include/gtest/gtest.h"
11 // MockTabDownloadState -------------------------------------------------------
13 class MockTabDownloadState : public DownloadRequestLimiter::TabDownloadState {
15 MockTabDownloadState();
16 ~MockTabDownloadState() override;
18 // DownloadRequestLimiter::TabDownloadState:
19 void Cancel() override;
20 void Accept() override;
21 void CancelOnce() override;
23 ConfirmInfoBarDelegate* infobar_delegate() { return infobar_delegate_.get(); }
24 void delete_infobar_delegate() { infobar_delegate_.reset(); }
25 bool responded() const { return responded_; }
26 bool accepted() const { return accepted_; }
29 // The actual infobar delegate we're listening to.
30 scoped_ptr<DownloadRequestInfoBarDelegate> infobar_delegate_;
32 // True if we have gotten some sort of response.
35 // True if we have gotten a Accept response. Meaningless if |responded_| is
39 // To produce weak pointers for infobar_ construction.
40 base::WeakPtrFactory<MockTabDownloadState> weak_ptr_factory_;
42 DISALLOW_COPY_AND_ASSIGN(MockTabDownloadState);
45 MockTabDownloadState::MockTabDownloadState()
48 weak_ptr_factory_(this) {
50 DownloadRequestInfoBarDelegate::Create(weak_ptr_factory_.GetWeakPtr());
53 MockTabDownloadState::~MockTabDownloadState() {
54 EXPECT_TRUE(responded_);
57 void MockTabDownloadState::Cancel() {
58 EXPECT_FALSE(responded_);
63 void MockTabDownloadState::Accept() {
64 EXPECT_FALSE(responded_);
67 weak_ptr_factory_.InvalidateWeakPtrs();
70 void MockTabDownloadState::CancelOnce() {
75 // Tests ----------------------------------------------------------------------
77 TEST(DownloadRequestInfoBarDelegate, AcceptTest) {
78 MockTabDownloadState state;
79 if (state.infobar_delegate()->Accept())
80 state.delete_infobar_delegate();
81 EXPECT_TRUE(state.accepted());
84 TEST(DownloadRequestInfoBarDelegate, CancelTest) {
85 MockTabDownloadState state;
86 if (state.infobar_delegate()->Cancel())
87 state.delete_infobar_delegate();
88 EXPECT_FALSE(state.accepted());
91 TEST(DownloadRequestInfoBarDelegate, CloseTest) {
92 MockTabDownloadState state;
93 state.delete_infobar_delegate();
94 EXPECT_FALSE(state.accepted());