| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "webkit/glue/plugins/plugin_list.h" | 5 #include "webkit/glue/plugins/plugin_list.h" |
| 6 | 6 |
| 7 #include <algorithm> |
| 8 |
| 7 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 8 #include "base/logging.h" | 10 #include "base/logging.h" |
| 9 #include "base/string_util.h" | 11 #include "base/string_util.h" |
| 10 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
| 11 #include "base/time.h" | 13 #include "base/time.h" |
| 12 #include "net/base/mime_util.h" | 14 #include "net/base/mime_util.h" |
| 13 #include "webkit/default_plugin/plugin_main.h" | 15 #include "webkit/default_plugin/plugin_main.h" |
| 14 #include "webkit/glue/plugins/plugin_constants_win.h" | 16 #include "webkit/glue/plugins/plugin_constants_win.h" |
| 15 #include "webkit/glue/plugins/plugin_lib.h" | 17 #include "webkit/glue/plugins/plugin_lib.h" |
| 16 #include "webkit/glue/webkit_glue.h" | 18 #include "webkit/glue/webkit_glue.h" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 | 101 |
| 100 info->mime_types.clear(); | 102 info->mime_types.clear(); |
| 101 | 103 |
| 102 if (mime_types.empty()) | 104 if (mime_types.empty()) |
| 103 return false; | 105 return false; |
| 104 | 106 |
| 105 info->name = pvi.product_name; | 107 info->name = pvi.product_name; |
| 106 info->desc = pvi.file_description; | 108 info->desc = pvi.file_description; |
| 107 info->version = pvi.file_version; | 109 info->version = pvi.file_version; |
| 108 info->path = pvi.path; | 110 info->path = pvi.path; |
| 111 info->enabled = true; |
| 109 | 112 |
| 110 for (size_t i = 0; i < mime_types.size(); ++i) { | 113 for (size_t i = 0; i < mime_types.size(); ++i) { |
| 111 WebPluginMimeType mime_type; | 114 WebPluginMimeType mime_type; |
| 112 mime_type.mime_type = StringToLowerASCII(mime_types[i]); | 115 mime_type.mime_type = StringToLowerASCII(mime_types[i]); |
| 113 if (file_extensions.size() > i) | 116 if (file_extensions.size() > i) |
| 114 SplitString(file_extensions[i], ',', &mime_type.file_extensions); | 117 SplitString(file_extensions[i], ',', &mime_type.file_extensions); |
| 115 | 118 |
| 116 if (descriptions.size() > i) { | 119 if (descriptions.size() > i) { |
| 117 mime_type.description = descriptions[i]; | 120 mime_type.description = descriptions[i]; |
| 118 | 121 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 } | 210 } |
| 208 | 211 |
| 209 // Load the default plugin last. | 212 // Load the default plugin last. |
| 210 if (webkit_glue::IsDefaultPluginEnabled()) | 213 if (webkit_glue::IsDefaultPluginEnabled()) |
| 211 LoadPlugin(FilePath(kDefaultPluginLibraryName), &new_plugins); | 214 LoadPlugin(FilePath(kDefaultPluginLibraryName), &new_plugins); |
| 212 | 215 |
| 213 base::TimeTicks end_time = base::TimeTicks::Now(); | 216 base::TimeTicks end_time = base::TimeTicks::Now(); |
| 214 base::TimeDelta elapsed = end_time - start_time; | 217 base::TimeDelta elapsed = end_time - start_time; |
| 215 DLOG(INFO) << "Loaded plugin list in " << elapsed.InMilliseconds() << " ms."; | 218 DLOG(INFO) << "Loaded plugin list in " << elapsed.InMilliseconds() << " ms."; |
| 216 | 219 |
| 220 // Only update the data now since loading plugins can take a while. |
| 217 AutoLock lock(lock_); | 221 AutoLock lock(lock_); |
| 222 |
| 223 // Go through and mark new plugins in the disabled list as, well, disabled. |
| 224 for (std::vector<WebPluginInfo>::iterator it = new_plugins.begin(); |
| 225 it != new_plugins.end(); |
| 226 ++it) { |
| 227 if (disabled_plugins_.find(it->path) != disabled_plugins_.end()) |
| 228 it->enabled = false; |
| 229 } |
| 230 |
| 218 plugins_ = new_plugins; | 231 plugins_ = new_plugins; |
| 219 plugins_loaded_ = true; | 232 plugins_loaded_ = true; |
| 220 } | 233 } |
| 221 | 234 |
| 222 void PluginList::LoadPlugin(const FilePath& path, | 235 void PluginList::LoadPlugin(const FilePath& path, |
| 223 std::vector<WebPluginInfo>* plugins) { | 236 std::vector<WebPluginInfo>* plugins) { |
| 224 WebPluginInfo plugin_info; | 237 WebPluginInfo plugin_info; |
| 225 const PluginEntryPoints* entry_points; | 238 const PluginEntryPoints* entry_points; |
| 226 | 239 |
| 227 if (!ReadPluginInfo(path, &plugin_info, &entry_points)) | 240 if (!ReadPluginInfo(path, &plugin_info, &entry_points)) |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 } | 337 } |
| 325 | 338 |
| 326 | 339 |
| 327 void PluginList::GetPlugins(bool refresh, std::vector<WebPluginInfo>* plugins) { | 340 void PluginList::GetPlugins(bool refresh, std::vector<WebPluginInfo>* plugins) { |
| 328 LoadPlugins(refresh); | 341 LoadPlugins(refresh); |
| 329 | 342 |
| 330 AutoLock lock(lock_); | 343 AutoLock lock(lock_); |
| 331 *plugins = plugins_; | 344 *plugins = plugins_; |
| 332 } | 345 } |
| 333 | 346 |
| 347 void PluginList::GetEnabledPlugins(bool refresh, |
| 348 std::vector<WebPluginInfo>* plugins) { |
| 349 LoadPlugins(refresh); |
| 350 |
| 351 plugins->clear(); |
| 352 AutoLock lock(lock_); |
| 353 for (std::vector<WebPluginInfo>::const_iterator it = plugins_.begin(); |
| 354 it != plugins_.end(); |
| 355 ++it) { |
| 356 if (it->enabled) |
| 357 plugins->push_back(*it); |
| 358 } |
| 359 } |
| 360 |
| 334 bool PluginList::GetPluginInfo(const GURL& url, | 361 bool PluginList::GetPluginInfo(const GURL& url, |
| 335 const std::string& mime_type, | 362 const std::string& mime_type, |
| 336 bool allow_wildcard, | 363 bool allow_wildcard, |
| 337 WebPluginInfo* info, | 364 WebPluginInfo* info, |
| 338 std::string* actual_mime_type) { | 365 std::string* actual_mime_type) { |
| 339 bool found = FindPlugin(mime_type, allow_wildcard, info); | 366 bool found = FindPlugin(mime_type, allow_wildcard, info); |
| 340 if (!found || (info->path.value() == kDefaultPluginLibraryName)) { | 367 if (!found || (info->path.value() == kDefaultPluginLibraryName)) { |
| 341 WebPluginInfo info2; | 368 WebPluginInfo info2; |
| 342 if (FindPlugin(url, actual_mime_type, &info2)) { | 369 if (FindPlugin(url, actual_mime_type, &info2)) { |
| 343 found = true; | 370 found = true; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 355 for (size_t i = 0; i < plugins_.size(); ++i) { | 382 for (size_t i = 0; i < plugins_.size(); ++i) { |
| 356 if (plugins_[i].path == plugin_path) { | 383 if (plugins_[i].path == plugin_path) { |
| 357 *info = plugins_[i]; | 384 *info = plugins_[i]; |
| 358 return true; | 385 return true; |
| 359 } | 386 } |
| 360 } | 387 } |
| 361 | 388 |
| 362 return false; | 389 return false; |
| 363 } | 390 } |
| 364 | 391 |
| 392 bool PluginList::EnablePlugin(const FilePath& filename) { |
| 393 AutoLock lock(lock_); |
| 394 |
| 395 bool did_enable = false; |
| 396 |
| 397 std::set<FilePath>::iterator entry = disabled_plugins_.find(filename); |
| 398 if (entry == disabled_plugins_.end()) |
| 399 return did_enable; // Early exit if plugin not in disabled list. |
| 400 |
| 401 disabled_plugins_.erase(entry); // Remove from disabled list. |
| 402 |
| 403 // Set enabled flags if necessary. |
| 404 for (std::vector<WebPluginInfo>::iterator it = plugins_.begin(); |
| 405 it != plugins_.end(); |
| 406 ++it) { |
| 407 if (it->path == filename) { |
| 408 DCHECK(!it->enabled); // Should have been disabled. |
| 409 it->enabled = true; |
| 410 did_enable = true; |
| 411 } |
| 412 } |
| 413 |
| 414 return did_enable; |
| 415 } |
| 416 |
| 417 bool PluginList::DisablePlugin(const FilePath& filename) { |
| 418 AutoLock lock(lock_); |
| 419 |
| 420 bool did_disable = false; |
| 421 |
| 422 if (disabled_plugins_.find(filename) != disabled_plugins_.end()) |
| 423 return did_disable; // Early exit if plugin already in disabled list. |
| 424 |
| 425 disabled_plugins_.insert(filename); // Add to disabled list. |
| 426 |
| 427 // Unset enabled flags if necessary. |
| 428 for (std::vector<WebPluginInfo>::iterator it = plugins_.begin(); |
| 429 it != plugins_.end(); |
| 430 ++it) { |
| 431 if (it->path == filename) { |
| 432 DCHECK(it->enabled); // Should have been enabled. |
| 433 it->enabled = false; |
| 434 did_disable = true; |
| 435 } |
| 436 } |
| 437 |
| 438 return did_disable; |
| 439 } |
| 440 |
| 365 void PluginList::Shutdown() { | 441 void PluginList::Shutdown() { |
| 366 // TODO | 442 // TODO |
| 367 } | 443 } |
| 368 | 444 |
| 369 } // namespace NPAPI | 445 } // namespace NPAPI |
| OLD | NEW |