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

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

Issue 2812253002: Headless: Support sending and receiving of raw protocol messages (Closed)
Patch Set: Fix tests 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..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);
« no previous file with comments | « headless/lib/browser/headless_devtools_client_impl.h ('k') | headless/lib/browser/headless_web_contents_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698