blob: e0b657b631afc7b5add8c746207b0f73e029cc74 [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/download/download_request_infobar_delegate.h"
#include "chrome/browser/download/download_request_limiter.h"
#include "testing/gtest/include/gtest/gtest.h"
// MockTabDownloadState -------------------------------------------------------
class MockTabDownloadState : public DownloadRequestLimiter::TabDownloadState {
public:
MockTabDownloadState();
virtual ~MockTabDownloadState();
// DownloadRequestLimiter::TabDownloadState:
virtual void Cancel() OVERRIDE;
virtual void Accept() OVERRIDE;
virtual void CancelOnce() OVERRIDE;
ConfirmInfoBarDelegate* infobar_delegate() { return infobar_delegate_.get(); }
void delete_infobar_delegate() { infobar_delegate_.reset(); }
bool responded() const { return responded_; }
bool accepted() const { return accepted_; }
private:
// The actual infobar delegate we're listening to.
scoped_ptr<DownloadRequestInfoBarDelegate> infobar_delegate_;
// True if we have gotten some sort of response.
bool responded_;
// True if we have gotten a Accept response. Meaningless if |responded_| is
// not true.
bool accepted_;
// To produce weak pointers for infobar_ construction.
base::WeakPtrFactory<MockTabDownloadState> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(MockTabDownloadState);
};
MockTabDownloadState::MockTabDownloadState()
: responded_(false),
accepted_(false),
weak_ptr_factory_(this) {
infobar_delegate_ =
DownloadRequestInfoBarDelegate::Create(weak_ptr_factory_.GetWeakPtr());
}
MockTabDownloadState::~MockTabDownloadState() {
EXPECT_TRUE(responded_);
}
void MockTabDownloadState::Cancel() {
EXPECT_FALSE(responded_);
responded_ = true;
accepted_ = false;
}
void MockTabDownloadState::Accept() {
EXPECT_FALSE(responded_);
responded_ = true;
accepted_ = true;
weak_ptr_factory_.InvalidateWeakPtrs();
}
void MockTabDownloadState::CancelOnce() {
Cancel();
}
// Tests ----------------------------------------------------------------------
TEST(DownloadRequestInfoBarDelegate, AcceptTest) {
MockTabDownloadState state;
if (state.infobar_delegate()->Accept())
state.delete_infobar_delegate();
EXPECT_TRUE(state.accepted());
}
TEST(DownloadRequestInfoBarDelegate, CancelTest) {
MockTabDownloadState state;
if (state.infobar_delegate()->Cancel())
state.delete_infobar_delegate();
EXPECT_FALSE(state.accepted());
}
TEST(DownloadRequestInfoBarDelegate, CloseTest) {
MockTabDownloadState state;
state.delete_infobar_delegate();
EXPECT_FALSE(state.accepted());
}