172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/download/download_request_infobar_delegate.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/download/download_request_limiter.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// MockTabDownloadState ------------------------------------------------------- 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockTabDownloadState : public DownloadRequestLimiter::TabDownloadState { 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MockTabDownloadState(); 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~MockTabDownloadState(); 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // DownloadRequestLimiter::TabDownloadState 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Cancel(); 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Accept(); 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ConfirmInfoBarDelegate* infobar() { 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return infobar_->AsConfirmInfoBarDelegate(); 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void close_infobar() { 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // TODO(pkasting): Right now InfoBarDelegates delete themselves via 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // InfoBarClosed(); once InfoBars own their delegates, this can become a 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // simple reset() call and ~MockTabDownloadState() will no longer need to 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // call it. 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (infobar_ != NULL) 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen infobar_.release()->InfoBarClosed(); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool responded() const { return responded_; } 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool accepted() const { return accepted_; } 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // The actual infobar delegate we're listening to. 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<InfoBarDelegate> infobar_; 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // True if we have gotten some sort of response. 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool responded_; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // True if we have gotten a Accept response. Meaningless if |responded_| is 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // not true. 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool accepted_; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenMockTabDownloadState::MockTabDownloadState() 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : responded_(false), accepted_(false) { 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen infobar_.reset(new DownloadRequestInfoBarDelegate(NULL, this)); 4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenMockTabDownloadState::~MockTabDownloadState() { 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen close_infobar(); 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(responded_); 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid MockTabDownloadState::Cancel() { 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(responded_); 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen responded_ = true; 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accepted_ = false; 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid MockTabDownloadState::Accept() { 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(responded_); 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen responded_ = true; 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen accepted_ = true; 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen static_cast<DownloadRequestInfoBarDelegate*>(infobar_.get())->set_host(NULL); 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Tests ---------------------------------------------------------------------- 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(DownloadRequestInfobarDelegate, AcceptTest) { 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockTabDownloadState state; 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen state.infobar()->Accept(); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(state.accepted()); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(DownloadRequestInfobarDelegate, CancelTest) { 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockTabDownloadState state; 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen state.infobar()->Cancel(); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(state.accepted()); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(DownloadRequestInfobarDelegate, CloseTest) { 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockTabDownloadState state; 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen state.close_infobar(); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(state.accepted()); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 89