Index: webkit/glue/plugins/plugin_list.cc |
=================================================================== |
--- webkit/glue/plugins/plugin_list.cc (revision 26432) |
+++ webkit/glue/plugins/plugin_list.cc (working copy) |
@@ -141,6 +141,7 @@ |
// 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 @@ |
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 @@ |
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 @@ |
LoadPluginsFromDir(directories_to_scan[i], &new_plugins); |
} |
+ // Load the default plugin last. |
if (webkit_glue::IsDefaultPluginEnabled()) |
LoadPlugin(FilePath(kDefaultPluginLibraryName), &new_plugins); |