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 |