diff -r ad87c5e85a41 -r 045edd78eceb mozilla-prefer_plugin_pref.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mozilla-prefer_plugin_pref.patch Sat Nov 28 22:14:37 2009 +0100 @@ -0,0 +1,46 @@ +diff --git a/modules/plugin/base/src/nsPluginHost.cpp b/modules/plugin/base/src/nsPluginHost.cpp +--- a/modules/plugin/base/src/nsPluginHost.cpp ++++ b/modules/plugin/base/src/nsPluginHost.cpp +@@ -3929,8 +3929,41 @@ nsPluginHost::FindPluginForType(const ch + // if we have a mimetype passed in, search the mPlugins + // linked list for a match + if (nsnull != aMimeType) { ++ nsresult res; ++ nsCOMPtr prefB (do_QueryInterface(mPrefService)); ++ ++ char *preferredPluginPath = NULL; ++ nsCAutoString mimetypePrefString ("modules.plugins.mimetype."); ++ mimetypePrefString.Append(aMimeType); ++ const char *mimetypePrefChar = mimetypePrefString.get(); ++ res = prefB->GetCharPref(mimetypePrefChar, &preferredPluginPath); ++ ++ if(!NS_SUCCEEDED(res)) preferredPluginPath = NULL; ++ + plugins = mPlugins; +- ++ if(preferredPluginPath) { ++ while (nsnull != plugins) { ++ if (0 == PL_strcasecmp(plugins->mFileName.get(), preferredPluginPath) || ++ 0 == PL_strcasecmp(plugins->mFullPath.get(), preferredPluginPath)) { ++ return plugins; ++ } ++ plugins = plugins->mNext; ++ } ++ ++ // now lets search for substrings ++ plugins=mPlugins; ++ while (nsnull != plugins) { ++ if (nsnull != PL_strstr(plugins->mFileName.get(), preferredPluginPath) || ++ nsnull != PL_strstr(plugins->mFullPath.get(), preferredPluginPath)) { ++ return plugins; ++ } ++ plugins = plugins->mNext; ++ } ++ } ++ ++ // if there is no pref for this mime-type, or if the plugin named in pref ++ // isn't found, we pick the first that matches for this mime-type ++ plugins = mPlugins; + while (nsnull != plugins) { + variants = plugins->mVariants; + for (cnt = 0; cnt < variants; cnt++) {