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

Side by Side Diff: content/public/browser/devtools_target_list.cc

Issue 12319114: Extract debugger target enumeration into a separate class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@debugger
Patch Set: Fixed compile Created 7 years, 9 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/public/browser/devtools_target_list.h"
6
7 #include "base/memory/singleton.h"
8 #include "base/values.h"
9 #include "content/public/browser/devtools_agent_host.h"
10 #include "content/public/browser/render_process_host.h"
11 #include "content/public/browser/render_view_host.h"
12
13 namespace content {
14
15 DevToolsTargetList* DevToolsTargetList::GetInstance() {
16 return Singleton<DevToolsTargetList>::get();
17 }
18
19 void DevToolsTargetList::Refresh() {
20 GarbageCollect();
21
22 for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator());
23 !it.IsAtEnd(); it.Advance()) {
24 RenderProcessHost* render_process_host = it.GetCurrentValue();
25 DCHECK(render_process_host);
26
27 // Ignore processes that don't have a connection, such as crashed contents.
28 if (!render_process_host->HasConnection())
29 continue;
30
31 RenderProcessHost::RenderWidgetHostsIterator rwit(
32 render_process_host->GetRenderWidgetHostsIterator());
33 for (; !rwit.IsAtEnd(); rwit.Advance()) {
34 const RenderWidgetHost* widget = rwit.GetCurrentValue();
35 DCHECK(widget);
36 if (!widget || !widget->IsRenderView())
37 continue;
38
39 RenderViewHost* rvh =
40 RenderViewHost::From(const_cast<RenderWidgetHost*>(widget));
41 scoped_refptr<DevToolsAgentHost> agent(DevToolsAgentHost::GetFor(rvh));
42 agents_map_[agent->GetId()] = agent;
43 }
44 }
45 }
46
47 void DevToolsTargetList::Register(DevToolsAgentHost* agent_host) {
pfeldman 2013/03/05 12:06:41 You don't need this.
Vladislav Kaznacheev 2013/03/05 13:35:44 Renamed to Retain. On 2013/03/05 12:06:41, pfeldm
48 GarbageCollect();
49 agents_map_[agent_host->GetId()] = agent_host;
50 }
51
52 DevToolsAgentHost* DevToolsTargetList::Lookup(const std::string& id) {
53 GarbageCollect();
54 AgentsMap::iterator it = agents_map_.find(id);
55 if (it != agents_map_.end())
56 return it->second;
57 return NULL;
58 }
59
60 void DevToolsTargetList::GarbageCollect() {
61 AgentsMap::iterator it = agents_map_.begin();
62 while (it != agents_map_.end()) {
63 if (!it->second->GetRenderViewHost())
64 agents_map_.erase(it++);
65 else
66 ++it;
67 }
68 }
69
70 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698