OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/printing/print_preview_dialog_controller.h" | 5 #include "chrome/browser/printing/print_preview_dialog_controller.h" |
6 #include "chrome/browser/printing/print_preview_test.h" | 6 #include "chrome/browser/printing/print_preview_test.h" |
7 #include "chrome/browser/printing/print_view_manager.h" | 7 #include "chrome/browser/printing/print_view_manager.h" |
8 #include "chrome/browser/ui/browser_commands.h" | 8 #include "chrome/browser/ui/browser_commands.h" |
9 #include "chrome/browser/ui/browser_finder.h" | 9 #include "chrome/browser/ui/browser_finder.h" |
10 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
11 #include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" | 11 #include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" |
12 #include "content/public/browser/navigation_details.h" | 12 #include "content/public/browser/navigation_details.h" |
13 #include "content/public/browser/notification_service.h" | 13 #include "content/public/browser/notification_service.h" |
14 #include "content/public/browser/notification_types.h" | 14 #include "content/public/browser/notification_types.h" |
15 #include "content/public/common/url_constants.h" | 15 #include "content/public/common/url_constants.h" |
16 | 16 |
17 using content::WebContents; | 17 using content::WebContents; |
18 | 18 |
19 // Test crashes on Aura due to initiator tab's native view having no parent. | 19 // Test crashes on Aura due to initiator's native view having no parent. |
20 // http://crbug.com/104284 | 20 // http://crbug.com/104284 |
21 #if defined(USE_AURA) | 21 #if defined(USE_AURA) |
22 #define MAYBE_GetOrCreatePreviewDialog DISABLED_GetOrCreatePreviewDialog | 22 #define MAYBE_GetOrCreatePreviewDialog DISABLED_GetOrCreatePreviewDialog |
23 #define MAYBE_MultiplePreviewDialogs DISABLED_MultiplePreviewDialogs | 23 #define MAYBE_MultiplePreviewDialogs DISABLED_MultiplePreviewDialogs |
24 #define MAYBE_ClearInitiatorTabDetails DISABLED_ClearInitiatorTabDetails | 24 #define MAYBE_ClearInitiatorDetails DISABLED_ClearInitiatorDetails |
25 #else | 25 #else |
26 #define MAYBE_GetOrCreatePreviewDialog GetOrCreatePreviewDialog | 26 #define MAYBE_GetOrCreatePreviewDialog GetOrCreatePreviewDialog |
27 #define MAYBE_MultiplePreviewDialogs MultiplePreviewDialogs | 27 #define MAYBE_MultiplePreviewDialogs MultiplePreviewDialogs |
28 #define MAYBE_ClearInitiatorTabDetails ClearInitiatorTabDetails | 28 #define MAYBE_ClearInitiatorDetails ClearInitiatorDetails |
29 #endif | 29 #endif |
30 | 30 |
31 namespace printing { | 31 namespace printing { |
32 | 32 |
33 typedef PrintPreviewTest PrintPreviewDialogControllerUnitTest; | 33 typedef PrintPreviewTest PrintPreviewDialogControllerUnitTest; |
34 | 34 |
35 // Create/Get a preview dialog for initiator tab. | 35 // Create/Get a preview dialog for initiator. |
36 TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_GetOrCreatePreviewDialog) { | 36 TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_GetOrCreatePreviewDialog) { |
37 // Lets start with one window with one tab. | 37 // Lets start with one window with one tab. |
38 EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); | 38 EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); |
39 EXPECT_EQ(0, browser()->tab_strip_model()->count()); | 39 EXPECT_EQ(0, browser()->tab_strip_model()->count()); |
40 chrome::NewTab(browser()); | 40 chrome::NewTab(browser()); |
41 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 41 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
42 | 42 |
43 // Create a reference to initiator tab contents. | 43 // Create a reference to initiator contents. |
44 WebContents* initiator_tab = | 44 WebContents* initiator = browser()->tab_strip_model()->GetActiveWebContents(); |
45 browser()->tab_strip_model()->GetActiveWebContents(); | |
46 | 45 |
47 PrintPreviewDialogController* dialog_controller = | 46 PrintPreviewDialogController* dialog_controller = |
48 PrintPreviewDialogController::GetInstance(); | 47 PrintPreviewDialogController::GetInstance(); |
49 ASSERT_TRUE(dialog_controller); | 48 ASSERT_TRUE(dialog_controller); |
50 | 49 |
51 // Get the preview dialog for initiator tab. | 50 // Get the preview dialog for initiator. |
52 PrintViewManager::FromWebContents(initiator_tab)->PrintPreviewNow(false); | 51 PrintViewManager::FromWebContents(initiator)->PrintPreviewNow(false); |
53 WebContents* preview_dialog = | 52 WebContents* preview_dialog = |
54 dialog_controller->GetOrCreatePreviewDialog(initiator_tab); | 53 dialog_controller->GetOrCreatePreviewDialog(initiator); |
55 | 54 |
56 // New print preview dialog is a constrained window, so the number of tabs is | 55 // New print preview dialog is a constrained window, so the number of tabs is |
57 // still 1. | 56 // still 1. |
58 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 57 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
59 EXPECT_NE(initiator_tab, preview_dialog); | 58 EXPECT_NE(initiator, preview_dialog); |
60 | 59 |
61 // Get the print preview dialog for the same initiator tab. | 60 // Get the print preview dialog for the same initiator. |
62 WebContents* new_preview_dialog = | 61 WebContents* new_preview_dialog = |
63 dialog_controller->GetOrCreatePreviewDialog(initiator_tab); | 62 dialog_controller->GetOrCreatePreviewDialog(initiator); |
64 | 63 |
65 // Preview dialog already exists. Tab count remains the same. | 64 // Preview dialog already exists. Tab count remains the same. |
66 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 65 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
67 | 66 |
68 // 1:1 relationship between initiator tab and preview dialog. | 67 // 1:1 relationship between initiator and preview dialog. |
69 EXPECT_EQ(new_preview_dialog, preview_dialog); | 68 EXPECT_EQ(new_preview_dialog, preview_dialog); |
70 } | 69 } |
71 | 70 |
72 // Tests multiple print preview dialogs exist in the same browser for | 71 // Tests multiple print preview dialogs exist in the same browser for different |
73 // different initiator tabs. If a preview dialog already exists for an | 72 // initiators. If a preview dialog already exists for an initiator, that |
74 // initiator tab, that initiator tab gets focused. | 73 // initiator gets focused. |
75 TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_MultiplePreviewDialogs) { | 74 TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_MultiplePreviewDialogs) { |
76 // Lets start with one window and two tabs. | 75 // Lets start with one window and two tabs. |
77 EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); | 76 EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); |
78 TabStripModel* tab_strip_model = browser()->tab_strip_model(); | 77 TabStripModel* tab_strip_model = browser()->tab_strip_model(); |
79 ASSERT_TRUE(tab_strip_model); | 78 ASSERT_TRUE(tab_strip_model); |
80 | 79 |
81 EXPECT_EQ(0, tab_strip_model->count()); | 80 EXPECT_EQ(0, tab_strip_model->count()); |
82 | 81 |
83 // Create some new initiator tabs. | 82 // Create some new initiators. |
84 chrome::NewTab(browser()); | 83 chrome::NewTab(browser()); |
85 WebContents* web_contents_1 = tab_strip_model->GetActiveWebContents(); | 84 WebContents* web_contents_1 = tab_strip_model->GetActiveWebContents(); |
86 ASSERT_TRUE(web_contents_1); | 85 ASSERT_TRUE(web_contents_1); |
87 | 86 |
88 chrome::NewTab(browser()); | 87 chrome::NewTab(browser()); |
89 WebContents* web_contents_2 = tab_strip_model->GetActiveWebContents(); | 88 WebContents* web_contents_2 = tab_strip_model->GetActiveWebContents(); |
90 ASSERT_TRUE(web_contents_2); | 89 ASSERT_TRUE(web_contents_2); |
91 EXPECT_EQ(2, tab_strip_model->count()); | 90 EXPECT_EQ(2, tab_strip_model->count()); |
92 | 91 |
93 PrintPreviewDialogController* dialog_controller = | 92 PrintPreviewDialogController* dialog_controller = |
94 PrintPreviewDialogController::GetInstance(); | 93 PrintPreviewDialogController::GetInstance(); |
95 ASSERT_TRUE(dialog_controller); | 94 ASSERT_TRUE(dialog_controller); |
96 | 95 |
97 // Create preview dialog for |web_contents_1| | 96 // Create preview dialog for |web_contents_1| |
98 PrintViewManager::FromWebContents(web_contents_1)->PrintPreviewNow(false); | 97 PrintViewManager::FromWebContents(web_contents_1)->PrintPreviewNow(false); |
99 WebContents* preview_dialog_1 = | 98 WebContents* preview_dialog_1 = |
100 dialog_controller->GetOrCreatePreviewDialog(web_contents_1); | 99 dialog_controller->GetOrCreatePreviewDialog(web_contents_1); |
101 | 100 |
102 EXPECT_NE(web_contents_1, preview_dialog_1); | 101 EXPECT_NE(web_contents_1, preview_dialog_1); |
103 EXPECT_EQ(2, tab_strip_model->count()); | 102 EXPECT_EQ(2, tab_strip_model->count()); |
104 | 103 |
105 // Create preview dialog for |web_contents_2| | 104 // Create preview dialog for |web_contents_2| |
106 PrintViewManager::FromWebContents(web_contents_2)->PrintPreviewNow(false); | 105 PrintViewManager::FromWebContents(web_contents_2)->PrintPreviewNow(false); |
107 WebContents* preview_dialog_2 = | 106 WebContents* preview_dialog_2 = |
108 dialog_controller->GetOrCreatePreviewDialog(web_contents_2); | 107 dialog_controller->GetOrCreatePreviewDialog(web_contents_2); |
109 | 108 |
110 EXPECT_NE(web_contents_2, preview_dialog_2); | 109 EXPECT_NE(web_contents_2, preview_dialog_2); |
111 EXPECT_NE(preview_dialog_1, preview_dialog_2); | 110 EXPECT_NE(preview_dialog_1, preview_dialog_2); |
112 // 2 initiator tabs and 2 preview dialogs exist in the same browser. | 111 // 2 initiators and 2 preview dialogs exist in the same browser. The preview |
113 // The preview dialogs are constrained in their respective initiator tabs. | 112 // dialogs are constrained in their respective initiators. |
114 EXPECT_EQ(2, tab_strip_model->count()); | 113 EXPECT_EQ(2, tab_strip_model->count()); |
115 | 114 |
116 int tab_1_index = tab_strip_model->GetIndexOfWebContents(web_contents_1); | 115 int tab_1_index = tab_strip_model->GetIndexOfWebContents(web_contents_1); |
117 int tab_2_index = tab_strip_model->GetIndexOfWebContents(web_contents_2); | 116 int tab_2_index = tab_strip_model->GetIndexOfWebContents(web_contents_2); |
118 int preview_dialog_1_index = | 117 int preview_dialog_1_index = |
119 tab_strip_model->GetIndexOfWebContents(preview_dialog_1); | 118 tab_strip_model->GetIndexOfWebContents(preview_dialog_1); |
120 int preview_dialog_2_index = | 119 int preview_dialog_2_index = |
121 tab_strip_model->GetIndexOfWebContents(preview_dialog_2); | 120 tab_strip_model->GetIndexOfWebContents(preview_dialog_2); |
122 | 121 |
123 // Constrained dialogs are not in the TabStripModel. | 122 // Constrained dialogs are not in the TabStripModel. |
124 EXPECT_EQ(-1, preview_dialog_1_index); | 123 EXPECT_EQ(-1, preview_dialog_1_index); |
125 EXPECT_EQ(-1, preview_dialog_2_index); | 124 EXPECT_EQ(-1, preview_dialog_2_index); |
126 | 125 |
127 // Since |preview_dialog_2_index| was the most recently created dialog, its | 126 // Since |preview_dialog_2_index| was the most recently created dialog, its |
128 // initiator tab should have focus. | 127 // initiator should have focus. |
129 EXPECT_EQ(tab_2_index, tab_strip_model->active_index()); | 128 EXPECT_EQ(tab_2_index, tab_strip_model->active_index()); |
130 | 129 |
131 // When we get the preview dialog for |web_contents_1|, | 130 // When we get the preview dialog for |web_contents_1|, |
132 // |preview_dialog_1| is activated and focused. | 131 // |preview_dialog_1| is activated and focused. |
133 dialog_controller->GetOrCreatePreviewDialog(web_contents_1); | 132 dialog_controller->GetOrCreatePreviewDialog(web_contents_1); |
134 EXPECT_EQ(tab_1_index, tab_strip_model->active_index()); | 133 EXPECT_EQ(tab_1_index, tab_strip_model->active_index()); |
135 } | 134 } |
136 | 135 |
137 // Check clearing the initiator tab details associated with a print preview | 136 // Check clearing the initiator details associated with a print preview dialog |
138 // dialog allows the initiator tab to create another print preview dialog. | 137 // allows the initiator to create another print preview dialog. |
139 TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_ClearInitiatorTabDetails) { | 138 TEST_F(PrintPreviewDialogControllerUnitTest, MAYBE_ClearInitiatorDetails) { |
140 // Lets start with one window with one tab. | 139 // Lets start with one window with one tab. |
141 EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); | 140 EXPECT_EQ(1u, chrome::GetTotalBrowserCount()); |
142 EXPECT_EQ(0, browser()->tab_strip_model()->count()); | 141 EXPECT_EQ(0, browser()->tab_strip_model()->count()); |
143 chrome::NewTab(browser()); | 142 chrome::NewTab(browser()); |
144 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 143 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
145 | 144 |
146 // Create a reference to initiator tab contents. | 145 // Create a reference to initiator contents. |
147 WebContents* initiator_tab = | 146 WebContents* initiator = browser()->tab_strip_model()->GetActiveWebContents(); |
148 browser()->tab_strip_model()->GetActiveWebContents(); | |
149 | 147 |
150 PrintPreviewDialogController* dialog_controller = | 148 PrintPreviewDialogController* dialog_controller = |
151 PrintPreviewDialogController::GetInstance(); | 149 PrintPreviewDialogController::GetInstance(); |
152 ASSERT_TRUE(dialog_controller); | 150 ASSERT_TRUE(dialog_controller); |
153 | 151 |
154 // Get the preview dialog for the initiator tab. | 152 // Get the preview dialog for the initiator. |
155 PrintViewManager::FromWebContents(initiator_tab)->PrintPreviewNow(false); | 153 PrintViewManager::FromWebContents(initiator)->PrintPreviewNow(false); |
156 WebContents* preview_dialog = | 154 WebContents* preview_dialog = |
157 dialog_controller->GetOrCreatePreviewDialog(initiator_tab); | 155 dialog_controller->GetOrCreatePreviewDialog(initiator); |
158 | 156 |
159 // New print preview dialog is a constrained window, so the number of tabs is | 157 // New print preview dialog is a constrained window, so the number of tabs is |
160 // still 1. | 158 // still 1. |
161 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 159 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
162 EXPECT_NE(initiator_tab, preview_dialog); | 160 EXPECT_NE(initiator, preview_dialog); |
163 | 161 |
164 // Clear the initiator tab details associated with the preview dialog. | 162 // Clear the initiator details associated with the preview dialog. |
165 dialog_controller->EraseInitiatorTabInfo(preview_dialog); | 163 dialog_controller->EraseInitiatorInfo(preview_dialog); |
166 | 164 |
167 // Get a new print preview dialog for the initiator tab. | 165 // Get a new print preview dialog for the initiator. |
168 WebContents* new_preview_dialog = | 166 WebContents* new_preview_dialog = |
169 dialog_controller->GetOrCreatePreviewDialog(initiator_tab); | 167 dialog_controller->GetOrCreatePreviewDialog(initiator); |
170 | 168 |
171 // New print preview dialog is a constrained window, so the number of tabs is | 169 // New print preview dialog is a constrained window, so the number of tabs is |
172 // still 1. | 170 // still 1. |
173 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 171 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
174 // Verify a new print preview dialog has been created. | 172 // Verify a new print preview dialog has been created. |
175 EXPECT_NE(new_preview_dialog, preview_dialog); | 173 EXPECT_NE(new_preview_dialog, preview_dialog); |
176 } | 174 } |
177 | 175 |
178 } // namespace printing | 176 } // namespace printing |
OLD | NEW |