15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_request_infobar_delegate.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/download/download_request_limiter.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MockTabDownloadState ------------------------------------------------------- 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockTabDownloadState : public DownloadRequestLimiter::TabDownloadState { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockTabDownloadState(); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockTabDownloadState(); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // DownloadRequestLimiter::TabDownloadState: 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Cancel() OVERRIDE; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Accept() OVERRIDE; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void CancelOnce() OVERRIDE; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ConfirmInfoBarDelegate* infobar_delegate() { return infobar_delegate_.get(); } 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void delete_infobar_delegate() { infobar_delegate_.reset(); } 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool responded() const { return responded_; } 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool accepted() const { return accepted_; } 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The actual infobar delegate we're listening to. 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<DownloadRequestInfoBarDelegate> infobar_delegate_; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if we have gotten some sort of response. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool responded_; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if we have gotten a Accept response. Meaningless if |responded_| is 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not true. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool accepted_; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // To produce weak pointers for infobar_ construction. 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::WeakPtrFactory<MockTabDownloadState> weak_ptr_factory_; 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockTabDownloadState); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockTabDownloadState::MockTabDownloadState() 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : responded_(false), 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) accepted_(false), 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_ptr_factory_(this) { 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) infobar_delegate_ = 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DownloadRequestInfoBarDelegate::Create(weak_ptr_factory_.GetWeakPtr()); 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockTabDownloadState::~MockTabDownloadState() { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(responded_); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockTabDownloadState::Cancel() { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(responded_); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) responded_ = true; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accepted_ = false; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockTabDownloadState::Accept() { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(responded_); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) responded_ = true; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accepted_ = true; 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_ptr_factory_.InvalidateWeakPtrs(); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void MockTabDownloadState::CancelOnce() { 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Cancel(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests ---------------------------------------------------------------------- 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(DownloadRequestInfoBarDelegate, AcceptTest) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockTabDownloadState state; 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (state.infobar_delegate()->Accept()) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state.delete_infobar_delegate(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(state.accepted()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(DownloadRequestInfoBarDelegate, CancelTest) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockTabDownloadState state; 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (state.infobar_delegate()->Cancel()) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state.delete_infobar_delegate(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(state.accepted()); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST(DownloadRequestInfoBarDelegate, CloseTest) { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockTabDownloadState state; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state.delete_infobar_delegate(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(state.accepted()); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 96