OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/browser/devtools/protocol/browser_handler.h" | |
6 | |
7 namespace content { | |
8 namespace devtools { | |
9 namespace browser { | |
10 | |
11 namespace { | |
12 const char kTargetTypeWebContents[] = "web_contents"; | |
13 const char kTargetTypeFrame[] = "frame"; | |
14 const char kTargetTypeSharedWorker[] = "shared_worker"; | |
15 const char kTargetTypeServiceWorker[] = "service_worker"; | |
16 const char kTargetTypeServiceOther[] = "other"; | |
17 } | |
18 | |
19 using Response = DevToolsProtocolClient::Response; | |
20 | |
21 BrowserHandler::BrowserHandler() { | |
22 } | |
23 | |
24 BrowserHandler::~BrowserHandler() { | |
25 } | |
26 | |
27 void BrowserHandler::SetClient(std::unique_ptr<Client> client) { | |
28 client_.swap(client); | |
29 } | |
30 | |
31 static std::string GetTypeString(DevToolsAgentHost* agent_host) { | |
32 switch (agent_host->GetType()) { | |
33 case DevToolsAgentHost::TYPE_WEB_CONTENTS: | |
34 return kTargetTypeWebContents; | |
35 case DevToolsAgentHost::TYPE_FRAME: | |
36 return kTargetTypeFrame; | |
37 case DevToolsAgentHost::TYPE_SHARED_WORKER: | |
38 return kTargetTypeSharedWorker; | |
39 case DevToolsAgentHost::TYPE_SERVICE_WORKER: | |
40 return kTargetTypeServiceWorker; | |
41 default: | |
42 return kTargetTypeServiceOther; | |
43 } | |
44 } | |
45 | |
46 Response BrowserHandler::GetTargets(TargetInfos* infos) { | |
47 DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll(); | |
48 for (DevToolsAgentHost::List::iterator it = agents.begin(); | |
49 it != agents.end(); ++it) { | |
50 DevToolsAgentHost* agent_host = (*it).get(); | |
51 scoped_refptr<devtools::browser::TargetInfo> info = | |
52 devtools::browser::TargetInfo::Create()-> | |
53 set_target_id(agent_host->GetId())-> | |
54 set_type(GetTypeString(agent_host))-> | |
55 set_title(agent_host->GetTitle())-> | |
56 set_url(agent_host->GetURL().spec()); | |
57 } | |
58 return Response::OK(); | |
59 } | |
60 | |
61 Response BrowserHandler::Attach(const std::string& targetId) { | |
62 scoped_refptr<DevToolsAgentHost> agent_host = | |
63 DevToolsAgentHost::GetForId(targetId); | |
64 if (!agent_host) | |
65 return Response::ServerError("No host with given id found"); | |
66 bool success = agent_host->AttachClient(this); | |
67 return success ? Response::OK() : | |
68 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.
| |
69 } | |
70 | |
71 Response BrowserHandler::Detach(const std::string& targetId) { | |
72 scoped_refptr<DevToolsAgentHost> agent_host = | |
73 DevToolsAgentHost::GetForId(targetId); | |
74 if (!agent_host) | |
75 return Response::ServerError("No host with given id found"); | |
76 bool success = agent_host->DetachClient(this); | |
77 return success ? Response::OK() : | |
78 Response::ServerError("Host is not being debugged"); | |
79 } | |
80 | |
81 Response BrowserHandler::SendMessage(const std::string& targetId, | |
82 const std::string& message) { | |
83 scoped_refptr<DevToolsAgentHost> agent_host = | |
84 DevToolsAgentHost::GetForId(targetId); | |
85 if (!agent_host) | |
86 return Response::ServerError("No host with given id found"); | |
87 agent_host->DispatchProtocolMessage(message); | |
88 return Response::OK(); | |
89 } | |
90 | |
91 void BrowserHandler::DispatchProtocolMessage( | |
92 DevToolsAgentHost* agent_host, const std::string& message) { | |
93 client_->DispatchMessage(DispatchMessageParams::Create()-> | |
94 set_target_id(agent_host->GetId())-> | |
95 set_message(message)); | |
96 } | |
97 | |
98 void BrowserHandler::AgentHostClosed(DevToolsAgentHost* agent_host, | |
99 bool replaced_with_another_client) { | |
100 } | |
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
| |
101 | |
102 | |
dgozman
2016/06/08 03:53:29
nit: extra blank line
pfeldman
2016/06/08 15:54:52
Done.
| |
103 } // namespace browser | |
104 } // namespace devtools | |
105 } // namespace content | |
OLD | NEW |