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); |