Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(467)

Unified Diff: headless/test/headless_browser_test.cc

Issue 2024973002: headless: Allow protocol handler customization (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698