| Index: headless/lib/browser/headless_devtools_client_impl.cc
|
| diff --git a/headless/lib/browser/headless_devtools_client_impl.cc b/headless/lib/browser/headless_devtools_client_impl.cc
|
| index ca315fa14a403cfd0b876dbb9653ec73591ac374..9cb9de77f929fc210cd57872224d661676daa10b 100644
|
| --- a/headless/lib/browser/headless_devtools_client_impl.cc
|
| +++ b/headless/lib/browser/headless_devtools_client_impl.cc
|
| @@ -31,7 +31,9 @@ HeadlessDevToolsClientImpl* HeadlessDevToolsClientImpl::From(
|
|
|
| HeadlessDevToolsClientImpl::HeadlessDevToolsClientImpl()
|
| : agent_host_(nullptr),
|
| + raw_protocol_listener_(nullptr),
|
| next_message_id_(0),
|
| + next_raw_message_id_(1),
|
| renderer_crashed_(false),
|
| accessibility_domain_(this),
|
| animation_domain_(this),
|
| @@ -95,10 +97,47 @@ void HeadlessDevToolsClientImpl::DetachFromHost(
|
| pending_messages_.clear();
|
| }
|
|
|
| +void HeadlessDevToolsClientImpl::SetRawProtocolListener(
|
| + RawProtocolListener* raw_protocol_listener) {
|
| + raw_protocol_listener_ = raw_protocol_listener;
|
| +}
|
| +
|
| +int HeadlessDevToolsClientImpl::GetNextRawDevToolsMessageId() {
|
| + int id = next_raw_message_id_;
|
| + next_raw_message_id_ += 2;
|
| + return id;
|
| +}
|
| +
|
| +void HeadlessDevToolsClientImpl::SendRawDevToolsMessage(
|
| + const std::string& json_message) {
|
| +#ifndef NDEBUG
|
| + std::unique_ptr<base::Value> message =
|
| + base::JSONReader::Read(json_message, base::JSON_PARSE_RFC);
|
| + const base::DictionaryValue* message_dict;
|
| + int id = 0;
|
| + if (!message || !message->GetAsDictionary(&message_dict) ||
|
| + !message_dict->GetInteger("id", &id)) {
|
| + NOTREACHED() << "Badly formed message";
|
| + return;
|
| + }
|
| + DCHECK_EQ((id % 2), 1) << "Raw devtools messages must have an odd ID.";
|
| +#endif
|
| +
|
| + agent_host_->DispatchProtocolMessage(this, json_message);
|
| +}
|
| +
|
| +void HeadlessDevToolsClientImpl::SendRawDevToolsMessage(
|
| + const base::DictionaryValue& message) {
|
| + std::string json_message;
|
| + base::JSONWriter::Write(message, &json_message);
|
| + SendRawDevToolsMessage(json_message);
|
| +}
|
| +
|
| void HeadlessDevToolsClientImpl::DispatchProtocolMessage(
|
| content::DevToolsAgentHost* agent_host,
|
| const std::string& json_message) {
|
| DCHECK_EQ(agent_host_, agent_host);
|
| +
|
| std::unique_ptr<base::Value> message =
|
| base::JSONReader::Read(json_message, base::JSON_PARSE_RFC);
|
| const base::DictionaryValue* message_dict;
|
| @@ -106,6 +145,13 @@ void HeadlessDevToolsClientImpl::DispatchProtocolMessage(
|
| NOTREACHED() << "Badly formed reply";
|
| return;
|
| }
|
| +
|
| + if (raw_protocol_listener_ &&
|
| + raw_protocol_listener_->OnProtocolMessage(agent_host->GetId(),
|
| + json_message, *message_dict)) {
|
| + return;
|
| + }
|
| +
|
| if (!DispatchMessageReply(*message_dict) &&
|
| !DispatchEvent(std::move(message), *message_dict)) {
|
| DLOG(ERROR) << "Unhandled protocol message: " << json_message;
|
| @@ -314,7 +360,8 @@ void HeadlessDevToolsClientImpl::FinalizeAndSendMessage(
|
| if (renderer_crashed_)
|
| return;
|
| DCHECK(agent_host_);
|
| - int id = next_message_id_++;
|
| + int id = next_message_id_;
|
| + next_message_id_ += 2; // We only send even numbered messages.
|
| message->SetInteger("id", id);
|
| std::string json_message;
|
| base::JSONWriter::Write(*message, &json_message);
|
|
|