mozilla-prefer_plugin_pref.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Wed, 06 Jan 2010 22:03:46 +0100
changeset 46 c743908ffe6f
parent 8 19a8c8d53349
child 123 1d88ea95ad20
permissions -rw-r--r--
Update to 1.9.2rc1/3.6rc1

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
@@ -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<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;
+      }
+    }
+
+    // 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++) {