| Index: content/shell/browser/layout_test/layout_test_devtools_frontend.cc
|
| diff --git a/content/shell/browser/layout_test/layout_test_devtools_frontend.cc b/content/shell/browser/layout_test/layout_test_devtools_frontend.cc
|
| index 7da2af53ad64fb820513e6b131d081edd4c0546d..f30846ac661a286cb919ac2fbcbfc60da354a2a1 100644
|
| --- a/content/shell/browser/layout_test/layout_test_devtools_frontend.cc
|
| +++ b/content/shell/browser/layout_test/layout_test_devtools_frontend.cc
|
| @@ -5,9 +5,13 @@
|
| #include "content/shell/browser/layout_test/layout_test_devtools_frontend.h"
|
|
|
| #include "base/command_line.h"
|
| +#include "base/json/json_reader.h"
|
| +#include "base/json/json_writer.h"
|
| #include "base/path_service.h"
|
| #include "base/strings/stringprintf.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| #include "build/build_config.h"
|
| +#include "content/public/browser/render_frame_host.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/shell/browser/layout_test/blink_test_controller.h"
|
| #include "content/shell/browser/shell.h"
|
| @@ -67,13 +71,34 @@ void LayoutTestDevToolsFrontend::ReuseFrontend(const std::string& settings,
|
| const std::string frontend_url) {
|
| DisconnectFromTarget();
|
| preferences()->Clear();
|
| + ready_for_test_ = false;
|
| + pending_evaluations_.clear();
|
| frontend_shell()->LoadURL(GetDevToolsPathAsURL(settings, frontend_url));
|
| }
|
|
|
| +void LayoutTestDevToolsFrontend::EvaluateInFrontend(
|
| + int call_id,
|
| + const std::string& script) {
|
| + if (!ready_for_test_) {
|
| + pending_evaluations_.push_back(std::make_pair(call_id, script));
|
| + return;
|
| + }
|
| +
|
| + std::string encoded_script;
|
| + base::JSONWriter::Write(base::StringValue(script), &encoded_script);
|
| + std::string source =
|
| + base::StringPrintf("DevToolsAPI.evaluateForTestInFrontend(%d, %s);",
|
| + call_id,
|
| + encoded_script.c_str());
|
| + web_contents()->GetMainFrame()->ExecuteJavaScriptForTests(
|
| + base::UTF8ToUTF16(source));
|
| +}
|
| +
|
| LayoutTestDevToolsFrontend::LayoutTestDevToolsFrontend(
|
| Shell* frontend_shell,
|
| WebContents* inspected_contents)
|
| - : ShellDevToolsFrontend(frontend_shell, inspected_contents) {
|
| + : ShellDevToolsFrontend(frontend_shell, inspected_contents),
|
| + ready_for_test_(false) {
|
| }
|
|
|
| LayoutTestDevToolsFrontend::~LayoutTestDevToolsFrontend() {
|
| @@ -84,6 +109,25 @@ void LayoutTestDevToolsFrontend::AgentHostClosed(
|
| // Do not close the front-end shell.
|
| }
|
|
|
| +void LayoutTestDevToolsFrontend::HandleMessageFromDevToolsFrontend(
|
| + const std::string& message) {
|
| + std::string method;
|
| + base::DictionaryValue* dict = nullptr;
|
| + scoped_ptr<base::Value> parsed_message = base::JSONReader::Read(message);
|
| + if (parsed_message &&
|
| + parsed_message->GetAsDictionary(&dict) &&
|
| + dict->GetString("method", &method) &&
|
| + method == "readyForTest") {
|
| + ready_for_test_ = true;
|
| + for (const auto& pair : pending_evaluations_)
|
| + EvaluateInFrontend(pair.first, pair.second);
|
| + pending_evaluations_.clear();
|
| + return;
|
| + }
|
| +
|
| + ShellDevToolsFrontend::HandleMessageFromDevToolsFrontend(message);
|
| +}
|
| +
|
| void LayoutTestDevToolsFrontend::RenderProcessGone(
|
| base::TerminationStatus status) {
|
| BlinkTestController::Get()->DevToolsProcessCrashed();
|
|
|