From 0d683c611a18dc6ea0e99f38c73b4fb96611041f Mon Sep 17 00:00:00 2001 From: "jam@chromium.org" <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> Date: Fri, 18 Sep 2009 18:26:07 +0000 Subject: [PATCH] Fix registration of internal plugins broken by rev 23501 Due to the plugin_list changes in rev 23501 internal plugins registered via a call to PluginList::RegisterInternalPlugin() are no longer being added to the plugin list when LoadPlugins() is called. Fix the problem by adding the internal plugins in LoadPlugins(). Original change by Marshall Greenblatt <magreenblatt@gmail.com> at http://codereview.chromium.org/173107. Review URL: http://codereview.chromium.org/208026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26595 0039d316-1c4b-4281-b951-d872f2087c98 --- webkit/glue/plugins/plugin_list.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/webkit/glue/plugins/plugin_list.cc b/webkit/glue/plugins/plugin_list.cc index 69315b26bffe9..467f68e206ed2 100644 --- a/webkit/glue/plugins/plugin_list.cc +++ b/webkit/glue/plugins/plugin_list.cc @@ -141,6 +141,7 @@ void PluginList::LoadPlugins(bool refresh) { // other methods if they're called on other threads. std::vector<FilePath> extra_plugin_paths; std::vector<FilePath> extra_plugin_dirs; + std::vector<PluginVersionInfo> internal_plugins; { AutoLock lock(lock_); if (plugins_loaded_ && !refresh) @@ -148,6 +149,7 @@ void PluginList::LoadPlugins(bool refresh) { extra_plugin_paths = extra_plugin_paths_; extra_plugin_dirs = extra_plugin_dirs_; + internal_plugins = internal_plugins_; } base::TimeTicks start_time = base::TimeTicks::Now(); @@ -157,6 +159,15 @@ void PluginList::LoadPlugins(bool refresh) { 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].path.value() == kDefaultPluginLibraryName) + continue; + LoadPlugin(internal_plugins[i].path, &new_plugins); + } + for (size_t i = 0; i < extra_plugin_paths.size(); ++i) LoadPlugin(extra_plugin_paths[i], &new_plugins); @@ -168,6 +179,7 @@ void PluginList::LoadPlugins(bool refresh) { LoadPluginsFromDir(directories_to_scan[i], &new_plugins); } + // Load the default plugin last. if (webkit_glue::IsDefaultPluginEnabled()) LoadPlugin(FilePath(kDefaultPluginLibraryName), &new_plugins); -- GitLab