OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include <vector> | |
6 | |
7 #include "base/memory/ref_counted_memory.h" | |
8 #include "chrome/browser/printing/print_preview_tab_controller.h" | |
9 #include "chrome/browser/printing/print_preview_unit_test_base.h" | |
10 #include "chrome/browser/printing/print_view_manager.h" | |
11 #include "chrome/browser/ui/browser_list.h" | |
12 #include "chrome/browser/ui/constrained_window_tab_helper.h" | |
13 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | |
14 #include "chrome/browser/ui/webui/print_preview_ui.h" | |
15 #include "content/public/browser/web_contents.h" | |
16 #include "printing/print_job_constants.h" | |
17 | |
18 namespace { | |
19 | |
20 const unsigned char blob1[] = | |
21 "12346102356120394751634516591348710478123649165419234519234512349134"; | |
22 | |
23 size_t GetConstrainedWindowCount(TabContentsWrapper* tab) { | |
24 return tab->constrained_window_tab_helper()->constrained_window_count(); | |
25 } | |
26 | |
27 } // namespace | |
28 | |
29 class PrintPreviewUIUnitTest : public PrintPreviewUnitTestBase { | |
30 public: | |
31 PrintPreviewUIUnitTest() {} | |
32 virtual ~PrintPreviewUIUnitTest() {} | |
33 | |
34 protected: | |
35 virtual void SetUp() OVERRIDE { | |
36 PrintPreviewUnitTestBase::SetUp(); | |
37 | |
38 browser()->NewTab(); | |
39 } | |
40 }; | |
41 | |
42 // Create/Get a preview tab for initiator tab. | |
43 TEST_F(PrintPreviewUIUnitTest, PrintPreviewData) { | |
44 TabContentsWrapper* initiator_tab = | |
45 browser()->GetSelectedTabContentsWrapper(); | |
46 ASSERT_TRUE(initiator_tab); | |
47 EXPECT_EQ(0U, GetConstrainedWindowCount(initiator_tab)); | |
48 | |
49 printing::PrintPreviewTabController* controller = | |
50 printing::PrintPreviewTabController::GetInstance(); | |
51 ASSERT_TRUE(controller); | |
52 | |
53 initiator_tab->print_view_manager()->PrintPreviewNow(); | |
54 TabContentsWrapper* preview_tab = | |
55 controller->GetOrCreatePreviewTab(initiator_tab); | |
56 | |
57 EXPECT_NE(initiator_tab, preview_tab); | |
58 EXPECT_EQ(1, browser()->tab_count()); | |
59 EXPECT_EQ(1U, GetConstrainedWindowCount(initiator_tab)); | |
60 | |
61 PrintPreviewUI* preview_ui = reinterpret_cast<PrintPreviewUI*>( | |
62 preview_tab->web_contents()->GetWebUI()); | |
63 ASSERT_TRUE(preview_ui != NULL); | |
64 | |
65 scoped_refptr<RefCountedBytes> data; | |
66 preview_ui->GetPrintPreviewDataForIndex( | |
67 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, | |
68 &data); | |
69 EXPECT_EQ(NULL, data.get()); | |
70 | |
71 std::vector<unsigned char> preview_data(blob1, blob1 + sizeof(blob1)); | |
72 scoped_refptr<RefCountedBytes> dummy_data(new RefCountedBytes(preview_data)); | |
73 | |
74 preview_ui->SetPrintPreviewDataForIndex( | |
75 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, | |
76 dummy_data.get()); | |
77 preview_ui->GetPrintPreviewDataForIndex( | |
78 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, | |
79 &data); | |
80 EXPECT_EQ(dummy_data->size(), data->size()); | |
81 EXPECT_EQ(dummy_data.get(), data.get()); | |
82 | |
83 // This should not cause any memory leaks. | |
84 dummy_data = new RefCountedBytes(); | |
85 preview_ui->SetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX, | |
86 dummy_data); | |
87 | |
88 // Clear the preview data. | |
89 preview_ui->ClearAllPreviewData(); | |
90 | |
91 preview_ui->GetPrintPreviewDataForIndex( | |
92 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, | |
93 &data); | |
94 EXPECT_EQ(NULL, data.get()); | |
95 } | |
96 | |
97 // Set and get the individual draft pages. | |
98 TEST_F(PrintPreviewUIUnitTest, PrintPreviewDraftPages) { | |
99 TabContentsWrapper* initiator_tab = | |
100 browser()->GetSelectedTabContentsWrapper(); | |
101 ASSERT_TRUE(initiator_tab); | |
102 | |
103 printing::PrintPreviewTabController* controller = | |
104 printing::PrintPreviewTabController::GetInstance(); | |
105 ASSERT_TRUE(controller); | |
106 | |
107 initiator_tab->print_view_manager()->PrintPreviewNow(); | |
108 TabContentsWrapper* preview_tab = | |
109 controller->GetOrCreatePreviewTab(initiator_tab); | |
110 | |
111 EXPECT_NE(initiator_tab, preview_tab); | |
112 EXPECT_EQ(1, browser()->tab_count()); | |
113 EXPECT_EQ(1U, GetConstrainedWindowCount(initiator_tab)); | |
114 | |
115 PrintPreviewUI* preview_ui = reinterpret_cast<PrintPreviewUI*>( | |
116 preview_tab->web_contents()->GetWebUI()); | |
117 ASSERT_TRUE(preview_ui != NULL); | |
118 | |
119 scoped_refptr<RefCountedBytes> data; | |
120 preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX, &data); | |
121 EXPECT_EQ(NULL, data.get()); | |
122 | |
123 std::vector<unsigned char> preview_data(blob1, blob1 + sizeof(blob1)); | |
124 scoped_refptr<RefCountedBytes> dummy_data(new RefCountedBytes(preview_data)); | |
125 | |
126 preview_ui->SetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX, | |
127 dummy_data.get()); | |
128 preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX, &data); | |
129 EXPECT_EQ(dummy_data->size(), data->size()); | |
130 EXPECT_EQ(dummy_data.get(), data.get()); | |
131 | |
132 // Set and get the third page data. | |
133 preview_ui->SetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 2, | |
134 dummy_data.get()); | |
135 preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 2, | |
136 &data); | |
137 EXPECT_EQ(dummy_data->size(), data->size()); | |
138 EXPECT_EQ(dummy_data.get(), data.get()); | |
139 | |
140 // Get the second page data. | |
141 preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 1, | |
142 &data); | |
143 EXPECT_EQ(NULL, data.get()); | |
144 | |
145 preview_ui->SetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 1, | |
146 dummy_data.get()); | |
147 preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX + 1, | |
148 &data); | |
149 EXPECT_EQ(dummy_data->size(), data->size()); | |
150 EXPECT_EQ(dummy_data.get(), data.get()); | |
151 | |
152 // Clear the preview data. | |
153 preview_ui->ClearAllPreviewData(); | |
154 preview_ui->GetPrintPreviewDataForIndex(printing::FIRST_PAGE_INDEX, &data); | |
155 EXPECT_EQ(NULL, data.get()); | |
156 } | |
157 | |
158 // Test the browser-side print preview cancellation functionality. | |
159 TEST_F(PrintPreviewUIUnitTest, GetCurrentPrintPreviewStatus) { | |
160 TabContentsWrapper* initiator_tab = | |
161 browser()->GetSelectedTabContentsWrapper(); | |
162 ASSERT_TRUE(initiator_tab); | |
163 | |
164 printing::PrintPreviewTabController* controller = | |
165 printing::PrintPreviewTabController::GetInstance(); | |
166 ASSERT_TRUE(controller); | |
167 | |
168 initiator_tab->print_view_manager()->PrintPreviewNow(); | |
169 TabContentsWrapper* preview_tab = | |
170 controller->GetOrCreatePreviewTab(initiator_tab); | |
171 | |
172 EXPECT_NE(initiator_tab, preview_tab); | |
173 EXPECT_EQ(1, browser()->tab_count()); | |
174 EXPECT_EQ(1U, GetConstrainedWindowCount(initiator_tab)); | |
175 | |
176 PrintPreviewUI* preview_ui = reinterpret_cast<PrintPreviewUI*>( | |
177 preview_tab->web_contents()->GetWebUI()); | |
178 ASSERT_TRUE(preview_ui != NULL); | |
179 | |
180 // Test with invalid |preview_ui_addr|. | |
181 bool cancel = false; | |
182 preview_ui->GetCurrentPrintPreviewStatus("invalid", 0, &cancel); | |
183 EXPECT_TRUE(cancel); | |
184 | |
185 const int kFirstRequestId = 1000; | |
186 const int kSecondRequestId = 1001; | |
187 const std::string preview_ui_addr = preview_ui->GetPrintPreviewUIAddress(); | |
188 | |
189 // Test with kFirstRequestId. | |
190 preview_ui->OnPrintPreviewRequest(kFirstRequestId); | |
191 cancel = true; | |
192 preview_ui->GetCurrentPrintPreviewStatus(preview_ui_addr, kFirstRequestId, | |
193 &cancel); | |
194 EXPECT_FALSE(cancel); | |
195 | |
196 cancel = false; | |
197 preview_ui->GetCurrentPrintPreviewStatus(preview_ui_addr, kSecondRequestId, | |
198 &cancel); | |
199 EXPECT_TRUE(cancel); | |
200 | |
201 // Test with kSecondRequestId. | |
202 preview_ui->OnPrintPreviewRequest(kSecondRequestId); | |
203 cancel = false; | |
204 preview_ui->GetCurrentPrintPreviewStatus(preview_ui_addr, kFirstRequestId, | |
205 &cancel); | |
206 EXPECT_TRUE(cancel); | |
207 | |
208 cancel = true; | |
209 preview_ui->GetCurrentPrintPreviewStatus(preview_ui_addr, kSecondRequestId, | |
210 &cancel); | |
211 EXPECT_FALSE(cancel); | |
212 } | |
OLD | NEW |