Chromium Code Reviews| Index: content/browser/devtools/devtools_browser_target.cc |
| diff --git a/content/browser/devtools/devtools_browser_target.cc b/content/browser/devtools/devtools_browser_target.cc |
| index ee108612b72ab52563f7c25f354509bd562f3d94..afad06f58d8e15af316a4504572a0c3791366fb4 100644 |
| --- a/content/browser/devtools/devtools_browser_target.cc |
| +++ b/content/browser/devtools/devtools_browser_target.cc |
| @@ -10,7 +10,6 @@ |
| #include "base/memory/scoped_ptr.h" |
| #include "base/message_loop_proxy.h" |
| #include "base/values.h" |
| -#include "content/browser/devtools/devtools_protocol.h" |
| #include "net/server/http_server.h" |
| namespace content { |
| @@ -18,30 +17,21 @@ namespace content { |
| DevToolsBrowserTarget::DomainHandler::~DomainHandler() { |
| } |
| -void DevToolsBrowserTarget::DomainHandler::RegisterCommandHandler( |
| - const std::string& command, |
| - CommandHandler handler) { |
| - command_handlers_[command] = handler; |
| -} |
| - |
| -DevToolsBrowserTarget::DomainHandler::DomainHandler(const std::string& domain) |
| - : domain_(domain) { |
| +DevToolsBrowserTarget::DomainHandler::DomainHandler( |
| + const DevToolsProtocol::Notifier& notifier, |
| + const std::string& domain) |
| + : DevToolsProtocol::Handler(notifier), |
| + domain_(domain) { |
| } |
| scoped_ptr<DevToolsProtocol::Response> |
| DevToolsBrowserTarget::DomainHandler::HandleCommand( |
| DevToolsProtocol::Command* command) { |
| - CommandHandlers::iterator it = command_handlers_.find(command->method()); |
| - if (it == command_handlers_.end()) { |
| + scoped_ptr<DevToolsProtocol::Response> response( |
| + Handler::HandleCommand(command)); |
| + if (!response) |
| return command->NoSuchMethodErrorResponse(); |
|
pfeldman
2013/02/13 17:38:24
What if you put this logic into DevToolsBrowserTa
kkania
2013/02/13 19:17:19
Whoops, good idea.
|
| - } |
| - return (it->second).Run(command); |
| -} |
| - |
| -void DevToolsBrowserTarget::DomainHandler::SendNotification( |
| - const std::string& method, |
| - base::DictionaryValue* params) { |
| - notifier_.Run(method, params); |
| + return response.Pass(); |
| } |
| DevToolsBrowserTarget::DevToolsBrowserTarget( |
| @@ -51,21 +41,17 @@ DevToolsBrowserTarget::DevToolsBrowserTarget( |
| : message_loop_proxy_(message_loop_proxy), |
| http_server_(http_server), |
| connection_id_(connection_id), |
| + handlers_deleter_(&handlers_), |
|
pfeldman
2013/02/13 17:38:24
Thanks!
kkania
2013/02/13 19:17:19
Done.
|
| ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
| } |
| DevToolsBrowserTarget::~DevToolsBrowserTarget() { |
| - for (DomainHandlerMap::iterator i = handlers_.begin(); i != handlers_.end(); |
| - ++i) |
| - delete i->second; |
| } |
| void DevToolsBrowserTarget::RegisterDomainHandler(DomainHandler* handler) { |
| std::string domain = handler->domain(); |
| DCHECK(handlers_.find(domain) == handlers_.end()); |
| handlers_[domain] = handler; |
| - handler->set_notifier(Bind(&DevToolsBrowserTarget::SendNotification, |
| - weak_factory_.GetWeakPtr())); |
| } |
| std::string DevToolsBrowserTarget::HandleMessage(const std::string& data) { |
| @@ -87,15 +73,18 @@ std::string DevToolsBrowserTarget::HandleMessage(const std::string& data) { |
| return response->Serialize(); |
| } |
| -void DevToolsBrowserTarget::SendNotification(const std::string& method, |
| - DictionaryValue* params) { |
| - DevToolsProtocol::Notification notification(method, params); |
| +DevToolsProtocol::Notifier DevToolsBrowserTarget::GetNotifier() { |
| + return base::Bind(&DevToolsBrowserTarget::OnNotification, |
| + weak_factory_.GetWeakPtr()); |
| +} |
| + |
| +void DevToolsBrowserTarget::OnNotification(const std::string& message) { |
| message_loop_proxy_->PostTask( |
| FROM_HERE, |
| base::Bind(&net::HttpServer::SendOverWebSocket, |
| http_server_, |
| connection_id_, |
| - notification.Serialize())); |
| + message)); |
| } |
| } // namespace content |