Chromium Code Reviews| Index: content/browser/devtools/protocol/browser_handler.cc |
| diff --git a/content/browser/devtools/protocol/browser_handler.cc b/content/browser/devtools/protocol/browser_handler.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bcd4014ebb37c87d16b920ec79acfe845ba97376 |
| --- /dev/null |
| +++ b/content/browser/devtools/protocol/browser_handler.cc |
| @@ -0,0 +1,105 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/browser/devtools/protocol/browser_handler.h" |
| + |
| +namespace content { |
| +namespace devtools { |
| +namespace browser { |
| + |
| +namespace { |
| +const char kTargetTypeWebContents[] = "web_contents"; |
| +const char kTargetTypeFrame[] = "frame"; |
| +const char kTargetTypeSharedWorker[] = "shared_worker"; |
| +const char kTargetTypeServiceWorker[] = "service_worker"; |
| +const char kTargetTypeServiceOther[] = "other"; |
| +} |
| + |
| +using Response = DevToolsProtocolClient::Response; |
| + |
| +BrowserHandler::BrowserHandler() { |
| +} |
| + |
| +BrowserHandler::~BrowserHandler() { |
| +} |
| + |
| +void BrowserHandler::SetClient(std::unique_ptr<Client> client) { |
| + client_.swap(client); |
| +} |
| + |
| +static std::string GetTypeString(DevToolsAgentHost* agent_host) { |
| + switch (agent_host->GetType()) { |
| + case DevToolsAgentHost::TYPE_WEB_CONTENTS: |
| + return kTargetTypeWebContents; |
| + case DevToolsAgentHost::TYPE_FRAME: |
| + return kTargetTypeFrame; |
| + case DevToolsAgentHost::TYPE_SHARED_WORKER: |
| + return kTargetTypeSharedWorker; |
| + case DevToolsAgentHost::TYPE_SERVICE_WORKER: |
| + return kTargetTypeServiceWorker; |
| + default: |
| + return kTargetTypeServiceOther; |
| + } |
| +} |
| + |
| +Response BrowserHandler::GetTargets(TargetInfos* infos) { |
| + DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll(); |
| + for (DevToolsAgentHost::List::iterator it = agents.begin(); |
| + it != agents.end(); ++it) { |
| + DevToolsAgentHost* agent_host = (*it).get(); |
| + scoped_refptr<devtools::browser::TargetInfo> info = |
| + devtools::browser::TargetInfo::Create()-> |
| + set_target_id(agent_host->GetId())-> |
| + set_type(GetTypeString(agent_host))-> |
| + set_title(agent_host->GetTitle())-> |
| + set_url(agent_host->GetURL().spec()); |
| + } |
| + return Response::OK(); |
| +} |
| + |
| +Response BrowserHandler::Attach(const std::string& targetId) { |
| + scoped_refptr<DevToolsAgentHost> agent_host = |
| + DevToolsAgentHost::GetForId(targetId); |
| + if (!agent_host) |
| + return Response::ServerError("No host with given id found"); |
| + bool success = agent_host->AttachClient(this); |
| + return success ? Response::OK() : |
| + Response::ServerError("Host is already being debugged"); |
|
dgozman
2016/06/08 03:53:29
s/Host/Target in error messages
pfeldman
2016/06/08 15:54:52
Done.
|
| +} |
| + |
| +Response BrowserHandler::Detach(const std::string& targetId) { |
| + scoped_refptr<DevToolsAgentHost> agent_host = |
| + DevToolsAgentHost::GetForId(targetId); |
| + if (!agent_host) |
| + return Response::ServerError("No host with given id found"); |
| + bool success = agent_host->DetachClient(this); |
| + return success ? Response::OK() : |
| + Response::ServerError("Host is not being debugged"); |
| +} |
| + |
| +Response BrowserHandler::SendMessage(const std::string& targetId, |
| + const std::string& message) { |
| + scoped_refptr<DevToolsAgentHost> agent_host = |
| + DevToolsAgentHost::GetForId(targetId); |
| + if (!agent_host) |
| + return Response::ServerError("No host with given id found"); |
| + agent_host->DispatchProtocolMessage(message); |
| + return Response::OK(); |
| +} |
| + |
| +void BrowserHandler::DispatchProtocolMessage( |
| + DevToolsAgentHost* agent_host, const std::string& message) { |
| + client_->DispatchMessage(DispatchMessageParams::Create()-> |
| + set_target_id(agent_host->GetId())-> |
| + set_message(message)); |
| +} |
| + |
| +void BrowserHandler::AgentHostClosed(DevToolsAgentHost* agent_host, |
| + bool replaced_with_another_client) { |
| +} |
|
dgozman
2016/06/08 03:53:29
Should we send "detached" event to the target? But
pfeldman
2016/06/08 15:54:52
Don't we deliver detach reason already or should I
dgozman
2016/06/08 15:59:09
We already do. I think it may be better to deliver
|
| + |
| + |
|
dgozman
2016/06/08 03:53:29
nit: extra blank line
pfeldman
2016/06/08 15:54:52
Done.
|
| +} // namespace browser |
| +} // namespace devtools |
| +} // namespace content |