skyostil | fe11616 | 2016-02-26 20:53:33 | [diff] [blame] | 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 |
| 3 | // found in the LICENSE file. |
| 4 | |
mostynb | c3d183b | 2016-04-04 11:02:45 | [diff] [blame] | 5 | #include <memory> |
eseckler | 9ef5476 | 2016-06-03 17:28:38 | [diff] [blame] | 6 | #include <string> |
| 7 | #include <vector> |
mostynb | c3d183b | 2016-04-04 11:02:45 | [diff] [blame] | 8 | |
skyostil | fe11616 | 2016-02-26 20:53:33 | [diff] [blame] | 9 | #include "content/public/test/browser_test.h" |
altimin | eaffa8e0 | 2016-11-08 23:56:31 | [diff] [blame^] | 10 | #include "headless/public/devtools/domains/page.h" |
skyostil | fe11616 | 2016-02-26 20:53:33 | [diff] [blame] | 11 | #include "headless/public/headless_browser.h" |
eseckler | 9ef5476 | 2016-06-03 17:28:38 | [diff] [blame] | 12 | #include "headless/public/headless_devtools_client.h" |
skyostil | fe11616 | 2016-02-26 20:53:33 | [diff] [blame] | 13 | #include "headless/public/headless_web_contents.h" |
| 14 | #include "headless/test/headless_browser_test.h" |
altimin | bf875c9 | 2016-08-04 17:09:07 | [diff] [blame] | 15 | #include "testing/gmock/include/gmock/gmock.h" |
skyostil | fe11616 | 2016-02-26 20:53:33 | [diff] [blame] | 16 | #include "testing/gtest/include/gtest/gtest.h" |
| 17 | #include "ui/gfx/geometry/size.h" |
| 18 | #include "url/gurl.h" |
| 19 | |
altimin | bf875c9 | 2016-08-04 17:09:07 | [diff] [blame] | 20 | using testing::UnorderedElementsAre; |
| 21 | |
skyostil | fe11616 | 2016-02-26 20:53:33 | [diff] [blame] | 22 | namespace headless { |
| 23 | |
| 24 | class HeadlessWebContentsTest : public HeadlessBrowserTest {}; |
| 25 | |
skyostil | fe11616 | 2016-02-26 20:53:33 | [diff] [blame] | 26 | IN_PROC_BROWSER_TEST_F(HeadlessWebContentsTest, Navigation) { |
| 27 | EXPECT_TRUE(embedded_test_server()->Start()); |
eseckler | 9ef5476 | 2016-06-03 17:28:38 | [diff] [blame] | 28 | |
altimin | bf875c9 | 2016-08-04 17:09:07 | [diff] [blame] | 29 | HeadlessBrowserContext* browser_context = |
altimin | 93a0240 | 2016-08-03 16:26:43 | [diff] [blame] | 30 | browser()->CreateBrowserContextBuilder().Build(); |
| 31 | |
skyostil | 25c2c012 | 2016-06-09 12:54:12 | [diff] [blame] | 32 | HeadlessWebContents* web_contents = |
altimin | 93a0240 | 2016-08-03 16:26:43 | [diff] [blame] | 33 | browser_context->CreateWebContentsBuilder() |
skyostil | 25c2c012 | 2016-06-09 12:54:12 | [diff] [blame] | 34 | .SetInitialURL(embedded_test_server()->GetURL("/hello.html")) |
| 35 | .Build(); |
skyostil | 585fa60 | 2016-04-25 16:07:56 | [diff] [blame] | 36 | EXPECT_TRUE(WaitForLoad(web_contents)); |
altimin | b6d2d1fc | 2016-04-21 15:23:22 | [diff] [blame] | 37 | |
altimin | bf875c9 | 2016-08-04 17:09:07 | [diff] [blame] | 38 | EXPECT_THAT(browser_context->GetAllWebContents(), |
| 39 | UnorderedElementsAre(web_contents)); |
altimin | b6d2d1fc | 2016-04-21 15:23:22 | [diff] [blame] | 40 | } |
| 41 | |
| 42 | IN_PROC_BROWSER_TEST_F(HeadlessWebContentsTest, WindowOpen) { |
| 43 | EXPECT_TRUE(embedded_test_server()->Start()); |
| 44 | |
altimin | bf875c9 | 2016-08-04 17:09:07 | [diff] [blame] | 45 | HeadlessBrowserContext* browser_context = |
altimin | 93a0240 | 2016-08-03 16:26:43 | [diff] [blame] | 46 | browser()->CreateBrowserContextBuilder().Build(); |
| 47 | |
skyostil | 25c2c012 | 2016-06-09 12:54:12 | [diff] [blame] | 48 | HeadlessWebContents* web_contents = |
altimin | 93a0240 | 2016-08-03 16:26:43 | [diff] [blame] | 49 | browser_context->CreateWebContentsBuilder() |
skyostil | 25c2c012 | 2016-06-09 12:54:12 | [diff] [blame] | 50 | .SetInitialURL(embedded_test_server()->GetURL("/window_open.html")) |
| 51 | .Build(); |
skyostil | 585fa60 | 2016-04-25 16:07:56 | [diff] [blame] | 52 | EXPECT_TRUE(WaitForLoad(web_contents)); |
altimin | b6d2d1fc | 2016-04-21 15:23:22 | [diff] [blame] | 53 | |
altimin | bf875c9 | 2016-08-04 17:09:07 | [diff] [blame] | 54 | EXPECT_EQ(static_cast<size_t>(2), |
| 55 | browser_context->GetAllWebContents().size()); |
skyostil | fe11616 | 2016-02-26 20:53:33 | [diff] [blame] | 56 | } |
| 57 | |
eseckler | 9ef5476 | 2016-06-03 17:28:38 | [diff] [blame] | 58 | class HeadlessWebContentsScreenshotTest |
| 59 | : public HeadlessAsyncDevTooledBrowserTest { |
| 60 | public: |
| 61 | void RunDevTooledTest() override { |
| 62 | devtools_client_->GetPage()->GetExperimental()->CaptureScreenshot( |
| 63 | page::CaptureScreenshotParams::Builder().Build(), |
| 64 | base::Bind(&HeadlessWebContentsScreenshotTest::OnScreenshotCaptured, |
| 65 | base::Unretained(this))); |
| 66 | } |
| 67 | |
| 68 | void OnScreenshotCaptured( |
| 69 | std::unique_ptr<page::CaptureScreenshotResult> result) { |
| 70 | EXPECT_LT(0U, result->GetData().length()); |
| 71 | FinishAsynchronousTest(); |
| 72 | } |
| 73 | }; |
| 74 | |
| 75 | HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessWebContentsScreenshotTest); |
| 76 | |
skyostil | fe11616 | 2016-02-26 20:53:33 | [diff] [blame] | 77 | } // namespace headless |