MozillaFirefox/mozilla-prefer_plugin_pref.patch

55 lines
1.9 KiB
Diff

From: Ubuntu
Subject: introduce a pref to prefer certain plugins for mime-types
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
@@ -1620,17 +1620,47 @@ nsPluginHost::FindPluginForType(const ch
nsPluginTag *plugins = nsnull;
PRInt32 variants, cnt;
LoadPlugins();
// if we have a mimetype passed in, search the mPlugins
// linked list for a match
if (aMimeType) {
+ nsresult res;
+ nsCOMPtr<nsIPrefBranch> 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;
+ }
+ }
while (plugins) {
variants = plugins->mVariants;
for (cnt = 0; cnt < variants; cnt++) {
if ((!aCheckEnabled || plugins->IsEnabled()) &&
plugins->mMimeTypeArray[cnt] &&
(0 == PL_strcasecmp(plugins->mMimeTypeArray[cnt], aMimeType))) {
return plugins;