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

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

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

Powered by Google App Engine
This is Rietveld 408576698