Index: content/browser/devtools/browser_devtools_agent_host.cc |
diff --git a/content/browser/devtools/browser_devtools_agent_host.cc b/content/browser/devtools/browser_devtools_agent_host.cc |
index d4a50cefbdfec2867f5098851730367096c0ab4e..95b93768e266b599a30e368703626f2c2f6b8a4c 100644 |
--- a/content/browser/devtools/browser_devtools_agent_host.cc |
+++ b/content/browser/devtools/browser_devtools_agent_host.cc |
@@ -6,10 +6,12 @@ |
#include "base/bind.h" |
#include "base/guid.h" |
+#include "base/json/json_reader.h" |
#include "content/browser/devtools/devtools_protocol_handler.h" |
#include "content/browser/devtools/devtools_session.h" |
#include "content/browser/devtools/protocol/io_handler.h" |
#include "content/browser/devtools/protocol/memory_handler.h" |
+#include "content/browser/devtools/protocol/protocol.h" |
#include "content/browser/devtools/protocol/system_info_handler.h" |
#include "content/browser/devtools/protocol/tethering_handler.h" |
#include "content/browser/devtools/protocol/tracing_handler.h" |
@@ -27,23 +29,16 @@ BrowserDevToolsAgentHost::BrowserDevToolsAgentHost( |
scoped_refptr<base::SingleThreadTaskRunner> tethering_task_runner, |
const CreateServerSocketCallback& socket_callback) |
: DevToolsAgentHostImpl(base::GenerateGUID()), |
- io_handler_(new devtools::io::IOHandler(GetIOContext())), |
memory_handler_(new devtools::memory::MemoryHandler()), |
system_info_handler_(new devtools::system_info::SystemInfoHandler()), |
tethering_handler_( |
new devtools::tethering::TetheringHandler(socket_callback, |
tethering_task_runner)), |
- tracing_handler_(new devtools::tracing::TracingHandler( |
- devtools::tracing::TracingHandler::Browser, |
- FrameTreeNode::kFrameTreeNodeInvalidId, |
- GetIOContext())), |
protocol_handler_(new DevToolsProtocolHandler(this)) { |
DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher(); |
- dispatcher->SetIOHandler(io_handler_.get()); |
dispatcher->SetMemoryHandler(memory_handler_.get()); |
dispatcher->SetSystemInfoHandler(system_info_handler_.get()); |
dispatcher->SetTetheringHandler(tethering_handler_.get()); |
- dispatcher->SetTracingHandler(tracing_handler_.get()); |
NotifyCreated(); |
} |
@@ -51,9 +46,20 @@ BrowserDevToolsAgentHost::~BrowserDevToolsAgentHost() { |
} |
void BrowserDevToolsAgentHost::Attach() { |
+ session()->dispatcher()->setFallThroughForNotFound(true); |
+ io_handler_.reset(new protocol::IOHandler(GetIOContext())); |
+ io_handler_->Wire(session()->dispatcher()); |
+ |
+ tracing_handler_.reset(new protocol::TracingHandler( |
+ protocol::TracingHandler::Browser, |
+ FrameTreeNode::kFrameTreeNodeInvalidId, |
+ GetIOContext())); |
+ tracing_handler_->Wire(session()->dispatcher()); |
} |
void BrowserDevToolsAgentHost::Detach() { |
+ io_handler_.reset(); |
+ tracing_handler_.reset(); |
} |
std::string BrowserDevToolsAgentHost::GetType() { |
@@ -81,8 +87,13 @@ void BrowserDevToolsAgentHost::Reload() { |
bool BrowserDevToolsAgentHost::DispatchProtocolMessage( |
const std::string& message) { |
- protocol_handler_->HandleMessage(session() ? session()->session_id() : 0, |
- message); |
+ std::unique_ptr<base::Value> value = base::JSONReader::Read(message); |
+ std::unique_ptr<protocol::Value> protocolValue = |
+ protocol::toProtocolValue(value.get(), 1000); |
+ if (session()->dispatcher()->dispatch(std::move(protocolValue)) == |
+ protocol::Response::kFallThrough) { |
+ protocol_handler_->HandleMessage(session()->session_id(), std::move(value)); |
+ } |
return true; |
} |