| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/dom_ui/html_dialog_tab_contents_delegate.h" | 5 #include "chrome/browser/dom_ui/html_dialog_tab_contents_delegate.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
| 11 #include "chrome/browser/browser.h" | 11 #include "chrome/browser/browser.h" |
| 12 #include "chrome/browser/browser_list.h" | 12 #include "chrome/browser/browser_list.h" |
| 13 #include "chrome/browser/history/history_types.h" | 13 #include "chrome/browser/history/history_types.h" |
| 14 #include "chrome/browser/tab_contents/test_tab_contents.h" | 14 #include "chrome/browser/tab_contents/test_tab_contents.h" |
| 15 #include "chrome/common/url_constants.h" | 15 #include "chrome/common/url_constants.h" |
| 16 #include "chrome/test/browser_with_test_window_test.h" | 16 #include "chrome/test/browser_with_test_window_test.h" |
| 17 #include "chrome/test/test_browser_window.h" | 17 #include "chrome/test/test_browser_window.h" |
| 18 #include "chrome/test/testing_profile.h" | 18 #include "chrome/test/testing_profile.h" |
| 19 #include "gfx/rect.h" | 19 #include "gfx/rect.h" |
| 20 #include "googleurl/src/gurl.h" | 20 #include "googleurl/src/gurl.h" |
| 21 #include "testing/gmock/include/gmock/gmock.h" | 21 #include "testing/gmock/include/gmock/gmock.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 23 |
| 24 namespace { | 24 namespace { |
| 25 | 25 |
| 26 class MockTestBrowserWindow : public TestBrowserWindow { | |
| 27 public: | |
| 28 // TestBrowserWindow() doesn't actually use its browser argument so we just | |
| 29 // pass NULL. | |
| 30 MockTestBrowserWindow() : TestBrowserWindow(NULL) {} | |
| 31 | |
| 32 virtual ~MockTestBrowserWindow() {} | |
| 33 | |
| 34 MOCK_METHOD0(Show, void()); | |
| 35 | |
| 36 private: | |
| 37 DISALLOW_COPY_AND_ASSIGN(MockTestBrowserWindow); | |
| 38 }; | |
| 39 | |
| 40 class TestTabContentsDelegate : public HtmlDialogTabContentsDelegate { | 26 class TestTabContentsDelegate : public HtmlDialogTabContentsDelegate { |
| 41 public: | 27 public: |
| 42 explicit TestTabContentsDelegate(Profile* profile) | 28 explicit TestTabContentsDelegate(Profile* profile) |
| 43 : HtmlDialogTabContentsDelegate(profile), | 29 : HtmlDialogTabContentsDelegate(profile) {} |
| 44 window_for_next_created_browser_(NULL) {} | |
| 45 | 30 |
| 46 virtual ~TestTabContentsDelegate() { | 31 virtual ~TestTabContentsDelegate() { |
| 47 CHECK(!window_for_next_created_browser_); | |
| 48 for (std::vector<Browser*>::iterator i = created_browsers_.begin(); | |
| 49 i != created_browsers_.end(); ++i) { | |
| 50 (*i)->CloseAllTabs(); | |
| 51 // We need to explicitly cast this since BrowserWindow does *not* | |
| 52 // have a virtual destructor. | |
| 53 delete static_cast<MockTestBrowserWindow*>((*i)->window()); | |
| 54 delete *i; | |
| 55 } | |
| 56 } | 32 } |
| 57 | 33 |
| 58 virtual void MoveContents(TabContents* source, const gfx::Rect& pos) {} | 34 virtual void MoveContents(TabContents* source, const gfx::Rect& pos) {} |
| 59 virtual void ToolbarSizeChanged(TabContents* source, bool is_animating) {} | 35 virtual void ToolbarSizeChanged(TabContents* source, bool is_animating) {} |
| 60 | 36 |
| 61 // Takes ownership of window. | |
| 62 void SetWindowForNextCreatedBrowser(BrowserWindow* window) { | |
| 63 CHECK(window); | |
| 64 window_for_next_created_browser_ = window; | |
| 65 } | |
| 66 | |
| 67 protected: | |
| 68 // CreateBrowser() is called by OpenURLFromTab() and AddNewContents(). | |
| 69 virtual Browser* CreateBrowser() { | |
| 70 DCHECK(profile()); | |
| 71 DCHECK(window_for_next_created_browser_); | |
| 72 Browser* browser = new Browser(Browser::TYPE_NORMAL, profile()); | |
| 73 browser->set_window(window_for_next_created_browser_); | |
| 74 window_for_next_created_browser_ = NULL; | |
| 75 created_browsers_.push_back(browser); | |
| 76 return browser; | |
| 77 } | |
| 78 | |
| 79 private: | 37 private: |
| 80 BrowserWindow* window_for_next_created_browser_; | |
| 81 std::vector<Browser*> created_browsers_; | |
| 82 | |
| 83 DISALLOW_COPY_AND_ASSIGN(TestTabContentsDelegate); | 38 DISALLOW_COPY_AND_ASSIGN(TestTabContentsDelegate); |
| 84 }; | 39 }; |
| 85 | 40 |
| 86 class HtmlDialogTabContentsDelegateTest : public BrowserWithTestWindowTest { | 41 class HtmlDialogTabContentsDelegateTest : public BrowserWithTestWindowTest { |
| 87 public: | 42 public: |
| 88 virtual void SetUp() { | 43 virtual void SetUp() { |
| 89 BrowserWithTestWindowTest::SetUp(); | 44 BrowserWithTestWindowTest::SetUp(); |
| 90 test_tab_contents_delegate_.reset(new TestTabContentsDelegate(profile())); | 45 test_tab_contents_delegate_.reset(new TestTabContentsDelegate(profile())); |
| 91 } | 46 } |
| 92 | 47 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 117 // there's http://code.google.com/p/chromium/issues/detail?id=24885 on | 72 // there's http://code.google.com/p/chromium/issues/detail?id=24885 on |
| 118 // death tests on Windows so we simply don't call it. | 73 // death tests on Windows so we simply don't call it. |
| 119 test_tab_contents_delegate_->UpdateTargetURL(NULL, GURL()); | 74 test_tab_contents_delegate_->UpdateTargetURL(NULL, GURL()); |
| 120 test_tab_contents_delegate_->MoveContents(NULL, gfx::Rect()); | 75 test_tab_contents_delegate_->MoveContents(NULL, gfx::Rect()); |
| 121 test_tab_contents_delegate_->ToolbarSizeChanged(NULL, false); | 76 test_tab_contents_delegate_->ToolbarSizeChanged(NULL, false); |
| 122 EXPECT_EQ(0, browser()->tab_count()); | 77 EXPECT_EQ(0, browser()->tab_count()); |
| 123 EXPECT_EQ(1U, BrowserList::size()); | 78 EXPECT_EQ(1U, BrowserList::size()); |
| 124 } | 79 } |
| 125 | 80 |
| 126 TEST_F(HtmlDialogTabContentsDelegateTest, OpenURLFromTabTest) { | 81 TEST_F(HtmlDialogTabContentsDelegateTest, OpenURLFromTabTest) { |
| 127 MockTestBrowserWindow* window = new MockTestBrowserWindow(); | |
| 128 EXPECT_CALL(*window, Show()).Times(1); | |
| 129 test_tab_contents_delegate_->SetWindowForNextCreatedBrowser(window); | |
| 130 | |
| 131 test_tab_contents_delegate_->OpenURLFromTab( | 82 test_tab_contents_delegate_->OpenURLFromTab( |
| 132 NULL, GURL(chrome::kAboutBlankURL), GURL(), | 83 NULL, GURL(chrome::kAboutBlankURL), GURL(), |
| 133 NEW_FOREGROUND_TAB, PageTransition::LINK); | 84 NEW_FOREGROUND_TAB, PageTransition::LINK); |
| 134 EXPECT_EQ(0, browser()->tab_count()); | 85 // This should create a new foreground tab in the existing browser. |
| 135 EXPECT_EQ(2U, BrowserList::size()); | 86 EXPECT_EQ(1, browser()->tab_count()); |
| 87 EXPECT_EQ(1U, BrowserList::size()); |
| 136 } | 88 } |
| 137 | 89 |
| 138 TEST_F(HtmlDialogTabContentsDelegateTest, AddNewContentsTest) { | 90 TEST_F(HtmlDialogTabContentsDelegateTest, AddNewContentsForegroundTabTest) { |
| 139 MockTestBrowserWindow* window = new MockTestBrowserWindow(); | |
| 140 EXPECT_CALL(*window, Show()).Times(1); | |
| 141 test_tab_contents_delegate_->SetWindowForNextCreatedBrowser(window); | |
| 142 | |
| 143 TabContents* contents = | 91 TabContents* contents = |
| 144 new TabContents(profile(), NULL, MSG_ROUTING_NONE, NULL, NULL); | 92 new TabContents(profile(), NULL, MSG_ROUTING_NONE, NULL, NULL); |
| 145 test_tab_contents_delegate_->AddNewContents( | 93 test_tab_contents_delegate_->AddNewContents( |
| 146 NULL, contents, NEW_FOREGROUND_TAB, gfx::Rect(), false); | 94 NULL, contents, NEW_FOREGROUND_TAB, gfx::Rect(), false); |
| 147 EXPECT_EQ(0, browser()->tab_count()); | 95 // This should create a new foreground tab in the existing browser. |
| 148 EXPECT_EQ(2U, BrowserList::size()); | 96 EXPECT_EQ(1, browser()->tab_count()); |
| 97 EXPECT_EQ(1U, BrowserList::size()); |
| 149 } | 98 } |
| 150 | 99 |
| 151 TEST_F(HtmlDialogTabContentsDelegateTest, DetachTest) { | 100 TEST_F(HtmlDialogTabContentsDelegateTest, DetachTest) { |
| 152 EXPECT_EQ(profile(), test_tab_contents_delegate_->profile()); | 101 EXPECT_EQ(profile(), test_tab_contents_delegate_->profile()); |
| 153 test_tab_contents_delegate_->Detach(); | 102 test_tab_contents_delegate_->Detach(); |
| 154 EXPECT_EQ(NULL, test_tab_contents_delegate_->profile()); | 103 EXPECT_EQ(NULL, test_tab_contents_delegate_->profile()); |
| 155 // Now, none of the following calls should do anything. | 104 // Now, none of the following calls should do anything. |
| 156 test_tab_contents_delegate_->OpenURLFromTab( | 105 test_tab_contents_delegate_->OpenURLFromTab( |
| 157 NULL, GURL(chrome::kAboutBlankURL), GURL(), | 106 NULL, GURL(chrome::kAboutBlankURL), GURL(), |
| 158 NEW_FOREGROUND_TAB, PageTransition::LINK); | 107 NEW_FOREGROUND_TAB, PageTransition::LINK); |
| 159 test_tab_contents_delegate_->AddNewContents(NULL, NULL, NEW_FOREGROUND_TAB, | 108 test_tab_contents_delegate_->AddNewContents(NULL, NULL, NEW_FOREGROUND_TAB, |
| 160 gfx::Rect(), false); | 109 gfx::Rect(), false); |
| 161 EXPECT_EQ(0, browser()->tab_count()); | 110 EXPECT_EQ(0, browser()->tab_count()); |
| 162 EXPECT_EQ(1U, BrowserList::size()); | 111 EXPECT_EQ(1U, BrowserList::size()); |
| 163 } | 112 } |
| 164 | 113 |
| 165 } // namespace | 114 } // namespace |
| 166 | |
| OLD | NEW |