Chromium Code Reviews| 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..55b5ca9233c62ff8e142f5bb1cc14c4c16db5f43 100644 |
| --- a/headless/lib/browser/headless_devtools_client_impl.cc |
| +++ b/headless/lib/browser/headless_devtools_client_impl.cc |
| @@ -31,6 +31,7 @@ HeadlessDevToolsClientImpl* HeadlessDevToolsClientImpl::From( |
| HeadlessDevToolsClientImpl::HeadlessDevToolsClientImpl() |
| : agent_host_(nullptr), |
| + raw_protocol_listener_(nullptr), |
| next_message_id_(0), |
| renderer_crashed_(false), |
| accessibility_domain_(this), |
| @@ -95,6 +96,29 @@ void HeadlessDevToolsClientImpl::DetachFromHost( |
| pending_messages_.clear(); |
| } |
| +void HeadlessDevToolsClientImpl::SetRawProtocolListener( |
| + RawProtocolListener* raw_protocol_listener) { |
| + raw_protocol_listener_ = raw_protocol_listener; |
| +} |
| + |
| +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."; |
|
Sami
2017/04/12 14:54:24
Could we instead add a generator getter for next_m
alex clarke (OOO till 29th)
2017/04/13 10:46:28
Added a function as discussed offline.
|
| +#endif |
| + |
| + agent_host_->DispatchProtocolMessage(this, json_message); |
| +} |
| + |
| void HeadlessDevToolsClientImpl::DispatchProtocolMessage( |
| content::DevToolsAgentHost* agent_host, |
| const std::string& json_message) { |
| @@ -106,10 +130,12 @@ void HeadlessDevToolsClientImpl::DispatchProtocolMessage( |
| NOTREACHED() << "Badly formed reply"; |
| return; |
| } |
| - if (!DispatchMessageReply(*message_dict) && |
| - !DispatchEvent(std::move(message), *message_dict)) { |
| - DLOG(ERROR) << "Unhandled protocol message: " << json_message; |
| + if (!DispatchMessageReply(*message_dict)) { |
| + DispatchEvent(std::move(message), *message_dict); |
| + // Silently ignore unhandled messages. |
| } |
| + if (raw_protocol_listener_) |
| + raw_protocol_listener_->OnProtocolMessage(json_message, message_dict); |
| } |
| bool HeadlessDevToolsClientImpl::DispatchMessageReply( |
| @@ -314,7 +340,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); |