Chromium Code Reviews| 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 |