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

Unified Diff: headless/lib/browser/headless_devtools_client_impl.cc

Issue 2812253002: Headless: Support sending and receiving of raw protocol messages (Closed)
Patch Set: Created 3 years, 8 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/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);

Powered by Google App Engine
This is Rietveld 408576698