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

Side by Side Diff: content/browser/devtools/devtools_agent_host_impl.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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/devtools/devtools_agent_host_impl.h" 5 #include "content/browser/devtools/devtools_agent_host_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 24 matching lines...) Expand all
35 } // namespace 35 } // namespace
36 36
37 char DevToolsAgentHost::kTypePage[] = "page"; 37 char DevToolsAgentHost::kTypePage[] = "page";
38 char DevToolsAgentHost::kTypeFrame[] = "iframe"; 38 char DevToolsAgentHost::kTypeFrame[] = "iframe";
39 char DevToolsAgentHost::kTypeSharedWorker[] = "shared_worker"; 39 char DevToolsAgentHost::kTypeSharedWorker[] = "shared_worker";
40 char DevToolsAgentHost::kTypeServiceWorker[] = "service_worker"; 40 char DevToolsAgentHost::kTypeServiceWorker[] = "service_worker";
41 char DevToolsAgentHost::kTypeExternal[] = "external"; 41 char DevToolsAgentHost::kTypeExternal[] = "external";
42 char DevToolsAgentHost::kTypeBrowser[] = "browser"; 42 char DevToolsAgentHost::kTypeBrowser[] = "browser";
43 char DevToolsAgentHost::kTypeOther[] = "other"; 43 char DevToolsAgentHost::kTypeOther[] = "other";
44 int DevToolsAgentHostImpl::s_attached_count_ = 0; 44 int DevToolsAgentHostImpl::s_attached_count_ = 0;
45 int DevToolsAgentHostImpl::s_force_creation_count_ = 0;
45 46
46 // static 47 // static
47 std::string DevToolsAgentHost::GetProtocolVersion() { 48 std::string DevToolsAgentHost::GetProtocolVersion() {
48 return std::string(devtools::kProtocolVersion); 49 return std::string(devtools::kProtocolVersion);
49 } 50 }
50 51
51 // static 52 // static
52 bool DevToolsAgentHost::IsSupportedProtocolVersion(const std::string& version) { 53 bool DevToolsAgentHost::IsSupportedProtocolVersion(const std::string& version) {
53 return devtools::IsSupportedProtocolVersion(version); 54 return devtools::IsSupportedProtocolVersion(version);
54 } 55 }
55 56
56 // static 57 // static
57 DevToolsAgentHost::List DevToolsAgentHost::GetOrCreateAll() { 58 DevToolsAgentHost::List DevToolsAgentHost::GetOrCreateAll() {
58 List result; 59 List result;
59 SharedWorkerDevToolsAgentHost::List shared_list; 60 SharedWorkerDevToolsAgentHost::List shared_list;
60 SharedWorkerDevToolsManager::GetInstance()->AddAllAgentHosts(&shared_list); 61 SharedWorkerDevToolsManager::GetInstance()->AddAllAgentHosts(&shared_list);
61 for (const auto& host : shared_list) 62 for (const auto& host : shared_list)
62 result.push_back(host); 63 result.push_back(host);
63 64
64 ServiceWorkerDevToolsAgentHost::List service_list; 65 ServiceWorkerDevToolsAgentHost::List service_list;
65 ServiceWorkerDevToolsManager::GetInstance()->AddAllAgentHosts(&service_list); 66 ServiceWorkerDevToolsManager::GetInstance()->AddAllAgentHosts(&service_list);
66 for (const auto& host : service_list) 67 for (const auto& host : service_list)
67 result.push_back(host); 68 result.push_back(host);
68 69
69 RenderFrameDevToolsAgentHost::AddAllAgentHosts(&result); 70 RenderFrameDevToolsAgentHost::AddAllAgentHosts(&result);
71
72 #if DCHECK_IS_ON()
73 for (auto it : result) {
74 DevToolsAgentHostImpl* host = static_cast<DevToolsAgentHostImpl*>(it.get());
75 DCHECK(g_instances.Get().find(host->id_) != g_instances.Get().end());
76 }
77 #endif
78
70 return result; 79 return result;
71 } 80 }
72 81
73 // static 82 // static
74 void DevToolsAgentHost::DiscoverAllHosts(const DiscoveryCallback& callback) { 83 void DevToolsAgentHost::DiscoverAllHosts(const DiscoveryCallback& callback) {
75 DevToolsManager* manager = DevToolsManager::GetInstance(); 84 DevToolsManager* manager = DevToolsManager::GetInstance();
76 if (!manager->delegate() || !manager->delegate()->DiscoverTargets(callback)) 85 if (!manager->delegate() || !manager->delegate()->DiscoverTargets(callback))
77 callback.Run(DevToolsAgentHost::GetOrCreateAll()); 86 callback.Run(DevToolsAgentHost::GetOrCreateAll());
78 } 87 }
79 88
(...skipping 10 matching lines...) Expand all
90 } 99 }
91 return ServiceWorkerDevToolsManager::GetInstance() 100 return ServiceWorkerDevToolsManager::GetInstance()
92 ->GetDevToolsAgentHostForWorker(worker_process_id, worker_route_id); 101 ->GetDevToolsAgentHostForWorker(worker_process_id, worker_route_id);
93 } 102 }
94 103
95 DevToolsAgentHostImpl::DevToolsAgentHostImpl(const std::string& id) 104 DevToolsAgentHostImpl::DevToolsAgentHostImpl(const std::string& id)
96 : id_(id), 105 : id_(id),
97 session_id_(0), 106 session_id_(0),
98 client_(NULL) { 107 client_(NULL) {
99 DCHECK_CURRENTLY_ON(BrowserThread::UI); 108 DCHECK_CURRENTLY_ON(BrowserThread::UI);
100 DCHECK(g_instances.Get().find(id_) == g_instances.Get().end());
101 g_instances.Get()[id_] = this;
102 } 109 }
103 110
104 DevToolsAgentHostImpl::~DevToolsAgentHostImpl() { 111 DevToolsAgentHostImpl::~DevToolsAgentHostImpl() {
105 DCHECK_CURRENTLY_ON(BrowserThread::UI); 112 DCHECK_CURRENTLY_ON(BrowserThread::UI);
106 g_instances.Get().erase(g_instances.Get().find(id_)); 113 NotifyDestroyed();
107 } 114 }
108 115
109 // static 116 // static
110 scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForId( 117 scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForId(
111 const std::string& id) { 118 const std::string& id) {
112 if (g_instances == NULL) 119 if (g_instances == NULL)
113 return NULL; 120 return NULL;
114 Instances::iterator it = g_instances.Get().find(id); 121 Instances::iterator it = g_instances.Get().find(id);
115 if (it == g_instances.Get().end()) 122 if (it == g_instances.Get().end())
116 return NULL; 123 return NULL;
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 DevToolsAgentHostClient* client = agent_host->client_; 294 DevToolsAgentHostClient* client = agent_host->client_;
288 agent_host->client_ = NULL; 295 agent_host->client_ = NULL;
289 client->AgentHostClosed(agent_host, true); 296 client->AgentHostClosed(agent_host, true);
290 agent_host->InnerDetach(); 297 agent_host->InnerDetach();
291 } 298 }
292 } 299 }
293 } 300 }
294 301
295 // static 302 // static
296 void DevToolsAgentHost::AddObserver(DevToolsAgentHostObserver* observer) { 303 void DevToolsAgentHost::AddObserver(DevToolsAgentHostObserver* observer) {
304 if (observer->ShouldForceDevToolsAgentHostCreation()) {
305 if (!DevToolsAgentHostImpl::s_force_creation_count_) {
306 // Force all agent hosts when first observer is added.
307 DevToolsAgentHost::GetOrCreateAll();
308 }
309 DevToolsAgentHostImpl::s_force_creation_count_++;
310 }
311
297 g_observers.Get().AddObserver(observer); 312 g_observers.Get().AddObserver(observer);
313 for (const auto& id_host : g_instances.Get())
314 observer->DevToolsAgentHostCreated(id_host.second);
298 } 315 }
299 316
300 // static 317 // static
301 void DevToolsAgentHost::RemoveObserver(DevToolsAgentHostObserver* observer) { 318 void DevToolsAgentHost::RemoveObserver(DevToolsAgentHostObserver* observer) {
319 if (observer->ShouldForceDevToolsAgentHostCreation())
320 DevToolsAgentHostImpl::s_force_creation_count_--;
302 g_observers.Get().RemoveObserver(observer); 321 g_observers.Get().RemoveObserver(observer);
303 } 322 }
304 323
324 // static
325 bool DevToolsAgentHostImpl::ShouldForceCreation() {
326 return !!s_force_creation_count_;
327 }
328
329 void DevToolsAgentHostImpl::NotifyCreated() {
330 DCHECK(g_instances.Get().find(id_) == g_instances.Get().end());
331 g_instances.Get()[id_] = this;
332 for (auto& observer : g_observers.Get())
333 observer.DevToolsAgentHostCreated(this);
334 }
335
305 void DevToolsAgentHostImpl::NotifyAttached() { 336 void DevToolsAgentHostImpl::NotifyAttached() {
306 if (!s_attached_count_) { 337 if (!s_attached_count_) {
307 BrowserThread::PostTask( 338 BrowserThread::PostTask(
308 BrowserThread::IO, 339 BrowserThread::IO,
309 FROM_HERE, 340 FROM_HERE,
310 base::Bind(&NetLogObserver::Attach, 341 base::Bind(&NetLogObserver::Attach,
311 GetContentClient()->browser()->GetNetLog())); 342 GetContentClient()->browser()->GetNetLog()));
312 } 343 }
313 ++s_attached_count_; 344 ++s_attached_count_;
314 345
315 for (auto& observer : g_observers.Get()) 346 for (auto& observer : g_observers.Get())
316 observer.DevToolsAgentHostAttached(this); 347 observer.DevToolsAgentHostAttached(this);
317 } 348 }
318 349
319 void DevToolsAgentHostImpl::NotifyDetached() { 350 void DevToolsAgentHostImpl::NotifyDetached() {
320 --s_attached_count_; 351 --s_attached_count_;
321 if (!s_attached_count_) { 352 if (!s_attached_count_) {
322 BrowserThread::PostTask( 353 BrowserThread::PostTask(
323 BrowserThread::IO, 354 BrowserThread::IO,
324 FROM_HERE, 355 FROM_HERE,
325 base::Bind(&NetLogObserver::Detach)); 356 base::Bind(&NetLogObserver::Detach));
326 } 357 }
327 358
328 for (auto& observer : g_observers.Get()) 359 for (auto& observer : g_observers.Get())
329 observer.DevToolsAgentHostDetached(this); 360 observer.DevToolsAgentHostDetached(this);
330 } 361 }
331 362
363 void DevToolsAgentHostImpl::NotifyDestroyed() {
364 DCHECK(g_instances.Get().find(id_) != g_instances.Get().end());
365 for (auto& observer : g_observers.Get())
366 observer.DevToolsAgentHostDestroyed(this);
367 g_instances.Get().erase(id_);
368 }
369
332 // DevToolsMessageChunkProcessor ----------------------------------------------- 370 // DevToolsMessageChunkProcessor -----------------------------------------------
333 371
334 DevToolsMessageChunkProcessor::DevToolsMessageChunkProcessor( 372 DevToolsMessageChunkProcessor::DevToolsMessageChunkProcessor(
335 const SendMessageCallback& callback) 373 const SendMessageCallback& callback)
336 : callback_(callback), 374 : callback_(callback),
337 message_buffer_size_(0), 375 message_buffer_size_(0),
338 last_call_id_(0) { 376 last_call_id_(0) {
339 } 377 }
340 378
341 DevToolsMessageChunkProcessor::~DevToolsMessageChunkProcessor() { 379 DevToolsMessageChunkProcessor::~DevToolsMessageChunkProcessor() {
(...skipping 27 matching lines...) Expand all
369 if (message_buffer_.size() != message_buffer_size_) 407 if (message_buffer_.size() != message_buffer_size_)
370 return false; 408 return false;
371 callback_.Run(chunk.session_id, message_buffer_); 409 callback_.Run(chunk.session_id, message_buffer_);
372 message_buffer_ = std::string(); 410 message_buffer_ = std::string();
373 message_buffer_size_ = 0; 411 message_buffer_size_ = 0;
374 } 412 }
375 return true; 413 return true;
376 } 414 }
377 415
378 } // namespace content 416 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/devtools/devtools_agent_host_impl.h ('k') | content/browser/devtools/forwarding_agent_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698