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. 4 5#include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h" 6 7#include <vector> 8 9#include "base/logging.h" 10#include "base/memory/scoped_ptr.h" 11#include "chrome/browser/history/history_types.h" 12#include "chrome/browser/ui/browser.h" 13#include "chrome/browser/ui/browser_list.h" 14#include "chrome/common/url_constants.h" 15#include "chrome/test/browser_with_test_window_test.h" 16#include "chrome/test/test_browser_window.h" 17#include "chrome/test/testing_profile.h" 18#include "content/browser/tab_contents/test_tab_contents.h" 19#include "googleurl/src/gurl.h" 20#include "testing/gmock/include/gmock/gmock.h" 21#include "testing/gtest/include/gtest/gtest.h" 22#include "ui/gfx/rect.h" 23 24namespace { 25 26class TestTabContentsDelegate : public HtmlDialogTabContentsDelegate { 27 public: 28 explicit TestTabContentsDelegate(Profile* profile) 29 : HtmlDialogTabContentsDelegate(profile) {} 30 31 virtual ~TestTabContentsDelegate() { 32 } 33 34 virtual void MoveContents(TabContents* source, const gfx::Rect& pos) {} 35 36 private: 37 DISALLOW_COPY_AND_ASSIGN(TestTabContentsDelegate); 38}; 39 40class HtmlDialogTabContentsDelegateTest : public BrowserWithTestWindowTest { 41 public: 42 virtual void SetUp() { 43 BrowserWithTestWindowTest::SetUp(); 44 test_tab_contents_delegate_.reset(new TestTabContentsDelegate(profile())); 45 } 46 47 virtual void TearDown() { 48 test_tab_contents_delegate_.reset(NULL); 49 BrowserWithTestWindowTest::TearDown(); 50 } 51 52 protected: 53 scoped_ptr<TestTabContentsDelegate> test_tab_contents_delegate_; 54}; 55 56TEST_F(HtmlDialogTabContentsDelegateTest, DoNothingMethodsTest) { 57 // None of the following calls should do anything. 58 EXPECT_TRUE(test_tab_contents_delegate_->IsPopup(NULL)); 59 scoped_refptr<history::HistoryAddPageArgs> should_add_args( 60 new history::HistoryAddPageArgs( 61 GURL(), base::Time::Now(), 0, 0, GURL(), history::RedirectList(), 62 PageTransition::TYPED, history::SOURCE_SYNCED, false)); 63 EXPECT_FALSE(test_tab_contents_delegate_->ShouldAddNavigationToHistory( 64 *should_add_args, NavigationType::NEW_PAGE)); 65 test_tab_contents_delegate_->NavigationStateChanged(NULL, 0); 66 test_tab_contents_delegate_->ActivateContents(NULL); 67 test_tab_contents_delegate_->LoadingStateChanged(NULL); 68 test_tab_contents_delegate_->CloseContents(NULL); 69 test_tab_contents_delegate_->UpdateTargetURL(NULL, GURL()); 70 test_tab_contents_delegate_->MoveContents(NULL, gfx::Rect()); 71 EXPECT_EQ(0, browser()->tab_count()); 72 EXPECT_EQ(1U, BrowserList::size()); 73} 74 75TEST_F(HtmlDialogTabContentsDelegateTest, OpenURLFromTabTest) { 76 test_tab_contents_delegate_->OpenURLFromTab( 77 NULL, GURL(chrome::kAboutBlankURL), GURL(), 78 NEW_FOREGROUND_TAB, PageTransition::LINK); 79 // This should create a new foreground tab in the existing browser. 80 EXPECT_EQ(1, browser()->tab_count()); 81 EXPECT_EQ(1U, BrowserList::size()); 82} 83 84TEST_F(HtmlDialogTabContentsDelegateTest, AddNewContentsForegroundTabTest) { 85 TabContents* contents = 86 new TabContents(profile(), NULL, MSG_ROUTING_NONE, NULL, NULL); 87 test_tab_contents_delegate_->AddNewContents( 88 NULL, contents, NEW_FOREGROUND_TAB, gfx::Rect(), false); 89 // This should create a new foreground tab in the existing browser. 90 EXPECT_EQ(1, browser()->tab_count()); 91 EXPECT_EQ(1U, BrowserList::size()); 92} 93 94TEST_F(HtmlDialogTabContentsDelegateTest, DetachTest) { 95 EXPECT_EQ(profile(), test_tab_contents_delegate_->profile()); 96 test_tab_contents_delegate_->Detach(); 97 EXPECT_EQ(NULL, test_tab_contents_delegate_->profile()); 98 // Now, none of the following calls should do anything. 99 test_tab_contents_delegate_->OpenURLFromTab( 100 NULL, GURL(chrome::kAboutBlankURL), GURL(), 101 NEW_FOREGROUND_TAB, PageTransition::LINK); 102 test_tab_contents_delegate_->AddNewContents(NULL, NULL, NEW_FOREGROUND_TAB, 103 gfx::Rect(), false); 104 EXPECT_EQ(0, browser()->tab_count()); 105 EXPECT_EQ(1U, BrowserList::size()); 106} 107 108} // namespace 109