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

Side by Side Diff: chrome/browser/plugins/plugin_finder.cc

Issue 2442953002: Remove stl_util's deletion function use from chrome/. (Closed)
Patch Set: fix Created 4 years, 1 month 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
« no previous file with comments | « chrome/browser/plugins/plugin_finder.h ('k') | chrome/browser/plugins/plugin_observer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/browser/plugins/plugin_finder.h" 5 #include "chrome/browser/plugins/plugin_finder.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
11 #include "base/memory/ptr_util.h"
11 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
12 #include "base/metrics/histogram_macros.h" 13 #include "base/metrics/histogram_macros.h"
13 #include "base/stl_util.h"
14 #include "base/strings/sys_string_conversions.h" 14 #include "base/strings/sys_string_conversions.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "base/values.h" 16 #include "base/values.h"
17 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/plugins/plugin_metadata.h" 18 #include "chrome/browser/plugins/plugin_metadata.h"
19 #include "chrome/common/features.h" 19 #include "chrome/common/features.h"
20 #include "chrome/common/pref_names.h" 20 #include "chrome/common/pref_names.h"
21 #include "chrome/grit/browser_resources.h" 21 #include "chrome/grit/browser_resources.h"
22 #include "components/prefs/pref_registry_simple.h" 22 #include "components/prefs/pref_registry_simple.h"
23 #include "components/prefs/pref_service.h" 23 #include "components/prefs/pref_service.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 success = (*mime_type_it)->GetAsString(&mime_type_str); 88 success = (*mime_type_it)->GetAsString(&mime_type_str);
89 DCHECK(success); 89 DCHECK(success);
90 if (matching_mime_types) { 90 if (matching_mime_types) {
91 plugin->AddMatchingMimeType(mime_type_str); 91 plugin->AddMatchingMimeType(mime_type_str);
92 } else { 92 } else {
93 plugin->AddMimeType(mime_type_str); 93 plugin->AddMimeType(mime_type_str);
94 } 94 }
95 } 95 }
96 } 96 }
97 97
98 PluginMetadata* CreatePluginMetadata( 98 std::unique_ptr<PluginMetadata> CreatePluginMetadata(
99 const std::string& identifier, 99 const std::string& identifier,
100 const base::DictionaryValue* plugin_dict) { 100 const base::DictionaryValue* plugin_dict) {
101 std::string url; 101 std::string url;
102 bool success = plugin_dict->GetString("url", &url); 102 bool success = plugin_dict->GetString("url", &url);
103 std::string help_url; 103 std::string help_url;
104 plugin_dict->GetString("help_url", &help_url); 104 plugin_dict->GetString("help_url", &help_url);
105 base::string16 name; 105 base::string16 name;
106 success = plugin_dict->GetString("name", &name); 106 success = plugin_dict->GetString("name", &name);
107 DCHECK(success); 107 DCHECK(success);
108 bool display_url = false; 108 bool display_url = false;
109 plugin_dict->GetBoolean("displayurl", &display_url); 109 plugin_dict->GetBoolean("displayurl", &display_url);
110 base::string16 group_name_matcher; 110 base::string16 group_name_matcher;
111 success = plugin_dict->GetString("group_name_matcher", &group_name_matcher); 111 success = plugin_dict->GetString("group_name_matcher", &group_name_matcher);
112 DCHECK(success); 112 DCHECK(success);
113 std::string language_str; 113 std::string language_str;
114 plugin_dict->GetString("lang", &language_str); 114 plugin_dict->GetString("lang", &language_str);
115 115
116 PluginMetadata* plugin = new PluginMetadata(identifier, 116 std::unique_ptr<PluginMetadata> plugin = base::MakeUnique<PluginMetadata>(
117 name, 117 identifier, name, display_url, GURL(url), GURL(help_url),
118 display_url, 118 group_name_matcher, language_str);
119 GURL(url),
120 GURL(help_url),
121 group_name_matcher,
122 language_str);
123 const base::ListValue* versions = NULL; 119 const base::ListValue* versions = NULL;
124 if (plugin_dict->GetList("versions", &versions)) { 120 if (plugin_dict->GetList("versions", &versions)) {
125 for (base::ListValue::const_iterator it = versions->begin(); 121 for (base::ListValue::const_iterator it = versions->begin();
126 it != versions->end(); ++it) { 122 it != versions->end(); ++it) {
127 base::DictionaryValue* version_dict = NULL; 123 base::DictionaryValue* version_dict = NULL;
128 if (!(*it)->GetAsDictionary(&version_dict)) { 124 if (!(*it)->GetAsDictionary(&version_dict)) {
129 NOTREACHED(); 125 NOTREACHED();
130 continue; 126 continue;
131 } 127 }
132 std::string version; 128 std::string version;
133 success = version_dict->GetString("version", &version); 129 success = version_dict->GetString("version", &version);
134 DCHECK(success); 130 DCHECK(success);
135 std::string status_str; 131 std::string status_str;
136 success = version_dict->GetString("status", &status_str); 132 success = version_dict->GetString("status", &status_str);
137 DCHECK(success); 133 DCHECK(success);
138 PluginMetadata::SecurityStatus status = 134 PluginMetadata::SecurityStatus status =
139 PluginMetadata::SECURITY_STATUS_UP_TO_DATE; 135 PluginMetadata::SECURITY_STATUS_UP_TO_DATE;
140 success = PluginMetadata::ParseSecurityStatus(status_str, &status); 136 success = PluginMetadata::ParseSecurityStatus(status_str, &status);
141 DCHECK(success); 137 DCHECK(success);
142 plugin->AddVersion(base::Version(version), status); 138 plugin->AddVersion(base::Version(version), status);
143 } 139 }
144 } 140 }
145 141
146 LoadMimeTypes(false, plugin_dict, plugin); 142 LoadMimeTypes(false, plugin_dict, plugin.get());
147 LoadMimeTypes(true, plugin_dict, plugin); 143 LoadMimeTypes(true, plugin_dict, plugin.get());
148 return plugin; 144 return plugin;
149 } 145 }
150 146
151 void RecordBuiltInPluginListError(PluginListError error_code) { 147 void RecordBuiltInPluginListError(PluginListError error_code) {
152 UMA_HISTOGRAM_ENUMERATION("PluginFinder.BuiltInPluginList.ErrorCode", 148 UMA_HISTOGRAM_ENUMERATION("PluginFinder.BuiltInPluginList.ErrorCode",
153 static_cast<int>(error_code), 149 static_cast<int>(error_code),
154 static_cast<int>(PluginListError::NUM_VALUES)); 150 static_cast<int>(PluginListError::NUM_VALUES));
155 } 151 }
156 152
157 } // namespace 153 } // namespace
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 RecordBuiltInPluginListError(PluginListError::SCHEMA_ERROR); 236 RecordBuiltInPluginListError(PluginListError::SCHEMA_ERROR);
241 return nullptr; 237 return nullptr;
242 } 238 }
243 239
244 DCHECK_EQ(base::JSONReader::JSON_NO_ERROR, error_code); 240 DCHECK_EQ(base::JSONReader::JSON_NO_ERROR, error_code);
245 RecordBuiltInPluginListError(PluginListError::PLUGIN_LIST_NO_ERROR); 241 RecordBuiltInPluginListError(PluginListError::PLUGIN_LIST_NO_ERROR);
246 return static_cast<base::DictionaryValue*>(value.release()); 242 return static_cast<base::DictionaryValue*>(value.release());
247 } 243 }
248 244
249 PluginFinder::~PluginFinder() { 245 PluginFinder::~PluginFinder() {
250 #if BUILDFLAG(ENABLE_PLUGIN_INSTALLATION)
251 base::STLDeleteValues(&installers_);
252 #endif
253 base::STLDeleteValues(&identifier_plugin_);
254 } 246 }
255 247
256 #if BUILDFLAG(ENABLE_PLUGIN_INSTALLATION) 248 #if BUILDFLAG(ENABLE_PLUGIN_INSTALLATION)
257 bool PluginFinder::FindPlugin( 249 bool PluginFinder::FindPlugin(
258 const std::string& mime_type, 250 const std::string& mime_type,
259 const std::string& language, 251 const std::string& language,
260 PluginInstaller** installer, 252 PluginInstaller** installer,
261 std::unique_ptr<PluginMetadata>* plugin_metadata) { 253 std::unique_ptr<PluginMetadata>* plugin_metadata) {
262 if (g_browser_process->local_state()->GetBoolean(prefs::kDisablePluginFinder)) 254 if (g_browser_process->local_state()->GetBoolean(prefs::kDisablePluginFinder))
263 return false; 255 return false;
264 256
265 base::AutoLock lock(mutex_); 257 base::AutoLock lock(mutex_);
266 PluginMap::const_iterator metadata_it = identifier_plugin_.begin(); 258 auto metadata_it = identifier_plugin_.begin();
267 for (; metadata_it != identifier_plugin_.end(); ++metadata_it) { 259 for (; metadata_it != identifier_plugin_.end(); ++metadata_it) {
268 if (language == metadata_it->second->language() && 260 if (language == metadata_it->second->language() &&
269 metadata_it->second->HasMimeType(mime_type)) { 261 metadata_it->second->HasMimeType(mime_type)) {
270 *plugin_metadata = metadata_it->second->Clone(); 262 *plugin_metadata = metadata_it->second->Clone();
271 263
272 std::map<std::string, PluginInstaller*>::const_iterator installer_it = 264 auto installer_it = installers_.find(metadata_it->second->identifier());
273 installers_.find(metadata_it->second->identifier());
274 DCHECK(installer_it != installers_.end()); 265 DCHECK(installer_it != installers_.end());
275 *installer = installer_it->second; 266 *installer = installer_it->second.get();
276 return true; 267 return true;
277 } 268 }
278 } 269 }
279 return false; 270 return false;
280 } 271 }
281 272
282 bool PluginFinder::FindPluginWithIdentifier( 273 bool PluginFinder::FindPluginWithIdentifier(
283 const std::string& identifier, 274 const std::string& identifier,
284 PluginInstaller** installer, 275 PluginInstaller** installer,
285 std::unique_ptr<PluginMetadata>* plugin_metadata) { 276 std::unique_ptr<PluginMetadata>* plugin_metadata) {
286 base::AutoLock lock(mutex_); 277 base::AutoLock lock(mutex_);
287 PluginMap::const_iterator metadata_it = identifier_plugin_.find(identifier); 278 auto metadata_it = identifier_plugin_.find(identifier);
288 if (metadata_it == identifier_plugin_.end()) 279 if (metadata_it == identifier_plugin_.end())
289 return false; 280 return false;
290 *plugin_metadata = metadata_it->second->Clone(); 281 *plugin_metadata = metadata_it->second->Clone();
291 282
292 if (installer) { 283 if (installer) {
293 std::map<std::string, PluginInstaller*>::const_iterator installer_it = 284 auto installer_it = installers_.find(identifier);
294 installers_.find(identifier);
295 if (installer_it == installers_.end()) 285 if (installer_it == installers_.end())
296 return false; 286 return false;
297 *installer = installer_it->second; 287 *installer = installer_it->second.get();
298 } 288 }
299 return true; 289 return true;
300 } 290 }
301 #endif 291 #endif
302 292
303 void PluginFinder::ReinitializePlugins( 293 void PluginFinder::ReinitializePlugins(
304 const base::DictionaryValue* plugin_list) { 294 const base::DictionaryValue* plugin_list) {
305 base::AutoLock lock(mutex_); 295 base::AutoLock lock(mutex_);
306 int version = 0; // If no version is defined, we default to 0. 296 int version = 0; // If no version is defined, we default to 0.
307 const char kVersionKey[] = "x-version"; 297 const char kVersionKey[] = "x-version";
308 plugin_list->GetInteger(kVersionKey, &version); 298 plugin_list->GetInteger(kVersionKey, &version);
309 if (version <= version_) 299 if (version <= version_)
310 return; 300 return;
311 301
312 version_ = version; 302 version_ = version;
313 303
314 base::STLDeleteValues(&identifier_plugin_); 304 identifier_plugin_.clear();
315 305
316 for (base::DictionaryValue::Iterator plugin_it(*plugin_list); 306 for (base::DictionaryValue::Iterator plugin_it(*plugin_list);
317 !plugin_it.IsAtEnd(); plugin_it.Advance()) { 307 !plugin_it.IsAtEnd(); plugin_it.Advance()) {
318 const base::DictionaryValue* plugin = NULL; 308 const base::DictionaryValue* plugin = NULL;
319 const std::string& identifier = plugin_it.key(); 309 const std::string& identifier = plugin_it.key();
320 if (plugin_list->GetDictionaryWithoutPathExpansion(identifier, &plugin)) { 310 if (plugin_list->GetDictionaryWithoutPathExpansion(identifier, &plugin)) {
321 DCHECK(!identifier_plugin_[identifier]); 311 DCHECK(!identifier_plugin_[identifier]);
322 identifier_plugin_[identifier] = CreatePluginMetadata(identifier, plugin); 312 identifier_plugin_[identifier] = CreatePluginMetadata(identifier, plugin);
323 313
324 #if BUILDFLAG(ENABLE_PLUGIN_INSTALLATION) 314 #if BUILDFLAG(ENABLE_PLUGIN_INSTALLATION)
325 if (installers_.find(identifier) == installers_.end()) 315 if (installers_.find(identifier) == installers_.end())
326 installers_[identifier] = new PluginInstaller(); 316 installers_[identifier] = base::MakeUnique<PluginInstaller>();
327 #endif 317 #endif
328 } 318 }
329 } 319 }
330 } 320 }
331 321
332 std::unique_ptr<PluginMetadata> PluginFinder::GetPluginMetadata( 322 std::unique_ptr<PluginMetadata> PluginFinder::GetPluginMetadata(
333 const content::WebPluginInfo& plugin) { 323 const content::WebPluginInfo& plugin) {
334 base::AutoLock lock(mutex_); 324 base::AutoLock lock(mutex_);
335 for (PluginMap::const_iterator it = identifier_plugin_.begin(); 325 for (const auto& plugin_pair : identifier_plugin_) {
336 it != identifier_plugin_.end(); ++it) { 326 if (!plugin_pair.second->MatchesPlugin(plugin))
337 if (!it->second->MatchesPlugin(plugin))
338 continue; 327 continue;
339 328
340 return it->second->Clone(); 329 return plugin_pair.second->Clone();
341 } 330 }
342 331
343 // The plugin metadata was not found, create a dummy one holding 332 // The plugin metadata was not found, create a dummy one holding
344 // the name, identifier and group name only. 333 // the name, identifier and group name only.
345 std::string identifier = GetIdentifier(plugin); 334 std::string identifier = GetIdentifier(plugin);
346 PluginMetadata* metadata = new PluginMetadata(identifier, 335 std::unique_ptr<PluginMetadata> metadata = base::MakeUnique<PluginMetadata>(
347 GetGroupName(plugin), 336 identifier, GetGroupName(plugin), false, GURL(), GURL(), plugin.name,
348 false, 337 std::string());
349 GURL(),
350 GURL(),
351 plugin.name,
352 std::string());
353 for (size_t i = 0; i < plugin.mime_types.size(); ++i) 338 for (size_t i = 0; i < plugin.mime_types.size(); ++i)
354 metadata->AddMatchingMimeType(plugin.mime_types[i].mime_type); 339 metadata->AddMatchingMimeType(plugin.mime_types[i].mime_type);
355 340
356 DCHECK(metadata->MatchesPlugin(plugin)); 341 DCHECK(metadata->MatchesPlugin(plugin));
357 if (identifier_plugin_.find(identifier) != identifier_plugin_.end()) 342 if (identifier_plugin_.find(identifier) != identifier_plugin_.end())
358 identifier = GetLongIdentifier(plugin); 343 identifier = GetLongIdentifier(plugin);
359 344
360 DCHECK(identifier_plugin_.find(identifier) == identifier_plugin_.end()); 345 DCHECK(identifier_plugin_.find(identifier) == identifier_plugin_.end());
361 identifier_plugin_[identifier] = metadata; 346 identifier_plugin_[identifier] = std::move(metadata);
362 return metadata->Clone(); 347 return identifier_plugin_[identifier]->Clone();
363 } 348 }
OLDNEW
« no previous file with comments | « chrome/browser/plugins/plugin_finder.h ('k') | chrome/browser/plugins/plugin_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698