Chromium Code Reviews| Index: headless/lib/headless_web_contents_browsertest.cc |
| diff --git a/headless/lib/headless_web_contents_browsertest.cc b/headless/lib/headless_web_contents_browsertest.cc |
| index 30faee5e65ef2edf70551c8d55a642af152f4333..7f6bbd0df65a96336ffc77548d415660324d1a04 100644 |
| --- a/headless/lib/headless_web_contents_browsertest.cc |
| +++ b/headless/lib/headless_web_contents_browsertest.cc |
| @@ -3,9 +3,14 @@ |
| // found in the LICENSE file. |
| #include <memory> |
| +#include <string> |
| +#include <vector> |
| #include "content/public/test/browser_test.h" |
| +#include "headless/public/domains/page.h" |
| #include "headless/public/headless_browser.h" |
| +#include "headless/public/headless_devtools_client.h" |
| +#include "headless/public/headless_devtools_target.h" |
| #include "headless/public/headless_web_contents.h" |
| #include "headless/test/headless_browser_test.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -16,8 +21,51 @@ namespace headless { |
| class HeadlessWebContentsTest : public HeadlessBrowserTest {}; |
| +#define HEADLESS_ASYNC_DEVTOOLED_TEST_F(TEST_FIXTURE_NAME) \ |
| + IN_PROC_BROWSER_TEST_F(TEST_FIXTURE_NAME, RunAsyncTest) { RunTest(); } \ |
| + class AsyncHeadlessBrowserTestNeedsSemicolon##TEST_FIXTURE_NAME {} |
| + |
| +class HeadlessAsyncDevTooledBrowserTest : public HeadlessBrowserTest, |
|
Eric Seckler
2016/06/02 17:56:32
I'm following the same pattern as the HeadlessDevT
Eric Seckler
2016/06/03 11:30:40
Moved.
|
| + public HeadlessWebContents::Observer { |
| + public: |
| + HeadlessAsyncDevTooledBrowserTest() |
| + : web_contents_(nullptr), |
| + devtools_client_(HeadlessDevToolsClient::Create()) {} |
| + ~HeadlessAsyncDevTooledBrowserTest() override {} |
| + |
| + // HeadlessWebContentsObserver implementation: |
| + void DevToolsTargetReady() override { |
| + EXPECT_TRUE(web_contents_->GetDevToolsTarget()); |
| + web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get()); |
| + RunDevTooledTest(); |
| + } |
| + |
| + // Implemented by tests and used to send request(s) to DevTools. Subclasses |
| + // need to ensure that FinishAsynchronousTest() is called after response(s) |
| + // are processed (e.g. in a callback). |
| + virtual void RunDevTooledTest() = 0; |
| + |
| + protected: |
| + void RunTest() { |
| + web_contents_ = |
| + browser()->CreateWebContents(GURL("about:blank"), gfx::Size(800, 600)); |
| + web_contents_->AddObserver(this); |
| + |
| + RunAsynchronousTest(); |
| + |
| + web_contents_->GetDevToolsTarget()->DetachClient(devtools_client_.get()); |
| + web_contents_->RemoveObserver(this); |
| + web_contents_->Close(); |
| + web_contents_ = nullptr; |
| + } |
| + |
| + HeadlessWebContents* web_contents_; |
| + std::unique_ptr<HeadlessDevToolsClient> devtools_client_; |
| +}; |
| + |
| IN_PROC_BROWSER_TEST_F(HeadlessWebContentsTest, Navigation) { |
| EXPECT_TRUE(embedded_test_server()->Start()); |
| + |
| HeadlessWebContents* web_contents = browser()->CreateWebContents( |
| embedded_test_server()->GetURL("/hello.html"), gfx::Size(800, 600)); |
| EXPECT_TRUE(WaitForLoad(web_contents)); |
| @@ -42,4 +90,23 @@ IN_PROC_BROWSER_TEST_F(HeadlessWebContentsTest, WindowOpen) { |
| EXPECT_EQ(static_cast<size_t>(2), all_web_contents.size()); |
| } |
| +class HeadlessWebContentsScreenshotTest |
| + : public HeadlessAsyncDevTooledBrowserTest { |
| + public: |
| + void RunDevTooledTest() override { |
| + devtools_client_->GetPage()->GetExperimental()->CaptureScreenshot( |
| + page::CaptureScreenshotParams::Builder().Build(), |
| + base::Bind(&HeadlessWebContentsScreenshotTest::OnScreenshotCaptured, |
| + base::Unretained(this))); |
| + } |
| + |
| + void OnScreenshotCaptured( |
| + std::unique_ptr<page::CaptureScreenshotResult> result) { |
| + EXPECT_LT(0U, result->GetData().length()); |
| + FinishAsynchronousTest(); |
| + } |
| +}; |
| + |
| +HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessWebContentsScreenshotTest); |
| + |
| } // namespace headless |