| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 "base/command_line.h" |
| 5 #include "chrome/browser/printing/print_preview_tab_controller.h" | 6 #include "chrome/browser/printing/print_preview_tab_controller.h" |
| 6 #include "chrome/browser/ui/browser.h" | 7 #include "chrome/browser/ui/browser.h" |
| 7 #include "chrome/browser/ui/browser_list.h" | 8 #include "chrome/browser/ui/browser_list.h" |
| 8 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 9 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 10 #include "chrome/common/chrome_switches.h" |
| 9 #include "chrome/common/url_constants.h" | 11 #include "chrome/common/url_constants.h" |
| 10 #include "chrome/test/base/in_process_browser_test.h" | 12 #include "chrome/test/base/in_process_browser_test.h" |
| 11 #include "chrome/test/base/ui_test_utils.h" | 13 #include "chrome/test/base/ui_test_utils.h" |
| 12 #include "content/browser/tab_contents/tab_contents.h" | 14 #include "content/browser/tab_contents/tab_contents.h" |
| 15 #include "content/browser/tab_contents/tab_contents_observer.h" |
| 13 #include "googleurl/src/gurl.h" | 16 #include "googleurl/src/gurl.h" |
| 14 | 17 |
| 15 namespace { | 18 namespace { |
| 16 | 19 |
| 17 typedef InProcessBrowserTest PrintPreviewTabControllerBrowserTest; | 20 class PrintPreviewTabControllerBrowserTest : public InProcessBrowserTest { |
| 21 public: |
| 22 PrintPreviewTabControllerBrowserTest() {} |
| 23 virtual ~PrintPreviewTabControllerBrowserTest() {} |
| 18 | 24 |
| 19 // Test to verify that when a preview tab navigates, we can create a new print | 25 virtual void SetUpCommandLine(CommandLine* command_line) { |
| 20 // preview tab for both initiator tab and new preview tab contents. | 26 command_line->AppendSwitch(switches::kEnablePrintPreview); |
| 21 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, | 27 } |
| 22 NavigateFromPrintPreviewTab) { | 28 }; |
| 23 ASSERT_TRUE(browser()); | |
| 24 BrowserList::SetLastActive(browser()); | |
| 25 ASSERT_TRUE(BrowserList::GetLastActive()); | |
| 26 | 29 |
| 27 // Lets start with one window with one tab. | 30 class TabDestroyedObserver : public TabContentsObserver { |
| 28 EXPECT_EQ(1u, BrowserList::size()); | 31 public: |
| 29 EXPECT_EQ(1, browser()->tab_count()); | 32 explicit TabDestroyedObserver(TabContents* contents) |
| 33 : TabContentsObserver(contents), |
| 34 tab_destroyed_(false) { |
| 35 } |
| 36 virtual ~TabDestroyedObserver() {} |
| 30 | 37 |
| 31 // Create a reference to initiator tab contents. | 38 bool tab_destroyed() { return tab_destroyed_; } |
| 32 TabContentsWrapper* initiator_tab = | |
| 33 browser()->GetSelectedTabContentsWrapper(); | |
| 34 ASSERT_TRUE(initiator_tab); | |
| 35 | 39 |
| 36 scoped_refptr<printing::PrintPreviewTabController> | 40 private: |
| 37 tab_controller(new printing::PrintPreviewTabController()); | 41 virtual void TabContentsDestroyed(TabContents* tab) { |
| 38 ASSERT_TRUE(tab_controller); | 42 tab_destroyed_ = true; |
| 43 } |
| 39 | 44 |
| 40 // Get the preview tab for initiator tab. | 45 bool tab_destroyed_; |
| 41 TabContentsWrapper* preview_tab = | 46 }; |
| 42 tab_controller->GetOrCreatePreviewTab(initiator_tab); | |
| 43 | |
| 44 // New print preview tab is created. Current focus is on preview tab. | |
| 45 EXPECT_EQ(2, browser()->tab_count()); | |
| 46 EXPECT_NE(initiator_tab, preview_tab); | |
| 47 | |
| 48 GURL url(chrome::kAboutBlankURL); | |
| 49 ui_test_utils::NavigateToURL(browser(), url); | |
| 50 EXPECT_EQ(url, preview_tab->tab_contents()->GetURL()); | |
| 51 | |
| 52 // Get the print preview tab for initiator tab. | |
| 53 TabContentsWrapper* new_preview_tab = | |
| 54 tab_controller->GetOrCreatePreviewTab(initiator_tab); | |
| 55 | |
| 56 // New preview tab is created. | |
| 57 EXPECT_EQ(3, browser()->tab_count()); | |
| 58 EXPECT_NE(new_preview_tab, preview_tab); | |
| 59 | |
| 60 // Get the print preview tab for old preview tab. | |
| 61 TabContentsWrapper* newest_preview_tab = | |
| 62 tab_controller->GetOrCreatePreviewTab(preview_tab); | |
| 63 | |
| 64 // Newest preview tab is created and the previously created preview tab is not | |
| 65 // merely activated. | |
| 66 EXPECT_EQ(4, browser()->tab_count()); | |
| 67 EXPECT_NE(newest_preview_tab, new_preview_tab); | |
| 68 } | |
| 69 | 47 |
| 70 // Test to verify that when a initiator tab navigates, we can create a new | 48 // Test to verify that when a initiator tab navigates, we can create a new |
| 71 // preview tab for the new tab contents. But we cannot create a preview tab for | 49 // preview tab for the new tab contents. |
| 72 // the old preview tab. | |
| 73 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, | 50 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, |
| 74 NavigateFromInitiatorTab) { | 51 NavigateFromInitiatorTab) { |
| 75 ASSERT_TRUE(browser()); | 52 ASSERT_TRUE(browser()); |
| 76 BrowserList::SetLastActive(browser()); | 53 BrowserList::SetLastActive(browser()); |
| 77 ASSERT_TRUE(BrowserList::GetLastActive()); | 54 ASSERT_TRUE(BrowserList::GetLastActive()); |
| 78 | 55 |
| 79 // Lets start with one window with one tab. | 56 // Lets start with one window with one tab. |
| 80 EXPECT_EQ(1u, BrowserList::size()); | 57 EXPECT_EQ(1u, BrowserList::size()); |
| 81 EXPECT_EQ(1, browser()->tab_count()); | 58 EXPECT_EQ(1, browser()->tab_count()); |
| 82 | 59 |
| 83 // Create a reference to initiator tab contents. | 60 // Create a reference to initiator tab contents. |
| 84 TabContentsWrapper* initiator_tab = | 61 TabContentsWrapper* initiator_tab = |
| 85 browser()->GetSelectedTabContentsWrapper(); | 62 browser()->GetSelectedTabContentsWrapper(); |
| 86 ASSERT_TRUE(initiator_tab); | 63 ASSERT_TRUE(initiator_tab); |
| 87 | 64 |
| 88 scoped_refptr<printing::PrintPreviewTabController> | 65 printing::PrintPreviewTabController* tab_controller = |
| 89 tab_controller(new printing::PrintPreviewTabController()); | 66 printing::PrintPreviewTabController::GetInstance(); |
| 90 ASSERT_TRUE(tab_controller); | 67 ASSERT_TRUE(tab_controller); |
| 91 | 68 |
| 92 // Get the preview tab for initiator tab. | 69 // Get the preview tab for initiator tab. |
| 93 TabContentsWrapper* preview_tab = | 70 TabContentsWrapper* preview_tab = |
| 94 tab_controller->GetOrCreatePreviewTab(initiator_tab); | 71 tab_controller->GetOrCreatePreviewTab(initiator_tab); |
| 95 | 72 |
| 96 // New print preview tab is created. Current focus is on preview tab. | 73 // New print preview tab is created. |
| 97 EXPECT_EQ(2, browser()->tab_count()); | 74 EXPECT_EQ(1, browser()->tab_count()); |
| 98 EXPECT_NE(initiator_tab, preview_tab); | 75 ASSERT_TRUE(preview_tab); |
| 76 ASSERT_NE(initiator_tab, preview_tab); |
| 77 TabDestroyedObserver observer(preview_tab->tab_contents()); |
| 99 | 78 |
| 100 // Activate initiator tab. | 79 // Navigate in the initiator tab. |
| 101 browser()->ActivateTabAt(0, true); | |
| 102 GURL url(chrome::kChromeUINewTabURL); | 80 GURL url(chrome::kChromeUINewTabURL); |
| 103 ui_test_utils::NavigateToURL(browser(), url); | 81 ui_test_utils::NavigateToURL(browser(), url); |
| 104 | 82 |
| 83 ASSERT_TRUE(observer.tab_destroyed()); |
| 84 |
| 105 // Get the print preview tab for initiator tab. | 85 // Get the print preview tab for initiator tab. |
| 106 TabContentsWrapper* new_preview_tab = | 86 TabContentsWrapper* new_preview_tab = |
| 107 tab_controller->GetOrCreatePreviewTab(initiator_tab); | 87 tab_controller->GetOrCreatePreviewTab(initiator_tab); |
| 108 | 88 |
| 109 // New preview tab is created. | 89 // New preview tab is created. |
| 110 EXPECT_EQ(3, browser()->tab_count()); | 90 EXPECT_EQ(1, browser()->tab_count()); |
| 111 EXPECT_NE(new_preview_tab, preview_tab); | 91 EXPECT_TRUE(new_preview_tab); |
| 112 | |
| 113 // Get the print preview tab for old preview tab. | |
| 114 TabContentsWrapper* newest_preview_tab = | |
| 115 tab_controller->GetOrCreatePreviewTab(preview_tab); | |
| 116 | |
| 117 // Make sure preview tab is not created for |preview_tab|. | |
| 118 EXPECT_EQ(3, browser()->tab_count()); | |
| 119 EXPECT_EQ(newest_preview_tab, preview_tab); | |
| 120 } | 92 } |
| 121 | 93 |
| 122 // Test to verify that even after reloading initiator tab and preview tab, | 94 // Test to verify that after reloading the initiator tab, it creates a new |
| 123 // their association exists. | 95 // print preview tab. |
| 124 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, | 96 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, |
| 125 ReloadInitiatorTabAndPreviewTab) { | 97 ReloadInitiatorTab) { |
| 126 ASSERT_TRUE(browser()); | 98 ASSERT_TRUE(browser()); |
| 127 BrowserList::SetLastActive(browser()); | 99 BrowserList::SetLastActive(browser()); |
| 128 ASSERT_TRUE(BrowserList::GetLastActive()); | 100 ASSERT_TRUE(BrowserList::GetLastActive()); |
| 129 | 101 |
| 130 // Lets start with one window with one tab. | 102 // Lets start with one window with one tab. |
| 131 EXPECT_EQ(1u, BrowserList::size()); | 103 EXPECT_EQ(1u, BrowserList::size()); |
| 132 EXPECT_EQ(1, browser()->tab_count()); | 104 EXPECT_EQ(1, browser()->tab_count()); |
| 133 | 105 |
| 134 // Create a reference to initiator tab contents. | 106 // Create a reference to initiator tab contents. |
| 135 TabContentsWrapper* initiator_tab = | 107 TabContentsWrapper* initiator_tab = |
| 136 browser()->GetSelectedTabContentsWrapper(); | 108 browser()->GetSelectedTabContentsWrapper(); |
| 137 ASSERT_TRUE(initiator_tab); | 109 ASSERT_TRUE(initiator_tab); |
| 138 | 110 |
| 139 scoped_refptr<printing::PrintPreviewTabController> | 111 printing::PrintPreviewTabController* tab_controller = |
| 140 tab_controller(new printing::PrintPreviewTabController()); | 112 printing::PrintPreviewTabController::GetInstance(); |
| 141 ASSERT_TRUE(tab_controller); | 113 ASSERT_TRUE(tab_controller); |
| 142 | 114 |
| 143 // Get the preview tab for initiator tab. | 115 // Get the preview tab for initiator tab. |
| 144 TabContentsWrapper* preview_tab = | 116 TabContentsWrapper* preview_tab = |
| 145 tab_controller->GetOrCreatePreviewTab(initiator_tab); | 117 tab_controller->GetOrCreatePreviewTab(initiator_tab); |
| 146 | 118 |
| 147 // New print preview tab is created. Current focus is on preview tab. | 119 // New print preview tab is created. |
| 148 EXPECT_EQ(2, browser()->tab_count()); | 120 EXPECT_EQ(1, browser()->tab_count()); |
| 149 EXPECT_NE(initiator_tab, preview_tab); | 121 ASSERT_TRUE(preview_tab); |
| 122 ASSERT_NE(initiator_tab, preview_tab); |
| 123 TabDestroyedObserver observer(preview_tab->tab_contents()); |
| 150 | 124 |
| 151 // Activate initiator tab and reload. | 125 // Reload the initiator tab. |
| 152 browser()->ActivateTabAt(0, true); | |
| 153 browser()->Reload(CURRENT_TAB); | 126 browser()->Reload(CURRENT_TAB); |
| 127 ui_test_utils::WaitForNavigation(&initiator_tab->controller()); |
| 128 |
| 129 ASSERT_TRUE(observer.tab_destroyed()); |
| 154 | 130 |
| 155 // Get the print preview tab for initiator tab. | 131 // Get the print preview tab for initiator tab. |
| 156 TabContentsWrapper* new_preview_tab = | 132 TabContentsWrapper* new_preview_tab = |
| 157 tab_controller->GetOrCreatePreviewTab(initiator_tab); | 133 tab_controller->GetOrCreatePreviewTab(initiator_tab); |
| 158 | 134 |
| 159 // Old preview tab is activated. | 135 EXPECT_EQ(1, browser()->tab_count()); |
| 160 EXPECT_EQ(2, browser()->tab_count()); | 136 EXPECT_TRUE(new_preview_tab); |
| 161 EXPECT_EQ(new_preview_tab, preview_tab); | |
| 162 | |
| 163 // Reload preview tab. | |
| 164 browser()->Reload(CURRENT_TAB); | |
| 165 // Get the print preview tab for old preview tab. | |
| 166 TabContentsWrapper* newest_preview_tab = | |
| 167 tab_controller->GetOrCreatePreviewTab(preview_tab); | |
| 168 | |
| 169 // Make sure new preview tab is not created for |preview_tab|. | |
| 170 EXPECT_EQ(2, browser()->tab_count()); | |
| 171 EXPECT_EQ(newest_preview_tab, preview_tab); | |
| 172 } | |
| 173 | |
| 174 // Test that print preview tabs are placed correctly. | |
| 175 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, | |
| 176 OpenPreviewTabInCorrectPosition) { | |
| 177 const int kTabCount = 4; | |
| 178 // Create kTabCount - 1 tabs since we start with 1 tab already. | |
| 179 for (int i = 0; i < kTabCount - 1; ++i) { | |
| 180 browser::NavigateParams p(browser(), GURL(), content::PAGE_TRANSITION_LINK); | |
| 181 p.disposition = NEW_FOREGROUND_TAB; | |
| 182 browser::Navigate(&p); | |
| 183 } | |
| 184 EXPECT_EQ(kTabCount, browser()->tab_count()); | |
| 185 | |
| 186 // Create a print preview tab. | |
| 187 scoped_refptr<printing::PrintPreviewTabController> | |
| 188 tab_controller(new printing::PrintPreviewTabController()); | |
| 189 ASSERT_TRUE(tab_controller); | |
| 190 | |
| 191 const int kInitiatorTabIndex = 1; | |
| 192 TabContentsWrapper* initiator_tab = | |
| 193 browser()->GetTabContentsWrapperAt(kInitiatorTabIndex); | |
| 194 ASSERT_TRUE(initiator_tab); | |
| 195 TabContentsWrapper* preview_tab = | |
| 196 tab_controller->GetOrCreatePreviewTab(initiator_tab); | |
| 197 EXPECT_TRUE(preview_tab); | |
| 198 | |
| 199 // Check the preview tab's location. | |
| 200 EXPECT_EQ(preview_tab, | |
| 201 browser()->GetTabContentsWrapperAt(kInitiatorTabIndex + 1)); | |
| 202 EXPECT_EQ(preview_tab, browser()->GetSelectedTabContentsWrapper()); | |
| 203 } | |
| 204 | |
| 205 // Test that print preview tabs created by pop-up windows are placed correctly. | |
| 206 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, | |
| 207 OpenPreviewTabFromPopupInCorrectPosition) { | |
| 208 const int kTabCount = 4; | |
| 209 // Create kTabCount - 1 tabs since we start with 1 tab already. | |
| 210 for (int i = 0; i < kTabCount - 1; ++i) { | |
| 211 browser::NavigateParams p(browser(), GURL(), content::PAGE_TRANSITION_LINK); | |
| 212 p.disposition = NEW_FOREGROUND_TAB; | |
| 213 browser::Navigate(&p); | |
| 214 } | |
| 215 EXPECT_EQ(kTabCount, browser()->tab_count()); | |
| 216 | |
| 217 // Create a popup | |
| 218 browser::NavigateParams p(browser(), GURL(), content::PAGE_TRANSITION_LINK); | |
| 219 p.disposition = NEW_POPUP; | |
| 220 ui_test_utils::NavigateToURL(&p); | |
| 221 | |
| 222 | |
| 223 #if defined(OS_CHROMEOS) | |
| 224 // Navigate() should have opened a new tab on CrOS. | |
| 225 EXPECT_EQ(browser(), p.browser); | |
| 226 EXPECT_EQ(Browser::TYPE_TABBED, p.browser->type()); | |
| 227 #else | |
| 228 // Navigate() should have opened a new popup window. | |
| 229 EXPECT_NE(browser(), p.browser); | |
| 230 EXPECT_EQ(Browser::TYPE_POPUP, p.browser->type()); | |
| 231 #endif | |
| 232 ASSERT_TRUE(p.target_contents); | |
| 233 | |
| 234 // Create a print preview tab. | |
| 235 scoped_refptr<printing::PrintPreviewTabController> | |
| 236 tab_controller(new printing::PrintPreviewTabController()); | |
| 237 ASSERT_TRUE(tab_controller); | |
| 238 | |
| 239 TabContentsWrapper* preview_tab = | |
| 240 tab_controller->GetOrCreatePreviewTab(p.target_contents); | |
| 241 EXPECT_TRUE(preview_tab); | |
| 242 | |
| 243 int tab_position = kTabCount; | |
| 244 #if defined(OS_CHROMEOS) | |
| 245 // Increment position since CrOS opened a new tab instead of a popup. | |
| 246 tab_position++; | |
| 247 #endif | |
| 248 | |
| 249 // Check the preview tab's location. | |
| 250 EXPECT_EQ(preview_tab, browser()->GetTabContentsWrapperAt(tab_position)); | |
| 251 EXPECT_EQ(preview_tab, browser()->GetSelectedTabContentsWrapper()); | |
| 252 } | 137 } |
| 253 | 138 |
| 254 } // namespace | 139 } // namespace |
| OLD | NEW |