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

Unified Diff: content/browser/devtools/protocol/browser_handler.cc

Issue 2047833002: DevTools: introduce browser domain for basic target discovery. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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: 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

Powered by Google App Engine
This is Rietveld 408576698