OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 <memory> | 5 #include <memory> |
6 #include <string> | 6 #include <string> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "content/public/test/browser_test.h" | 10 #include "content/public/test/browser_test.h" |
11 #include "headless/public/devtools/domains/page.h" | 11 #include "headless/public/devtools/domains/page.h" |
12 #include "headless/public/devtools/domains/runtime.h" | 12 #include "headless/public/devtools/domains/runtime.h" |
13 #include "headless/public/devtools/domains/security.h" | 13 #include "headless/public/devtools/domains/security.h" |
14 #include "headless/public/headless_browser.h" | 14 #include "headless/public/headless_browser.h" |
15 #include "headless/public/headless_devtools_client.h" | 15 #include "headless/public/headless_devtools_client.h" |
16 #include "headless/public/headless_tab_socket.h" | 16 #include "headless/public/headless_tab_socket.h" |
17 #include "headless/public/headless_web_contents.h" | 17 #include "headless/public/headless_web_contents.h" |
18 #include "headless/test/headless_browser_test.h" | 18 #include "headless/test/headless_browser_test.h" |
19 #include "printing/features/features.h" | |
19 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
20 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
21 #include "third_party/skia/include/core/SkBitmap.h" | 22 #include "third_party/skia/include/core/SkBitmap.h" |
22 #include "third_party/skia/include/core/SkColor.h" | 23 #include "third_party/skia/include/core/SkColor.h" |
23 #include "ui/gfx/codec/png_codec.h" | 24 #include "ui/gfx/codec/png_codec.h" |
24 #include "ui/gfx/geometry/size.h" | 25 #include "ui/gfx/geometry/size.h" |
25 #include "url/gurl.h" | 26 #include "url/gurl.h" |
26 | 27 |
28 #if BUILDFLAG(ENABLE_BASIC_PRINTING) | |
29 #include "base/strings/string_number_conversions.h" | |
30 #include "pdf/pdf.h" | |
31 #include "printing/pdf_render_settings.h" | |
32 #include "printing/units.h" | |
33 #include "ui/gfx/geometry/rect.h" | |
34 #endif | |
35 | |
27 using testing::UnorderedElementsAre; | 36 using testing::UnorderedElementsAre; |
28 | 37 |
29 namespace headless { | 38 namespace headless { |
30 | 39 |
31 class HeadlessWebContentsTest : public HeadlessBrowserTest {}; | 40 class HeadlessWebContentsTest : public HeadlessBrowserTest {}; |
32 | 41 |
33 IN_PROC_BROWSER_TEST_F(HeadlessWebContentsTest, Navigation) { | 42 IN_PROC_BROWSER_TEST_F(HeadlessWebContentsTest, Navigation) { |
34 EXPECT_TRUE(embedded_test_server()->Start()); | 43 EXPECT_TRUE(embedded_test_server()->Start()); |
35 | 44 |
36 HeadlessBrowserContext* browser_context = | 45 HeadlessBrowserContext* browser_context = |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
157 } | 166 } |
158 }; | 167 }; |
159 | 168 |
160 HEADLESS_ASYNC_DEVTOOLED_TEST_P(HeadlessWebContentsScreenshotTest); | 169 HEADLESS_ASYNC_DEVTOOLED_TEST_P(HeadlessWebContentsScreenshotTest); |
161 | 170 |
162 // Instantiate test case for both software and gpu compositing modes. | 171 // Instantiate test case for both software and gpu compositing modes. |
163 INSTANTIATE_TEST_CASE_P(HeadlessWebContentsScreenshotTests, | 172 INSTANTIATE_TEST_CASE_P(HeadlessWebContentsScreenshotTests, |
164 HeadlessWebContentsScreenshotTest, | 173 HeadlessWebContentsScreenshotTest, |
165 ::testing::Bool()); | 174 ::testing::Bool()); |
166 | 175 |
176 #if BUILDFLAG(ENABLE_BASIC_PRINTING) | |
177 class HeadlessWebContentsPDFTest : public HeadlessAsyncDevTooledBrowserTest { | |
178 public: | |
179 const double kPaperWidth = 10; | |
180 const double kPaperHeight = 15; | |
181 const double kDocHeight = 50; | |
182 // Number of color channels in a BGRA bitmap. | |
183 const int kColorChannels = 4; | |
184 const int kDpi = 300; | |
185 | |
186 void RunDevTooledTest() override { | |
187 std::string height_expression = "document.body.style.height = '" + | |
188 base::DoubleToString(kDocHeight) + "in'"; | |
189 std::unique_ptr<runtime::EvaluateParams> params = | |
190 runtime::EvaluateParams::Builder() | |
191 .SetExpression("document.body.style.background = '#123456';" + | |
192 height_expression) | |
193 .Build(); | |
194 devtools_client_->GetRuntime()->Evaluate( | |
195 std::move(params), | |
196 base::Bind(&HeadlessWebContentsPDFTest::OnPageSetupCompleted, | |
197 base::Unretained(this))); | |
198 } | |
199 | |
200 void OnPageSetupCompleted(std::unique_ptr<runtime::EvaluateResult> result) { | |
201 devtools_client_->GetPage()->GetExperimental()->PrintToPDF( | |
202 page::PrintToPDFParams::Builder() | |
203 .SetPrintBackgrounds(true) | |
204 .SetPaperHeight(kPaperHeight) | |
205 .SetPaperWidth(kPaperWidth) | |
206 .SetMarginTop(0) | |
207 .SetMarginBottom(0) | |
208 .SetMarginLeft(0) | |
209 .SetMarginRight(0) | |
210 .Build(), | |
211 base::Bind(&HeadlessWebContentsPDFTest::OnPDFCreated, | |
212 base::Unretained(this))); | |
213 } | |
214 | |
215 void OnPDFCreated(std::unique_ptr<page::PrintToPDFResult> result) { | |
216 std::string base64 = result->GetData(); | |
217 EXPECT_LT(0U, base64.length()); | |
Lei Zhang
2017/05/04 07:29:38
Flip this around. Most people think of this as EXP
jzfeng
2017/05/05 02:41:34
Done. Changed the one in OnScreenshotCaptured as w
| |
218 std::string pdf_data; | |
219 EXPECT_TRUE(base::Base64Decode(base64, &pdf_data)); | |
220 | |
221 int num_pages; | |
222 EXPECT_TRUE(chrome_pdf::GetPDFDocInfo(pdf_data.data(), pdf_data.size(), | |
223 &num_pages, nullptr)); | |
224 EXPECT_EQ(std::ceil(kDocHeight / kPaperHeight), num_pages); | |
225 | |
226 for (int i = 0; i < num_pages; i++) { | |
227 double width_in_points, height_in_points; | |
Lei Zhang
2017/05/04 07:29:38
1 decl per line.
jzfeng
2017/05/05 02:41:34
Done.
| |
228 EXPECT_TRUE(chrome_pdf::GetPDFPageSizeByIndex( | |
229 pdf_data.data(), pdf_data.size(), i, &width_in_points, | |
230 &height_in_points)); | |
231 EXPECT_EQ(static_cast<int>(width_in_points), | |
232 static_cast<int>(kPaperWidth * printing::kPointsPerInch)); | |
233 EXPECT_EQ(static_cast<int>(height_in_points), | |
234 static_cast<int>(kPaperHeight * printing::kPointsPerInch)); | |
235 | |
236 gfx::Rect rect(kPaperWidth * kDpi, kPaperHeight * kDpi); | |
237 printing::PdfRenderSettings settings( | |
238 rect, gfx::Point(0, 0), kDpi, true, | |
239 printing::PdfRenderSettings::Mode::NORMAL); | |
240 std::vector<uint8_t> page_bitmap_data(kColorChannels * | |
241 settings.area.size().GetArea()); | |
242 EXPECT_TRUE(chrome_pdf::RenderPDFPageToBitmap( | |
243 pdf_data.data(), pdf_data.size(), i, page_bitmap_data.data(), | |
244 settings.area.size().width(), settings.area.size().height(), | |
245 settings.dpi, settings.autorotate)); | |
246 EXPECT_EQ(0x56, page_bitmap_data[0]); // B | |
247 EXPECT_EQ(0x34, page_bitmap_data[1]); // G | |
248 EXPECT_EQ(0x12, page_bitmap_data[2]); // R | |
249 } | |
250 FinishAsynchronousTest(); | |
251 } | |
252 }; | |
253 | |
254 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessWebContentsPDFTest); | |
255 #endif | |
256 | |
167 class HeadlessWebContentsSecurityTest | 257 class HeadlessWebContentsSecurityTest |
168 : public HeadlessAsyncDevTooledBrowserTest, | 258 : public HeadlessAsyncDevTooledBrowserTest, |
169 public security::ExperimentalObserver { | 259 public security::ExperimentalObserver { |
170 public: | 260 public: |
171 void RunDevTooledTest() override { | 261 void RunDevTooledTest() override { |
172 devtools_client_->GetSecurity()->GetExperimental()->AddObserver(this); | 262 devtools_client_->GetSecurity()->GetExperimental()->AddObserver(this); |
173 devtools_client_->GetSecurity()->GetExperimental()->Enable( | 263 devtools_client_->GetSecurity()->GetExperimental()->Enable( |
174 security::EnableParams::Builder().Build()); | 264 security::EnableParams::Builder().Build()); |
175 } | 265 } |
176 | 266 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
216 EXPECT_EQ("Embedder sent us: Hello", message); | 306 EXPECT_EQ("Embedder sent us: Hello", message); |
217 FinishAsynchronousTest(); | 307 FinishAsynchronousTest(); |
218 } | 308 } |
219 | 309 |
220 bool GetCreateTabSocket() override { return true; } | 310 bool GetCreateTabSocket() override { return true; } |
221 }; | 311 }; |
222 | 312 |
223 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessTabSocketTest); | 313 HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessTabSocketTest); |
224 | 314 |
225 } // namespace headless | 315 } // namespace headless |
OLD | NEW |