| Index: headless/test/headless_browser_test.cc
|
| diff --git a/headless/test/headless_browser_test.cc b/headless/test/headless_browser_test.cc
|
| index 380ccd7a28642277040a118c05977807c05e4b58..d308fbead5842407acbc9488a97a1262e48dcc4c 100644
|
| --- a/headless/test/headless_browser_test.cc
|
| +++ b/headless/test/headless_browser_test.cc
|
| @@ -15,6 +15,7 @@
|
| #include "headless/lib/headless_content_main_delegate.h"
|
| #include "headless/public/domains/network.h"
|
| #include "headless/public/domains/page.h"
|
| +#include "headless/public/domains/runtime.h"
|
| #include "headless/public/headless_devtools_client.h"
|
| #include "headless/public/headless_devtools_target.h"
|
| #include "headless/public/headless_web_contents.h"
|
| @@ -67,6 +68,43 @@ class WaitForLoadObserver : public page::Observer, public network::Observer {
|
| DISALLOW_COPY_AND_ASSIGN(WaitForLoadObserver);
|
| };
|
|
|
| +class EvaluateHelper {
|
| + public:
|
| + EvaluateHelper(HeadlessBrowserTest* browser_test,
|
| + HeadlessWebContents* web_contents,
|
| + const std::string& script_to_eval)
|
| + : browser_test_(browser_test),
|
| + web_contents_(web_contents),
|
| + devtools_client_(HeadlessDevToolsClient::Create()) {
|
| + web_contents_->GetDevToolsTarget()->AttachClient(devtools_client_.get());
|
| + devtools_client_->GetRuntime()->Evaluate(
|
| + script_to_eval,
|
| + base::Bind(&EvaluateHelper::OnEvaluateResult, base::Unretained(this)));
|
| + }
|
| +
|
| + ~EvaluateHelper() {
|
| + web_contents_->GetDevToolsTarget()->DetachClient(devtools_client_.get());
|
| + }
|
| +
|
| + void OnEvaluateResult(std::unique_ptr<runtime::EvaluateResult> result) {
|
| + result_ = std::move(result);
|
| + browser_test_->FinishAsynchronousTest();
|
| + }
|
| +
|
| + std::unique_ptr<runtime::EvaluateResult> TakeResult() {
|
| + return std::move(result_);
|
| + }
|
| +
|
| + private:
|
| + HeadlessBrowserTest* browser_test_; // Not owned.
|
| + HeadlessWebContents* web_contents_; // Not owned.
|
| + std::unique_ptr<HeadlessDevToolsClient> devtools_client_;
|
| +
|
| + std::unique_ptr<runtime::EvaluateResult> result_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(EvaluateHelper);
|
| +};
|
| +
|
| } // namespace
|
|
|
| HeadlessBrowserTest::HeadlessBrowserTest() {
|
| @@ -114,6 +152,14 @@ bool HeadlessBrowserTest::WaitForLoad(HeadlessWebContents* web_contents) {
|
| return observer.navigation_succeeded();
|
| }
|
|
|
| +std::unique_ptr<runtime::EvaluateResult> HeadlessBrowserTest::EvaluateScript(
|
| + HeadlessWebContents* web_contents,
|
| + const std::string& script) {
|
| + EvaluateHelper helper(this, web_contents, script);
|
| + RunAsynchronousTest();
|
| + return helper.TakeResult();
|
| +}
|
| +
|
| void HeadlessBrowserTest::RunAsynchronousTest() {
|
| base::MessageLoop::ScopedNestableTaskAllower nestable_allower(
|
| base::MessageLoop::current());
|
|
|