OLD | NEW |
---|---|
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 Loading... | |
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 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
90 } | 91 } |
91 return ServiceWorkerDevToolsManager::GetInstance() | 92 return ServiceWorkerDevToolsManager::GetInstance() |
92 ->GetDevToolsAgentHostForWorker(worker_process_id, worker_route_id); | 93 ->GetDevToolsAgentHostForWorker(worker_process_id, worker_route_id); |
93 } | 94 } |
94 | 95 |
95 DevToolsAgentHostImpl::DevToolsAgentHostImpl(const std::string& id) | 96 DevToolsAgentHostImpl::DevToolsAgentHostImpl(const std::string& id) |
96 : id_(id), | 97 : id_(id), |
97 session_id_(0), | 98 session_id_(0), |
98 client_(NULL) { | 99 client_(NULL) { |
99 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 100 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
100 DCHECK(g_instances.Get().find(id_) == g_instances.Get().end()); | |
101 g_instances.Get()[id_] = this; | |
102 } | 101 } |
103 | 102 |
104 DevToolsAgentHostImpl::~DevToolsAgentHostImpl() { | 103 DevToolsAgentHostImpl::~DevToolsAgentHostImpl() { |
105 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 104 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
106 g_instances.Get().erase(g_instances.Get().find(id_)); | 105 NotifyDestroyed(); |
107 } | 106 } |
108 | 107 |
109 // static | 108 // static |
110 scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForId( | 109 scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForId( |
111 const std::string& id) { | 110 const std::string& id) { |
112 if (g_instances == NULL) | 111 if (g_instances == NULL) |
113 return NULL; | 112 return NULL; |
114 Instances::iterator it = g_instances.Get().find(id); | 113 Instances::iterator it = g_instances.Get().find(id); |
115 if (it == g_instances.Get().end()) | 114 if (it == g_instances.Get().end()) |
116 return NULL; | 115 return NULL; |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
287 DevToolsAgentHostClient* client = agent_host->client_; | 286 DevToolsAgentHostClient* client = agent_host->client_; |
288 agent_host->client_ = NULL; | 287 agent_host->client_ = NULL; |
289 client->AgentHostClosed(agent_host, true); | 288 client->AgentHostClosed(agent_host, true); |
290 agent_host->InnerDetach(); | 289 agent_host->InnerDetach(); |
291 } | 290 } |
292 } | 291 } |
293 } | 292 } |
294 | 293 |
295 // static | 294 // static |
296 void DevToolsAgentHost::AddObserver(DevToolsAgentHostObserver* observer) { | 295 void DevToolsAgentHost::AddObserver(DevToolsAgentHostObserver* observer) { |
296 if (observer->ShouldForceDevToolsAgentHostCreation()) { | |
297 if (!DevToolsAgentHostImpl::s_force_creation_count_) { | |
298 // Force all agent hosts when first observer is added. | |
299 DevToolsAgentHost::GetOrCreateAll(); | |
pfeldman
2016/10/14 23:58:52
DevToolsAgentHost::GetOrCreateAll
DCHECK notified
| |
300 } | |
301 DevToolsAgentHostImpl::s_force_creation_count_++; | |
302 } | |
303 | |
297 g_observers.Get().AddObserver(observer); | 304 g_observers.Get().AddObserver(observer); |
305 for (const auto& id_host : g_instances.Get()) | |
306 observer->DevToolsAgentHostCreated(id_host.second); | |
298 } | 307 } |
299 | 308 |
300 // static | 309 // static |
301 void DevToolsAgentHost::RemoveObserver(DevToolsAgentHostObserver* observer) { | 310 void DevToolsAgentHost::RemoveObserver(DevToolsAgentHostObserver* observer) { |
311 if (observer->ShouldForceDevToolsAgentHostCreation()) | |
312 DevToolsAgentHostImpl::s_force_creation_count_--; | |
302 g_observers.Get().RemoveObserver(observer); | 313 g_observers.Get().RemoveObserver(observer); |
303 } | 314 } |
304 | 315 |
316 // static | |
317 bool DevToolsAgentHostImpl::ShouldForceCreation() { | |
318 return s_force_creation_count_; | |
319 } | |
320 | |
321 void DevToolsAgentHostImpl::NotifyCreated() { | |
322 DCHECK(g_instances.Get().find(id_) == g_instances.Get().end()); | |
323 g_instances.Get()[id_] = this; | |
324 for (auto& observer : g_observers.Get()) | |
325 observer.DevToolsAgentHostCreated(this); | |
326 } | |
327 | |
305 void DevToolsAgentHostImpl::NotifyAttached() { | 328 void DevToolsAgentHostImpl::NotifyAttached() { |
306 if (!s_attached_count_) { | 329 if (!s_attached_count_) { |
307 BrowserThread::PostTask( | 330 BrowserThread::PostTask( |
308 BrowserThread::IO, | 331 BrowserThread::IO, |
309 FROM_HERE, | 332 FROM_HERE, |
310 base::Bind(&NetLogObserver::Attach, | 333 base::Bind(&NetLogObserver::Attach, |
311 GetContentClient()->browser()->GetNetLog())); | 334 GetContentClient()->browser()->GetNetLog())); |
312 } | 335 } |
313 ++s_attached_count_; | 336 ++s_attached_count_; |
314 | 337 |
315 for (auto& observer : g_observers.Get()) | 338 for (auto& observer : g_observers.Get()) |
316 observer.DevToolsAgentHostAttached(this); | 339 observer.DevToolsAgentHostAttached(this); |
317 } | 340 } |
318 | 341 |
319 void DevToolsAgentHostImpl::NotifyDetached() { | 342 void DevToolsAgentHostImpl::NotifyDetached() { |
320 --s_attached_count_; | 343 --s_attached_count_; |
321 if (!s_attached_count_) { | 344 if (!s_attached_count_) { |
322 BrowserThread::PostTask( | 345 BrowserThread::PostTask( |
323 BrowserThread::IO, | 346 BrowserThread::IO, |
324 FROM_HERE, | 347 FROM_HERE, |
325 base::Bind(&NetLogObserver::Detach)); | 348 base::Bind(&NetLogObserver::Detach)); |
326 } | 349 } |
327 | 350 |
328 for (auto& observer : g_observers.Get()) | 351 for (auto& observer : g_observers.Get()) |
329 observer.DevToolsAgentHostDetached(this); | 352 observer.DevToolsAgentHostDetached(this); |
330 } | 353 } |
331 | 354 |
355 void DevToolsAgentHostImpl::NotifyDestroyed() { | |
356 DCHECK(g_instances.Get().find(id_) != g_instances.Get().end()); | |
357 for (auto& observer : g_observers.Get()) | |
358 observer.DevToolsAgentHostDestroyed(this); | |
359 g_instances.Get().erase(g_instances.Get().find(id_)); | |
pfeldman
2016/10/14 23:58:52
Erase by id.
| |
360 } | |
361 | |
332 // DevToolsMessageChunkProcessor ----------------------------------------------- | 362 // DevToolsMessageChunkProcessor ----------------------------------------------- |
333 | 363 |
334 DevToolsMessageChunkProcessor::DevToolsMessageChunkProcessor( | 364 DevToolsMessageChunkProcessor::DevToolsMessageChunkProcessor( |
335 const SendMessageCallback& callback) | 365 const SendMessageCallback& callback) |
336 : callback_(callback), | 366 : callback_(callback), |
337 message_buffer_size_(0), | 367 message_buffer_size_(0), |
338 last_call_id_(0) { | 368 last_call_id_(0) { |
339 } | 369 } |
340 | 370 |
341 DevToolsMessageChunkProcessor::~DevToolsMessageChunkProcessor() { | 371 DevToolsMessageChunkProcessor::~DevToolsMessageChunkProcessor() { |
(...skipping 27 matching lines...) Expand all Loading... | |
369 if (message_buffer_.size() != message_buffer_size_) | 399 if (message_buffer_.size() != message_buffer_size_) |
370 return false; | 400 return false; |
371 callback_.Run(chunk.session_id, message_buffer_); | 401 callback_.Run(chunk.session_id, message_buffer_); |
372 message_buffer_ = std::string(); | 402 message_buffer_ = std::string(); |
373 message_buffer_size_ = 0; | 403 message_buffer_size_ = 0; |
374 } | 404 } |
375 return true; | 405 return true; |
376 } | 406 } |
377 | 407 |
378 } // namespace content | 408 } // namespace content |
OLD | NEW |