| 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 |