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" | |
6 #include "chrome/browser/printing/print_preview_tab_controller.h" | 5 #include "chrome/browser/printing/print_preview_tab_controller.h" |
7 #include "chrome/browser/ui/browser.h" | 6 #include "chrome/browser/ui/browser.h" |
8 #include "chrome/browser/ui/browser_list.h" | 7 #include "chrome/browser/ui/browser_list.h" |
9 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 8 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
10 #include "chrome/common/chrome_switches.h" | |
11 #include "chrome/common/url_constants.h" | 9 #include "chrome/common/url_constants.h" |
12 #include "chrome/test/base/in_process_browser_test.h" | 10 #include "chrome/test/base/in_process_browser_test.h" |
13 #include "chrome/test/base/ui_test_utils.h" | 11 #include "chrome/test/base/ui_test_utils.h" |
14 #include "content/browser/tab_contents/tab_contents.h" | 12 #include "content/browser/tab_contents/tab_contents.h" |
15 #include "content/browser/tab_contents/tab_contents_observer.h" | |
16 #include "content/public/browser/notification_service.h" | |
17 #include "content/public/browser/notification_types.h" | |
18 #include "googleurl/src/gurl.h" | 13 #include "googleurl/src/gurl.h" |
19 | 14 |
20 namespace { | 15 namespace { |
21 | 16 |
22 class PrintPreviewTabControllerBrowserTest : public InProcessBrowserTest { | 17 typedef InProcessBrowserTest PrintPreviewTabControllerBrowserTest; |
23 public: | |
24 PrintPreviewTabControllerBrowserTest() {} | |
25 virtual ~PrintPreviewTabControllerBrowserTest() {} | |
26 | 18 |
27 virtual void SetUpCommandLine(CommandLine* command_line) { | 19 // Test to verify that when a preview tab navigates, we can create a new print |
28 command_line->AppendSwitch(switches::kEnablePrintPreview); | 20 // preview tab for both initiator tab and new preview tab contents. |
29 } | 21 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, |
30 }; | 22 NavigateFromPrintPreviewTab) { |
| 23 ASSERT_TRUE(browser()); |
| 24 BrowserList::SetLastActive(browser()); |
| 25 ASSERT_TRUE(BrowserList::GetLastActive()); |
31 | 26 |
32 class TabDestroyedObserver : public TabContentsObserver { | 27 // Lets start with one window with one tab. |
33 public: | 28 EXPECT_EQ(1u, BrowserList::size()); |
34 explicit TabDestroyedObserver(TabContents* contents) | 29 EXPECT_EQ(1, browser()->tab_count()); |
35 : TabContentsObserver(contents), | |
36 tab_destroyed_(false) { | |
37 } | |
38 virtual ~TabDestroyedObserver() {} | |
39 | 30 |
40 bool tab_destroyed() { return tab_destroyed_; } | 31 // Create a reference to initiator tab contents. |
| 32 TabContentsWrapper* initiator_tab = |
| 33 browser()->GetSelectedTabContentsWrapper(); |
| 34 ASSERT_TRUE(initiator_tab); |
41 | 35 |
42 private: | 36 scoped_refptr<printing::PrintPreviewTabController> |
43 virtual void TabContentsDestroyed(TabContents* tab) { | 37 tab_controller(new printing::PrintPreviewTabController()); |
44 tab_destroyed_ = true; | 38 ASSERT_TRUE(tab_controller); |
45 } | |
46 | 39 |
47 bool tab_destroyed_; | 40 // Get the preview tab for initiator tab. |
48 }; | 41 TabContentsWrapper* preview_tab = |
| 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 } |
49 | 69 |
50 // Test to verify that when a initiator tab navigates, we can create a new | 70 // Test to verify that when a initiator tab navigates, we can create a new |
51 // preview tab for the new tab contents. | 71 // preview tab for the new tab contents. But we cannot create a preview tab for |
| 72 // the old preview tab. |
52 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, | 73 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, |
53 NavigateFromInitiatorTab) { | 74 NavigateFromInitiatorTab) { |
54 ASSERT_TRUE(browser()); | 75 ASSERT_TRUE(browser()); |
55 BrowserList::SetLastActive(browser()); | 76 BrowserList::SetLastActive(browser()); |
56 ASSERT_TRUE(BrowserList::GetLastActive()); | 77 ASSERT_TRUE(BrowserList::GetLastActive()); |
57 | 78 |
58 // Lets start with one window with one tab. | 79 // Lets start with one window with one tab. |
59 EXPECT_EQ(1u, BrowserList::size()); | 80 EXPECT_EQ(1u, BrowserList::size()); |
60 EXPECT_EQ(1, browser()->tab_count()); | 81 EXPECT_EQ(1, browser()->tab_count()); |
61 | 82 |
62 // Create a reference to initiator tab contents. | 83 // Create a reference to initiator tab contents. |
63 TabContentsWrapper* initiator_tab = | 84 TabContentsWrapper* initiator_tab = |
64 browser()->GetSelectedTabContentsWrapper(); | 85 browser()->GetSelectedTabContentsWrapper(); |
65 ASSERT_TRUE(initiator_tab); | 86 ASSERT_TRUE(initiator_tab); |
66 | 87 |
67 printing::PrintPreviewTabController* tab_controller = | 88 scoped_refptr<printing::PrintPreviewTabController> |
68 printing::PrintPreviewTabController::GetInstance(); | 89 tab_controller(new printing::PrintPreviewTabController()); |
69 ASSERT_TRUE(tab_controller); | 90 ASSERT_TRUE(tab_controller); |
70 | 91 |
71 // Get the preview tab for initiator tab. | 92 // Get the preview tab for initiator tab. |
72 TabContentsWrapper* preview_tab = | 93 TabContentsWrapper* preview_tab = |
73 tab_controller->GetOrCreatePreviewTab(initiator_tab); | 94 tab_controller->GetOrCreatePreviewTab(initiator_tab); |
74 | 95 |
75 // New print preview tab is created. | 96 // New print preview tab is created. Current focus is on preview tab. |
76 EXPECT_EQ(1, browser()->tab_count()); | 97 EXPECT_EQ(2, browser()->tab_count()); |
77 ASSERT_TRUE(preview_tab); | 98 EXPECT_NE(initiator_tab, preview_tab); |
78 ASSERT_NE(initiator_tab, preview_tab); | |
79 TabDestroyedObserver observer(preview_tab->tab_contents()); | |
80 | 99 |
81 // Navigate in the initiator tab. | 100 // Activate initiator tab. |
| 101 browser()->ActivateTabAt(0, true); |
82 GURL url(chrome::kChromeUINewTabURL); | 102 GURL url(chrome::kChromeUINewTabURL); |
83 ui_test_utils::NavigateToURL(browser(), url); | 103 ui_test_utils::NavigateToURL(browser(), url); |
84 | 104 |
85 ASSERT_TRUE(observer.tab_destroyed()); | |
86 | |
87 // Get the print preview tab for initiator tab. | 105 // Get the print preview tab for initiator tab. |
88 TabContentsWrapper* new_preview_tab = | 106 TabContentsWrapper* new_preview_tab = |
89 tab_controller->GetOrCreatePreviewTab(initiator_tab); | 107 tab_controller->GetOrCreatePreviewTab(initiator_tab); |
90 | 108 |
91 // New preview tab is created. | 109 // New preview tab is created. |
92 EXPECT_EQ(1, browser()->tab_count()); | 110 EXPECT_EQ(3, browser()->tab_count()); |
93 EXPECT_TRUE(new_preview_tab); | 111 EXPECT_NE(new_preview_tab, 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); |
94 } | 120 } |
95 | 121 |
96 // Test to verify that after reloading the initiator tab, it creates a new | 122 // Test to verify that even after reloading initiator tab and preview tab, |
97 // print preview tab. | 123 // their association exists. |
98 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, | 124 IN_PROC_BROWSER_TEST_F(PrintPreviewTabControllerBrowserTest, |
99 ReloadInitiatorTab) { | 125 ReloadInitiatorTabAndPreviewTab) { |
100 ASSERT_TRUE(browser()); | 126 ASSERT_TRUE(browser()); |
101 BrowserList::SetLastActive(browser()); | 127 BrowserList::SetLastActive(browser()); |
102 ASSERT_TRUE(BrowserList::GetLastActive()); | 128 ASSERT_TRUE(BrowserList::GetLastActive()); |
103 | 129 |
104 // Lets start with one window with one tab. | 130 // Lets start with one window with one tab. |
105 EXPECT_EQ(1u, BrowserList::size()); | 131 EXPECT_EQ(1u, BrowserList::size()); |
106 EXPECT_EQ(1, browser()->tab_count()); | 132 EXPECT_EQ(1, browser()->tab_count()); |
107 | 133 |
108 // Create a reference to initiator tab contents. | 134 // Create a reference to initiator tab contents. |
109 TabContentsWrapper* initiator_tab = | 135 TabContentsWrapper* initiator_tab = |
110 browser()->GetSelectedTabContentsWrapper(); | 136 browser()->GetSelectedTabContentsWrapper(); |
111 ASSERT_TRUE(initiator_tab); | 137 ASSERT_TRUE(initiator_tab); |
112 | 138 |
113 printing::PrintPreviewTabController* tab_controller = | 139 scoped_refptr<printing::PrintPreviewTabController> |
114 printing::PrintPreviewTabController::GetInstance(); | 140 tab_controller(new printing::PrintPreviewTabController()); |
115 ASSERT_TRUE(tab_controller); | 141 ASSERT_TRUE(tab_controller); |
116 | 142 |
117 // Get the preview tab for initiator tab. | 143 // Get the preview tab for initiator tab. |
118 TabContentsWrapper* preview_tab = | 144 TabContentsWrapper* preview_tab = |
119 tab_controller->GetOrCreatePreviewTab(initiator_tab); | 145 tab_controller->GetOrCreatePreviewTab(initiator_tab); |
120 | 146 |
121 // New print preview tab is created. | 147 // New print preview tab is created. Current focus is on preview tab. |
122 EXPECT_EQ(1, browser()->tab_count()); | 148 EXPECT_EQ(2, browser()->tab_count()); |
123 ASSERT_TRUE(preview_tab); | 149 EXPECT_NE(initiator_tab, preview_tab); |
124 ASSERT_NE(initiator_tab, preview_tab); | |
125 TabDestroyedObserver tab_destroyed_observer(preview_tab->tab_contents()); | |
126 | 150 |
127 // Reload the initiator tab. | 151 // Activate initiator tab and reload. |
128 ui_test_utils::WindowedNotificationObserver notification_observer( | 152 browser()->ActivateTabAt(0, true); |
129 content::NOTIFICATION_LOAD_STOP, | |
130 content::NotificationService::AllSources()); | |
131 browser()->Reload(CURRENT_TAB); | 153 browser()->Reload(CURRENT_TAB); |
132 notification_observer.Wait(); | |
133 | |
134 ASSERT_TRUE(tab_destroyed_observer.tab_destroyed()); | |
135 | 154 |
136 // Get the print preview tab for initiator tab. | 155 // Get the print preview tab for initiator tab. |
137 TabContentsWrapper* new_preview_tab = | 156 TabContentsWrapper* new_preview_tab = |
138 tab_controller->GetOrCreatePreviewTab(initiator_tab); | 157 tab_controller->GetOrCreatePreviewTab(initiator_tab); |
139 | 158 |
140 EXPECT_EQ(1, browser()->tab_count()); | 159 // Old preview tab is activated. |
141 EXPECT_TRUE(new_preview_tab); | 160 EXPECT_EQ(2, browser()->tab_count()); |
| 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()); |
142 } | 252 } |
143 | 253 |
144 } // namespace | 254 } // namespace |
OLD | NEW |