| Index: webkit/plugins/npapi/plugin_list.cc
|
| diff --git a/webkit/plugins/npapi/plugin_list.cc b/webkit/plugins/npapi/plugin_list.cc
|
| index 9bad351a94e7ab103309d086789aa28ef9b66a62..a59ff5ce043b71950736efa866fceeccd4ec20c1 100644
|
| --- a/webkit/plugins/npapi/plugin_list.cc
|
| +++ b/webkit/plugins/npapi/plugin_list.cc
|
| @@ -257,6 +257,17 @@ void PluginList::UnregisterInternalPlugin(const FilePath& path) {
|
| NOTREACHED();
|
| }
|
|
|
| +void PluginList::GetInternalPlugins(
|
| + std::vector<webkit::WebPluginInfo>* internal_plugins) {
|
| + base::AutoLock lock(lock_);
|
| +
|
| + for (std::vector<InternalPlugin>::iterator it = internal_plugins_.begin();
|
| + it != internal_plugins_.end();
|
| + ++it) {
|
| + internal_plugins->push_back(it->info);
|
| + }
|
| +}
|
| +
|
| bool PluginList::ReadPluginInfo(const FilePath& filename,
|
| webkit::WebPluginInfo* info,
|
| const PluginEntryPoints** entry_points) {
|
| @@ -348,11 +359,6 @@ PluginGroup* PluginList::CreatePluginGroup(
|
| }
|
|
|
| void PluginList::LoadPluginsInternal(ScopedVector<PluginGroup>* plugin_groups) {
|
| - // Don't want to hold the lock while loading new plugins, so we don't block
|
| - // other methods if they're called on other threads.
|
| - std::vector<FilePath> extra_plugin_paths;
|
| - std::vector<FilePath> extra_plugin_dirs;
|
| - std::vector<InternalPlugin> internal_plugins;
|
| base::Closure will_load_callback;
|
| {
|
| base::AutoLock lock(lock_);
|
| @@ -360,53 +366,19 @@ void PluginList::LoadPluginsInternal(ScopedVector<PluginGroup>* plugin_groups) {
|
| // reach the end of the method.
|
| plugins_need_refresh_ = false;
|
| will_load_callback = will_load_plugins_callback_;
|
| - extra_plugin_paths = extra_plugin_paths_;
|
| - extra_plugin_dirs = extra_plugin_dirs_;
|
| - internal_plugins = internal_plugins_;
|
| }
|
|
|
| if (!will_load_callback.is_null())
|
| will_load_callback.Run();
|
|
|
| - std::set<FilePath> visited_plugins;
|
| -
|
| - std::vector<FilePath> directories_to_scan;
|
| - GetPluginDirectories(&directories_to_scan);
|
| -
|
| - // Load internal plugins first so that, if both an internal plugin and a
|
| - // "discovered" plugin want to handle the same type, the internal plugin
|
| - // will have precedence.
|
| - for (size_t i = 0; i < internal_plugins.size(); ++i) {
|
| - if (internal_plugins[i].info.path.value() == kDefaultPluginLibraryName)
|
| - continue;
|
| - LoadPlugin(internal_plugins[i].info.path, plugin_groups);
|
| - }
|
| + std::vector<FilePath> plugin_paths;
|
| + GetPluginPathsToLoad(&plugin_paths);
|
|
|
| - for (size_t i = 0; i < extra_plugin_paths.size(); ++i) {
|
| - const FilePath& path = extra_plugin_paths[i];
|
| - if (visited_plugins.find(path) != visited_plugins.end())
|
| - continue;
|
| - LoadPlugin(path, plugin_groups);
|
| - visited_plugins.insert(path);
|
| - }
|
| -
|
| - for (size_t i = 0; i < extra_plugin_dirs.size(); ++i) {
|
| - LoadPluginsFromDir(
|
| - extra_plugin_dirs[i], plugin_groups, &visited_plugins);
|
| - }
|
| -
|
| - for (size_t i = 0; i < directories_to_scan.size(); ++i) {
|
| - LoadPluginsFromDir(
|
| - directories_to_scan[i], plugin_groups, &visited_plugins);
|
| + for (std::vector<FilePath>::const_iterator it = plugin_paths.begin();
|
| + it != plugin_paths.end();
|
| + ++it) {
|
| + LoadPlugin(*it, plugin_groups);
|
| }
|
| -
|
| -#if defined(OS_WIN)
|
| - LoadPluginsFromRegistry(plugin_groups, &visited_plugins);
|
| -#endif
|
| -
|
| - // Load the default plugin last.
|
| - if (default_plugin_enabled_)
|
| - LoadPlugin(FilePath(kDefaultPluginLibraryName), plugin_groups);
|
| }
|
|
|
| void PluginList::LoadPlugins() {
|
| @@ -456,20 +428,53 @@ void PluginList::LoadPlugin(const FilePath& path,
|
| AddToPluginGroups(plugin_info, plugin_groups);
|
| }
|
|
|
| -void PluginList::GetPluginPathListsToLoad(
|
| - std::vector<FilePath>* extra_plugin_paths,
|
| - std::vector<FilePath>* extra_plugin_dirs,
|
| - std::vector<webkit::WebPluginInfo>* internal_plugins) {
|
| - base::AutoLock lock(lock_);
|
| - *extra_plugin_paths = extra_plugin_paths_;
|
| - *extra_plugin_dirs = extra_plugin_dirs_;
|
| +void PluginList::GetPluginPathsToLoad(std::vector<FilePath>* plugin_paths) {
|
| + // Don't want to hold the lock while loading new plugins, so we don't block
|
| + // other methods if they're called on other threads.
|
| + std::vector<FilePath> extra_plugin_paths;
|
| + std::vector<FilePath> extra_plugin_dirs;
|
| + std::vector<InternalPlugin> internal_plugins;
|
| + {
|
| + base::AutoLock lock(lock_);
|
| + extra_plugin_paths = extra_plugin_paths_;
|
| + extra_plugin_dirs = extra_plugin_dirs_;
|
| + internal_plugins = internal_plugins_;
|
| + }
|
|
|
| - *internal_plugins = std::vector<webkit::WebPluginInfo>();
|
| - for (std::vector<InternalPlugin>::iterator it = internal_plugins_.begin();
|
| - it != internal_plugins_.end();
|
| - ++it) {
|
| - internal_plugins->push_back(it->info);
|
| + std::vector<FilePath> directories_to_scan;
|
| + GetPluginDirectories(&directories_to_scan);
|
| +
|
| + // Load internal plugins first so that, if both an internal plugin and a
|
| + // "discovered" plugin want to handle the same type, the internal plugin
|
| + // will have precedence.
|
| + for (size_t i = 0; i < internal_plugins.size(); ++i) {
|
| + if (internal_plugins[i].info.path.value() == kDefaultPluginLibraryName)
|
| + continue;
|
| + plugin_paths->push_back(internal_plugins[i].info.path);
|
| }
|
| +
|
| + for (size_t i = 0; i < extra_plugin_paths.size(); ++i) {
|
| + const FilePath& path = extra_plugin_paths[i];
|
| + if (std::find(plugin_paths->begin(), plugin_paths->end(), path) !=
|
| + plugin_paths->end()) {
|
| + continue;
|
| + }
|
| + plugin_paths->push_back(path);
|
| + }
|
| +
|
| + for (size_t i = 0; i < extra_plugin_dirs.size(); ++i)
|
| + GetPluginsInDir(extra_plugin_dirs[i], plugin_paths);
|
| +
|
| + for (size_t i = 0; i < directories_to_scan.size(); ++i)
|
| + GetPluginsInDir(directories_to_scan[i], plugin_paths);
|
| +
|
| +#if defined(OS_WIN)
|
| + GetPluginPathsFromRegistry(plugin_paths);
|
| +#endif
|
| +
|
| + // Load the default plugin last.
|
| + if (default_plugin_enabled_)
|
| + plugin_paths->push_back(FilePath(kDefaultPluginLibraryName));
|
| }
|
|
|
| void PluginList::SetPlugins(const std::vector<webkit::WebPluginInfo>& plugins) {
|
|
|