Index: content/browser/devtools/devtools_http_handler_impl.cc |
diff --git a/content/browser/devtools/devtools_http_handler_impl.cc b/content/browser/devtools/devtools_http_handler_impl.cc |
index 90ee8d204942addc1676212df17489f57577c8c6..64788dc8c73be9305fdb57c1555651e1de2faff3 100644 |
--- a/content/browser/devtools/devtools_http_handler_impl.cc |
+++ b/content/browser/devtools/devtools_http_handler_impl.cc |
@@ -21,7 +21,8 @@ |
#include "content/browser/devtools/devtools_protocol.h" |
#include "content/browser/devtools/devtools_protocol_constants.h" |
#include "content/browser/devtools/devtools_system_info_handler.h" |
-#include "content/browser/devtools/devtools_tracing_handler.h" |
+#include "content/browser/devtools/protocol/devtools_protocol_handler_impl.h" |
+#include "content/browser/devtools/protocol/tracing_handler.h" |
#include "content/browser/devtools/tethering_handler.h" |
#include "content/common/devtools_messages.h" |
#include "content/public/browser/browser_thread.h" |
@@ -159,7 +160,13 @@ class DevToolsHttpHandlerImpl::BrowserTarget { |
int connection_id) |
: message_loop_(message_loop), |
server_(server), |
- connection_id_(connection_id) { |
+ connection_id_(connection_id), |
+ tracing_handler_(new devtools::tracing::TracingHandler( |
+ devtools::tracing::TracingHandler::Browser)), |
+ protocol_handler_(new DevToolsProtocolHandlerImpl()) { |
+ protocol_handler_->SetNotifier( |
+ base::Bind(&BrowserTarget::Respond, base::Unretained(this))); |
+ protocol_handler_->SetTracingHandler(tracing_handler_.get()); |
} |
~BrowserTarget() { |
@@ -184,17 +191,20 @@ class DevToolsHttpHandlerImpl::BrowserTarget { |
return; |
} |
+ scoped_refptr<DevToolsProtocol::Response> response = |
+ protocol_handler_->HandleCommand(command); |
for (const auto& handler : handlers_) { |
- scoped_refptr<DevToolsProtocol::Response> response = |
- handler->HandleCommand(command); |
- if (response.get()) { |
- if (!response->is_async_promise()) |
- Respond(response->Serialize()); |
- return; |
- } |
+ if (response.get()) |
+ break; |
+ response = handler->HandleCommand(command); |
} |
- Respond(command->NoSuchMethodErrorResponse()->Serialize()); |
+ if (response.get()) { |
+ if (!response->is_async_promise()) |
+ Respond(response->Serialize()); |
+ } else { |
+ Respond(command->NoSuchMethodErrorResponse()->Serialize()); |
+ } |
} |
void Respond(const std::string& message) { |
@@ -211,6 +221,8 @@ class DevToolsHttpHandlerImpl::BrowserTarget { |
base::MessageLoop* const message_loop_; |
net::HttpServer* const server_; |
const int connection_id_; |
+ scoped_ptr<devtools::tracing::TracingHandler> tracing_handler_; |
+ scoped_ptr<DevToolsProtocolHandlerImpl> protocol_handler_; |
std::vector<DevToolsProtocol::Handler*> handlers_; |
}; |
@@ -692,8 +704,6 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequestUI( |
BrowserTarget* browser_target = new BrowserTarget( |
thread_->message_loop(), server_.get(), connection_id); |
browser_target->RegisterHandler( |
- new DevToolsTracingHandler(DevToolsTracingHandler::Browser)); |
- browser_target->RegisterHandler( |
new TetheringHandler(delegate_.get(), thread_->message_loop_proxy())); |
browser_target->RegisterHandler( |
new DevToolsSystemInfoHandler()); |