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

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

Issue 2408133004: [DevTools] Implement Target.setDiscoverTargets method. (Closed)
Patch Set: rebased Created 4 years, 2 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/target_handler.cc
diff --git a/content/browser/devtools/protocol/target_handler.cc b/content/browser/devtools/protocol/target_handler.cc
index d87a7de72a5fc89cf1b4539990b5a7487f2314f8..f6f57ad99d6f8935036e1d2230863114c5cfbb48 100644
--- a/content/browser/devtools/protocol/target_handler.cc
+++ b/content/browser/devtools/protocol/target_handler.cc
@@ -175,29 +175,34 @@ void TargetHandler::ReattachTargetsOfType(
if (pair.second->GetType() == type &&
new_hosts.find(pair.first) == new_hosts.end()) {
DetachFromTargetInternal(pair.second.get());
- TargetRemovedInternal(pair.second.get());
}
}
for (const auto& pair : new_hosts) {
- if (old_hosts.find(pair.first) == old_hosts.end()) {
- TargetCreatedInternal(pair.second.get());
+ if (old_hosts.find(pair.first) == old_hosts.end())
AttachToTargetInternal(pair.second.get(), waiting_for_debugger);
- }
}
}
void TargetHandler::TargetCreatedInternal(DevToolsAgentHost* host) {
+ if (reported_hosts_.find(host->GetId()) != reported_hosts_.end())
+ return;
client_->TargetCreated(
TargetCreatedParams::Create()->set_target_info(
TargetInfo::Create()->set_target_id(host->GetId())
->set_title(host->GetTitle())
->set_url(host->GetURL().spec())
->set_type(host->GetType())));
+ reported_hosts_[host->GetId()] = host;
}
-void TargetHandler::TargetRemovedInternal(DevToolsAgentHost* host) {
- client_->TargetRemoved(TargetRemovedParams::Create()
+void TargetHandler::TargetDestroyedInternal(
+ DevToolsAgentHost* host) {
+ auto it = reported_hosts_.find(host->GetId());
+ if (it == reported_hosts_.end())
+ return;
+ client_->TargetDestroyed(TargetDestroyedParams::Create()
->set_target_id(host->GetId()));
+ reported_hosts_.erase(it);
}
bool TargetHandler::AttachToTargetInternal(
@@ -206,7 +211,11 @@ bool TargetHandler::AttachToTargetInternal(
return false;
attached_hosts_[host->GetId()] = host;
client_->AttachedToTarget(AttachedToTargetParams::Create()
- ->set_target_id(host->GetId())
+ ->set_target_info(
+ TargetInfo::Create()->set_target_id(host->GetId())
+ ->set_title(host->GetTitle())
+ ->set_url(host->GetURL().spec())
+ ->set_type(host->GetType()))
->set_waiting_for_debugger(waiting_for_debugger));
return true;
}
@@ -227,7 +236,14 @@ Response TargetHandler::SetDiscoverTargets(bool discover) {
if (discover_ == discover)
return Response::OK();
discover_ = discover;
- // TODO(dgozman): observe all agent hosts here.
+ if (discover_) {
+ DevToolsAgentHost::AddObserver(this);
+ } else {
+ DevToolsAgentHost::RemoveObserver(this);
+ RawHostsMap copy = reported_hosts_;
+ for (const auto& id_host : copy)
+ TargetDestroyedInternal(id_host.second);
+ }
return Response::OK();
}
@@ -265,11 +281,10 @@ Response TargetHandler::SetAttachToFrames(bool value) {
Response TargetHandler::AttachToTarget(const std::string& target_id,
bool* out_success) {
- scoped_refptr<DevToolsAgentHost> agent_host(
- DevToolsAgentHost::GetForId(target_id));
- if (!agent_host)
+ auto it = reported_hosts_.find(target_id);
+ if (it == reported_hosts_.end())
return Response::InvalidParams("No target with such id");
- *out_success = AttachToTargetInternal(agent_host.get(), false);
+ *out_success = AttachToTargetInternal(it->second, false);
return Response::OK();
}
@@ -277,7 +292,8 @@ Response TargetHandler::DetachFromTarget(const std::string& target_id) {
auto it = attached_hosts_.find(target_id);
if (it == attached_hosts_.end())
return Response::InternalError("Not attached to the target");
- DetachFromTargetInternal(it->second.get());
+ DevToolsAgentHost* agent_host = it->second.get();
+ DetachFromTargetInternal(agent_host);
return Response::OK();
}
@@ -294,6 +310,7 @@ Response TargetHandler::SendMessageToTarget(
Response TargetHandler::GetTargetInfo(
const std::string& target_id,
scoped_refptr<TargetInfo>* target_info) {
+ // TODO(dgozman): only allow reported hosts.
scoped_refptr<DevToolsAgentHost> agent_host(
DevToolsAgentHost::GetForId(target_id));
if (!agent_host)
@@ -307,6 +324,7 @@ Response TargetHandler::GetTargetInfo(
}
Response TargetHandler::ActivateTarget(const std::string& target_id) {
+ // TODO(dgozman): only allow reported hosts.
scoped_refptr<DevToolsAgentHost> agent_host(
DevToolsAgentHost::GetForId(target_id));
if (!agent_host)
@@ -336,7 +354,22 @@ void TargetHandler::AgentHostClosed(
client_->DetachedFromTarget(DetachedFromTargetParams::Create()->
set_target_id(host->GetId()));
attached_hosts_.erase(host->GetId());
- TargetRemovedInternal(host);
+}
+
+// -------------- DevToolsAgentHostObserver -----------------
+
+bool TargetHandler::ShouldForceDevToolsAgentHostCreation() {
+ return true;
+}
+
+void TargetHandler::DevToolsAgentHostCreated(DevToolsAgentHost* agent_host) {
+ DCHECK(attached_hosts_.find(agent_host->GetId()) == attached_hosts_.end());
+ TargetCreatedInternal(agent_host);
+}
+
+void TargetHandler::DevToolsAgentHostDestroyed(DevToolsAgentHost* agent_host) {
+ DCHECK(attached_hosts_.find(agent_host->GetId()) == attached_hosts_.end());
+ TargetDestroyedInternal(agent_host);
}
// -------- ServiceWorkerDevToolsManager::Observer ----------
« no previous file with comments | « content/browser/devtools/protocol/target_handler.h ('k') | content/browser/devtools/render_frame_devtools_agent_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698