Index: chrome/browser/devtools/devtools_targets_ui.cc |
diff --git a/chrome/browser/devtools/devtools_targets_ui.cc b/chrome/browser/devtools/devtools_targets_ui.cc |
index 9e3b8359ce54c124fc29e4604fec4c87592d4116..eab1321ada830b4775084942347e83f4053577dd 100644 |
--- a/chrome/browser/devtools/devtools_targets_ui.cc |
+++ b/chrome/browser/devtools/devtools_targets_ui.cc |
@@ -96,14 +96,17 @@ class RenderViewHostTargetsUIHandler |
const content::NotificationDetails& details) OVERRIDE; |
void UpdateTargets(); |
+ void OnTargetsReceived(const DevToolsTargetImpl::List& targets); |
content::NotificationRegistrar notification_registrar_; |
scoped_ptr<CancelableTimer> timer_; |
+ base::WeakPtrFactory<RenderViewHostTargetsUIHandler> weak_factory_; |
}; |
RenderViewHostTargetsUIHandler::RenderViewHostTargetsUIHandler( |
const Callback& callback) |
- : DevToolsTargetsUIHandler(kTargetSourceRenderer, callback) { |
+ : DevToolsTargetsUIHandler(kTargetSourceRenderer, callback), |
+ weak_factory_(this) { |
notification_registrar_.Add(this, |
content::NOTIFICATION_WEB_CONTENTS_CONNECTED, |
content::NotificationService::AllSources()); |
@@ -133,15 +136,19 @@ void RenderViewHostTargetsUIHandler::Observe( |
} |
void RenderViewHostTargetsUIHandler::UpdateTargets() { |
+ DevToolsTargetImpl::EnumerateRenderViewHostTargets( |
+ base::Bind(&RenderViewHostTargetsUIHandler::OnTargetsReceived, |
+ weak_factory_.GetWeakPtr())); |
+} |
+ |
+void RenderViewHostTargetsUIHandler::OnTargetsReceived( |
+ const DevToolsTargetImpl::List& targets) { |
base::ListValue list_value; |
std::map<std::string, base::DictionaryValue*> id_to_descriptor; |
- DevToolsTargetImpl::List targets = |
- DevToolsTargetImpl::EnumerateRenderViewHostTargets(); |
- |
STLDeleteValues(&targets_); |
- for (DevToolsTargetImpl::List::iterator it = targets.begin(); |
+ for (DevToolsTargetImpl::List::const_iterator it = targets.begin(); |
it != targets.end(); ++it) { |
DevToolsTargetImpl* target = *it; |
targets_[target->GetId()] = target; |