OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/plugins/npapi/plugin_list.h" | 5 #include "webkit/plugins/npapi/plugin_list.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 | 390 |
391 #if defined(OS_WIN) | 391 #if defined(OS_WIN) |
392 LoadPluginsFromRegistry(plugin_groups, &visited_plugins); | 392 LoadPluginsFromRegistry(plugin_groups, &visited_plugins); |
393 #endif | 393 #endif |
394 | 394 |
395 // Load the default plugin last. | 395 // Load the default plugin last. |
396 if (default_plugin_enabled_) | 396 if (default_plugin_enabled_) |
397 LoadPlugin(FilePath(kDefaultPluginLibraryName), plugin_groups); | 397 LoadPlugin(FilePath(kDefaultPluginLibraryName), plugin_groups); |
398 } | 398 } |
399 | 399 |
400 void PluginList::LoadPlugins(bool refresh) { | 400 void PluginList::LoadPlugins() { |
401 { | 401 { |
402 base::AutoLock lock(lock_); | 402 base::AutoLock lock(lock_); |
403 if (!refresh && !plugins_need_refresh_) | 403 if (!plugins_need_refresh_) |
404 return; | 404 return; |
405 } | 405 } |
406 | 406 |
407 ScopedVector<PluginGroup> new_plugin_groups; | 407 ScopedVector<PluginGroup> new_plugin_groups; |
408 AddHardcodedPluginGroups(&new_plugin_groups); | 408 AddHardcodedPluginGroups(&new_plugin_groups); |
409 // Do the actual loading of the plugins. | 409 // Do the actual loading of the plugins. |
410 LoadPluginsInternal(&new_plugin_groups); | 410 LoadPluginsInternal(&new_plugin_groups); |
411 | 411 |
412 base::AutoLock lock(lock_); | 412 base::AutoLock lock(lock_); |
413 // Grab all plugins that were found before to copy enabled statuses. | 413 // Grab all plugins that were found before to copy enabled statuses. |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 if (path.value() != kDefaultPluginLibraryName | 475 if (path.value() != kDefaultPluginLibraryName |
476 #if defined(OS_WIN) && !defined(NDEBUG) | 476 #if defined(OS_WIN) && !defined(NDEBUG) |
477 && path.BaseName().value() != L"npspy.dll" // Make an exception for NPSPY | 477 && path.BaseName().value() != L"npspy.dll" // Make an exception for NPSPY |
478 #endif | 478 #endif |
479 ) { | 479 ) { |
480 for (size_t i = 0; i < plugin_info.mime_types.size(); ++i) { | 480 for (size_t i = 0; i < plugin_info.mime_types.size(); ++i) { |
481 // TODO: don't load global handlers for now. | 481 // TODO: don't load global handlers for now. |
482 // WebKit hands to the Plugin before it tries | 482 // WebKit hands to the Plugin before it tries |
483 // to handle mimeTypes on its own. | 483 // to handle mimeTypes on its own. |
484 const std::string &mime_type = plugin_info.mime_types[i].mime_type; | 484 const std::string &mime_type = plugin_info.mime_types[i].mime_type; |
485 if (mime_type == "*" ) | 485 if (mime_type == "*") |
486 return; | 486 return; |
487 } | 487 } |
488 } | 488 } |
489 | 489 |
490 base::AutoLock lock(lock_); | 490 base::AutoLock lock(lock_); |
491 AddToPluginGroups(plugin_info, plugin_groups); | 491 AddToPluginGroups(plugin_info, plugin_groups); |
492 } | 492 } |
493 | 493 |
494 void PluginList::GetPlugins(bool refresh, std::vector<WebPluginInfo>* plugins) { | 494 void PluginList::GetPlugins(std::vector<WebPluginInfo>* plugins) { |
495 LoadPlugins(refresh); | 495 LoadPlugins(); |
496 | |
497 base::AutoLock lock(lock_); | 496 base::AutoLock lock(lock_); |
498 for (size_t i = 0; i < plugin_groups_.size(); ++i) { | 497 for (size_t i = 0; i < plugin_groups_.size(); ++i) { |
499 const std::vector<WebPluginInfo>& gr_plugins = | 498 const std::vector<WebPluginInfo>& gr_plugins = |
500 plugin_groups_[i]->web_plugins_info(); | 499 plugin_groups_[i]->web_plugins_info(); |
501 plugins->insert(plugins->end(), gr_plugins.begin(), gr_plugins.end()); | 500 plugins->insert(plugins->end(), gr_plugins.begin(), gr_plugins.end()); |
502 } | 501 } |
503 } | 502 } |
504 | 503 |
505 void PluginList::GetEnabledPlugins(bool refresh, | |
506 std::vector<WebPluginInfo>* plugins) { | |
507 LoadPlugins(refresh); | |
508 | |
509 plugins->clear(); | |
510 base::AutoLock lock(lock_); | |
511 for (size_t i = 0; i < plugin_groups_.size(); ++i) { | |
512 const std::vector<WebPluginInfo>& gr_plugins = | |
513 plugin_groups_[i]->web_plugins_info(); | |
514 for (size_t i = 0; i < gr_plugins.size(); ++i) { | |
515 if (IsPluginEnabled(gr_plugins[i])) | |
516 plugins->push_back(gr_plugins[i]); | |
517 } | |
518 } | |
519 } | |
520 | |
521 void PluginList::GetPluginInfoArray( | 504 void PluginList::GetPluginInfoArray( |
522 const GURL& url, | 505 const GURL& url, |
523 const std::string& mime_type, | 506 const std::string& mime_type, |
524 bool allow_wildcard, | 507 bool allow_wildcard, |
| 508 bool* use_stale, |
525 std::vector<WebPluginInfo>* info, | 509 std::vector<WebPluginInfo>* info, |
526 std::vector<std::string>* actual_mime_types) { | 510 std::vector<std::string>* actual_mime_types) { |
527 DCHECK(mime_type == StringToLowerASCII(mime_type)); | 511 DCHECK(mime_type == StringToLowerASCII(mime_type)); |
528 DCHECK(info); | 512 DCHECK(info); |
529 | 513 |
530 LoadPlugins(false); | 514 if (!use_stale) |
| 515 LoadPlugins(); |
531 base::AutoLock lock(lock_); | 516 base::AutoLock lock(lock_); |
| 517 if (use_stale) |
| 518 *use_stale = plugins_need_refresh_; |
532 info->clear(); | 519 info->clear(); |
533 if (actual_mime_types) | 520 if (actual_mime_types) |
534 actual_mime_types->clear(); | 521 actual_mime_types->clear(); |
535 | 522 |
536 std::set<FilePath> visited_plugins; | 523 std::set<FilePath> visited_plugins; |
537 | 524 |
538 // Add in enabled plugins by mime type. | 525 // Add in enabled plugins by mime type. |
539 for (size_t i = 0; i < plugin_groups_.size(); ++i) { | 526 for (size_t i = 0; i < plugin_groups_.size(); ++i) { |
540 const std::vector<WebPluginInfo>& plugins = | 527 const std::vector<WebPluginInfo>& plugins = |
541 plugin_groups_[i]->web_plugins_info(); | 528 plugin_groups_[i]->web_plugins_info(); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 plugin_groups_[i]->web_plugins_info()[0]; | 597 plugin_groups_[i]->web_plugins_info()[0]; |
611 if (SupportsType(default_info, mime_type, allow_wildcard)) { | 598 if (SupportsType(default_info, mime_type, allow_wildcard)) { |
612 info->push_back(default_info); | 599 info->push_back(default_info); |
613 if (actual_mime_types) | 600 if (actual_mime_types) |
614 actual_mime_types->push_back(mime_type); | 601 actual_mime_types->push_back(mime_type); |
615 } | 602 } |
616 } | 603 } |
617 } | 604 } |
618 } | 605 } |
619 | 606 |
620 bool PluginList::GetPluginInfo(const GURL& url, | |
621 const std::string& mime_type, | |
622 bool allow_wildcard, | |
623 WebPluginInfo* info, | |
624 std::string* actual_mime_type) { | |
625 DCHECK(info); | |
626 std::vector<WebPluginInfo> info_list; | |
627 | |
628 // GetPluginInfoArray has slightly less work to do if we can pass | |
629 // NULL for the mime type list... | |
630 if (actual_mime_type) { | |
631 std::vector<std::string> mime_type_list; | |
632 GetPluginInfoArray( | |
633 url, mime_type, allow_wildcard, &info_list, &mime_type_list); | |
634 if (!info_list.empty()) { | |
635 *info = info_list[0]; | |
636 *actual_mime_type = mime_type_list[0]; | |
637 return true; | |
638 } | |
639 } else { | |
640 GetPluginInfoArray(url, mime_type, allow_wildcard, &info_list, NULL); | |
641 if (!info_list.empty()) { | |
642 *info = info_list[0]; | |
643 return true; | |
644 } | |
645 } | |
646 return false; | |
647 } | |
648 | |
649 bool PluginList::GetPluginInfoByPath(const FilePath& plugin_path, | 607 bool PluginList::GetPluginInfoByPath(const FilePath& plugin_path, |
650 WebPluginInfo* info) { | 608 WebPluginInfo* info) { |
651 LoadPlugins(false); | 609 LoadPlugins(); |
652 base::AutoLock lock(lock_); | 610 base::AutoLock lock(lock_); |
653 for (size_t i = 0; i < plugin_groups_.size(); ++i) { | 611 for (size_t i = 0; i < plugin_groups_.size(); ++i) { |
654 const std::vector<WebPluginInfo>& plugins = | 612 const std::vector<WebPluginInfo>& plugins = |
655 plugin_groups_[i]->web_plugins_info(); | 613 plugin_groups_[i]->web_plugins_info(); |
656 for (size_t i = 0; i < plugins.size(); ++i) { | 614 for (size_t i = 0; i < plugins.size(); ++i) { |
657 if (plugins[i].path == plugin_path) { | 615 if (plugins[i].path == plugin_path) { |
658 *info = plugins[i]; | 616 *info = plugins[i]; |
659 return true; | 617 return true; |
660 } | 618 } |
661 } | 619 } |
662 } | 620 } |
663 | 621 |
664 return false; | 622 return false; |
665 } | 623 } |
666 | 624 |
667 void PluginList::GetPluginGroups( | 625 void PluginList::GetPluginGroups( |
668 bool load_if_necessary, | 626 bool load_if_necessary, |
669 std::vector<PluginGroup>* plugin_groups) { | 627 std::vector<PluginGroup>* plugin_groups) { |
670 if (load_if_necessary) | 628 if (load_if_necessary) |
671 LoadPlugins(false); | 629 LoadPlugins(); |
672 base::AutoLock lock(lock_); | 630 base::AutoLock lock(lock_); |
673 plugin_groups->clear(); | 631 plugin_groups->clear(); |
674 for (size_t i = 0; i < plugin_groups_.size(); ++i) { | 632 for (size_t i = 0; i < plugin_groups_.size(); ++i) { |
675 // In some unit tests we can get confronted with empty groups but in real | 633 // In some unit tests we can get confronted with empty groups but in real |
676 // world code this if should never be false here. | 634 // world code this if should never be false here. |
677 if (!plugin_groups_[i]->IsEmpty()) | 635 if (!plugin_groups_[i]->IsEmpty()) |
678 plugin_groups->push_back(*plugin_groups_[i]); | 636 plugin_groups->push_back(*plugin_groups_[i]); |
679 } | 637 } |
680 } | 638 } |
681 | 639 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
826 void PluginList::DisableOutdatedPluginGroups() { | 784 void PluginList::DisableOutdatedPluginGroups() { |
827 disable_outdated_plugins_ = true; | 785 disable_outdated_plugins_ = true; |
828 } | 786 } |
829 | 787 |
830 PluginList::~PluginList() { | 788 PluginList::~PluginList() { |
831 } | 789 } |
832 | 790 |
833 | 791 |
834 } // namespace npapi | 792 } // namespace npapi |
835 } // namespace webkit | 793 } // namespace webkit |
OLD | NEW |