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

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

Issue 2387283003: [DevTools] Support all targets discovery in Target domain. (Closed)
Patch Set: small fix 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 1525a1c8e8e075304a53918a33f87525b8559cf0..d87a7de72a5fc89cf1b4539990b5a7487f2314f8 100644
--- a/content/browser/devtools/protocol/target_handler.cc
+++ b/content/browser/devtools/protocol/target_handler.cc
@@ -86,7 +86,7 @@ ServiceWorkerDevToolsAgentHost::Map GetMatchingServiceWorkers(
} // namespace
TargetHandler::TargetHandler()
- : enabled_(false),
+ : discover_(false),
auto_attach_(false),
wait_for_debugger_on_start_(false),
attach_to_frames_(false),
@@ -94,7 +94,7 @@ TargetHandler::TargetHandler()
}
TargetHandler::~TargetHandler() {
- Disable();
+ Detached();
}
void TargetHandler::SetRenderFrameHost(RenderFrameHostImpl* render_frame_host) {
@@ -107,7 +107,8 @@ void TargetHandler::SetClient(std::unique_ptr<Client> client) {
}
void TargetHandler::Detached() {
- Disable();
+ SetAutoAttach(false, false);
+ SetDiscoverTargets(false);
}
void TargetHandler::UpdateServiceWorkers() {
@@ -115,7 +116,7 @@ void TargetHandler::UpdateServiceWorkers() {
}
void TargetHandler::UpdateFrames() {
- if (!enabled_ || !auto_attach_ || !attach_to_frames_)
+ if (!auto_attach_ || !attach_to_frames_)
return;
HostsMap new_hosts;
@@ -143,7 +144,7 @@ void TargetHandler::UpdateFrames() {
}
void TargetHandler::UpdateServiceWorkers(bool waiting_for_debugger) {
- if (!enabled_ || !auto_attach_)
+ if (!auto_attach_)
return;
frame_urls_.clear();
@@ -199,15 +200,15 @@ void TargetHandler::TargetRemovedInternal(DevToolsAgentHost* host) {
->set_target_id(host->GetId()));
}
-void TargetHandler::AttachToTargetInternal(
+bool TargetHandler::AttachToTargetInternal(
DevToolsAgentHost* host, bool waiting_for_debugger) {
- if (host->IsAttached())
- return;
+ if (!host->AttachClient(this))
+ return false;
attached_hosts_[host->GetId()] = host;
- host->AttachClient(this);
client_->AttachedToTarget(AttachedToTargetParams::Create()
->set_target_id(host->GetId())
->set_waiting_for_debugger(waiting_for_debugger));
+ return true;
}
void TargetHandler::DetachFromTargetInternal(DevToolsAgentHost* host) {
@@ -222,26 +223,11 @@ void TargetHandler::DetachFromTargetInternal(DevToolsAgentHost* host) {
// ----------------- Protocol ----------------------
-Response TargetHandler::Enable() {
- if (enabled_)
- return Response::OK();
- enabled_ = true;
- ServiceWorkerDevToolsManager::GetInstance()->AddObserver(this);
- UpdateServiceWorkers();
- UpdateFrames();
- return Response::OK();
-}
-
-Response TargetHandler::Disable() {
- if (!enabled_)
+Response TargetHandler::SetDiscoverTargets(bool discover) {
+ if (discover_ == discover)
return Response::OK();
- enabled_ = false;
- auto_attach_ = false;
- wait_for_debugger_on_start_ = false;
- ServiceWorkerDevToolsManager::GetInstance()->RemoveObserver(this);
- for (const auto& pair : attached_hosts_)
- pair.second->DetachClient(this);
- attached_hosts_.clear();
+ discover_ = discover;
+ // TODO(dgozman): observe all agent hosts here.
return Response::OK();
}
@@ -252,8 +238,14 @@ Response TargetHandler::SetAutoAttach(
return Response::OK();
auto_attach_ = auto_attach;
if (auto_attach_) {
+ ServiceWorkerDevToolsManager::GetInstance()->AddObserver(this);
UpdateServiceWorkers();
UpdateFrames();
+ } else {
+ ServiceWorkerDevToolsManager::GetInstance()->RemoveObserver(this);
+ HostsMap empty;
+ ReattachTargetsOfType(empty, DevToolsAgentHost::kTypeFrame, false);
+ ReattachTargetsOfType(empty, DevToolsAgentHost::kTypeServiceWorker, false);
}
return Response::OK();
}
@@ -271,6 +263,24 @@ Response TargetHandler::SetAttachToFrames(bool value) {
return Response::OK();
}
+Response TargetHandler::AttachToTarget(const std::string& target_id,
+ bool* out_success) {
+ scoped_refptr<DevToolsAgentHost> agent_host(
+ DevToolsAgentHost::GetForId(target_id));
+ if (!agent_host)
+ return Response::InvalidParams("No target with such id");
+ *out_success = AttachToTargetInternal(agent_host.get(), false);
+ return Response::OK();
+}
+
+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());
+ return Response::OK();
+}
+
Response TargetHandler::SendMessageToTarget(
const std::string& target_id,
const std::string& message) {
@@ -323,9 +333,10 @@ void TargetHandler::DispatchProtocolMessage(
void TargetHandler::AgentHostClosed(
DevToolsAgentHost* host,
bool replaced_with_another_client) {
- client_->TargetRemoved(TargetRemovedParams::Create()->
+ client_->DetachedFromTarget(DetachedFromTargetParams::Create()->
set_target_id(host->GetId()));
attached_hosts_.erase(host->GetId());
+ TargetRemovedInternal(host);
}
// -------- ServiceWorkerDevToolsManager::Observer ----------
« no previous file with comments | « content/browser/devtools/protocol/target_handler.h ('k') | third_party/WebKit/Source/core/inspector/browser_protocol.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698