// 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 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 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()); }