Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1776)

Side by Side Diff: chrome/browser/printing/print_preview_tab_controller_browsertest.cc

Issue 8136027: Print Preview: Make print preview tab modal. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix flaky browser tests Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698