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

Side by Side Diff: chrome/browser/metrics/plugin_metrics_provider.cc

Issue 2000803003: Use std::unique_ptr for base::DictionaryValue and base::ListValue's internal store. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More fixes Created 4 years, 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/metrics/plugin_metrics_provider.h" 5 #include "chrome/browser/metrics/plugin_metrics_provider.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 10
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 void PluginMetricsProvider::ProvideStabilityMetrics( 134 void PluginMetricsProvider::ProvideStabilityMetrics(
135 metrics::SystemProfileProto* system_profile_proto) { 135 metrics::SystemProfileProto* system_profile_proto) {
136 RecordCurrentStateIfPending(); 136 RecordCurrentStateIfPending();
137 const base::ListValue* plugin_stats_list = local_state_->GetList( 137 const base::ListValue* plugin_stats_list = local_state_->GetList(
138 prefs::kStabilityPluginStats); 138 prefs::kStabilityPluginStats);
139 if (!plugin_stats_list) 139 if (!plugin_stats_list)
140 return; 140 return;
141 141
142 metrics::SystemProfileProto::Stability* stability = 142 metrics::SystemProfileProto::Stability* stability =
143 system_profile_proto->mutable_stability(); 143 system_profile_proto->mutable_stability();
144 for (base::ListValue::const_iterator iter = plugin_stats_list->begin(); 144 for (const auto& value : *plugin_stats_list) {
145 iter != plugin_stats_list->end(); ++iter) { 145 base::DictionaryValue* plugin_dict;
146 if (!(*iter)->IsType(base::Value::TYPE_DICTIONARY)) { 146 if (!value->GetAsDictionary(&plugin_dict)) {
147 NOTREACHED(); 147 NOTREACHED();
148 continue; 148 continue;
149 } 149 }
150 base::DictionaryValue* plugin_dict =
151 static_cast<base::DictionaryValue*>(*iter);
152 150
153 // Note that this search is potentially a quadratic operation, but given the 151 // Note that this search is potentially a quadratic operation, but given the
154 // low number of plugins installed on a "reasonable" setup, this should be 152 // low number of plugins installed on a "reasonable" setup, this should be
155 // fine. 153 // fine.
156 // TODO(isherman): Verify that this does not show up as a hotspot in 154 // TODO(isherman): Verify that this does not show up as a hotspot in
157 // profiler runs. 155 // profiler runs.
158 const metrics::SystemProfileProto::Plugin* system_profile_plugin = NULL; 156 const metrics::SystemProfileProto::Plugin* system_profile_plugin = NULL;
159 std::string plugin_name; 157 std::string plugin_name;
160 plugin_dict->GetString(prefs::kStabilityPluginName, &plugin_name); 158 plugin_dict->GetString(prefs::kStabilityPluginName, &plugin_name);
161 for (int i = 0; i < system_profile_proto->plugin_size(); ++i) { 159 for (int i = 0; i < system_profile_proto->plugin_size(); ++i) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 local_state_->ClearPref(prefs::kStabilityPluginStats); 201 local_state_->ClearPref(prefs::kStabilityPluginStats);
204 } 202 }
205 203
206 // Saves plugin-related updates from the in-object buffer to Local State 204 // Saves plugin-related updates from the in-object buffer to Local State
207 // for retrieval next time we send a Profile log (generally next launch). 205 // for retrieval next time we send a Profile log (generally next launch).
208 void PluginMetricsProvider::RecordCurrentState() { 206 void PluginMetricsProvider::RecordCurrentState() {
209 ListPrefUpdate update(local_state_, prefs::kStabilityPluginStats); 207 ListPrefUpdate update(local_state_, prefs::kStabilityPluginStats);
210 base::ListValue* plugins = update.Get(); 208 base::ListValue* plugins = update.Get();
211 DCHECK(plugins); 209 DCHECK(plugins);
212 210
213 for (base::ListValue::iterator value_iter = plugins->begin(); 211 for (const auto& value : *plugins) {
214 value_iter != plugins->end(); ++value_iter) { 212 base::DictionaryValue* plugin_dict;
215 if (!(*value_iter)->IsType(base::Value::TYPE_DICTIONARY)) { 213 if (!value->GetAsDictionary(&plugin_dict)) {
216 NOTREACHED(); 214 NOTREACHED();
217 continue; 215 continue;
218 } 216 }
219 217
220 base::DictionaryValue* plugin_dict =
221 static_cast<base::DictionaryValue*>(*value_iter);
222 base::string16 plugin_name; 218 base::string16 plugin_name;
223 plugin_dict->GetString(prefs::kStabilityPluginName, &plugin_name); 219 plugin_dict->GetString(prefs::kStabilityPluginName, &plugin_name);
224 if (plugin_name.empty()) { 220 if (plugin_name.empty()) {
225 NOTREACHED(); 221 NOTREACHED();
226 continue; 222 continue;
227 } 223 }
228 224
229 if (child_process_stats_buffer_.find(plugin_name) == 225 if (child_process_stats_buffer_.find(plugin_name) ==
230 child_process_stats_buffer_.end()) { 226 child_process_stats_buffer_.end()) {
231 continue; 227 continue;
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 } 374 }
379 375
380 bool PluginMetricsProvider::RecordCurrentStateIfPending() { 376 bool PluginMetricsProvider::RecordCurrentStateIfPending() {
381 if (!weak_ptr_factory_.HasWeakPtrs()) 377 if (!weak_ptr_factory_.HasWeakPtrs())
382 return false; 378 return false;
383 379
384 weak_ptr_factory_.InvalidateWeakPtrs(); 380 weak_ptr_factory_.InvalidateWeakPtrs();
385 RecordCurrentState(); 381 RecordCurrentState();
386 return true; 382 return true;
387 } 383 }
OLDNEW
« no previous file with comments | « chrome/browser/interests/interests_fetcher.cc ('k') | chrome/browser/permissions/chooser_context_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698