# HG changeset patch # User Wolfgang Rosenauer # Date 1335684969 -7200 # Node ID 7704a021055f16460895ee6d60e8409ce0581ffe # Parent 7d934b2f5014b7cd7480dd563d0a72385b412c2f ported mozilla-prefer_plugin_pref.patch to latest sources diff -r 7d934b2f5014 -r 7704a021055f mozilla-prefer_plugin_pref.patch --- a/mozilla-prefer_plugin_pref.patch Sat Apr 28 23:20:28 2012 +0200 +++ b/mozilla-prefer_plugin_pref.patch Sun Apr 29 09:36:09 2012 +0200 @@ -1,10 +1,15 @@ From: Ubuntu -Subject: introduce a pref to prefer certain plugins for mime-types +Introduce a pref to prefer certain plugins for mime-types + +For example: + pref ("modules.plugins.mimetype.application/x-shockwave-flash", "/usr/lib/firefox-3.0.1/plugins/libflashplayer.so") + + would make the flashplyer installed in that location the preferred one to use. diff --git a/dom/plugins/base/nsPluginHost.cpp b/dom/plugins/base/nsPluginHost.cpp --- a/dom/plugins/base/nsPluginHost.cpp +++ b/dom/plugins/base/nsPluginHost.cpp -@@ -1580,17 +1580,48 @@ nsPluginHost::FindPluginForType(const ch +@@ -1556,17 +1556,45 @@ nsPluginHost::FindPluginForType(const ch bool aCheckEnabled) { if (!aMimeType) { @@ -13,38 +18,35 @@ LoadPlugins(); -+ nsresult res; -+ nsCOMPtr prefB (do_QueryInterface(mPrefService)); ++ nsCAutoString mimetypePref("modules.plugins.mimetype."); ++ mimetypePref.Append(aMimeType); + -+ 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; ++ nsAdoptingCString preferred = Preferences::GetCString(mimetypePref.get()); + nsPluginTag *plugin = mPlugins; -+ if(preferredPluginPath) { -+ while (nsnull != plugin) { -+ if (0 == PL_strcasecmp(plugin->mFileName.get(), preferredPluginPath) || -+ 0 == PL_strcasecmp(plugin->mFullPath.get(), preferredPluginPath)) { -+ return plugin; -+ } -+ plugin = plugin->mNext; -+ } ++ if(!preferred.IsEmpty()) { ++ nsCOMPtr file; ++ nsresult rv = NS_NewNativeLocalFile(preferred, false, getter_AddRefs(file)); ++ bool isAbsolute = NS_SUCCEEDED(rv); + -+ // now lets search for substrings -+ plugin = mPlugins; -+ while (nsnull != plugin) { -+ if (nsnull != PL_strstr(plugin->mFileName.get(), preferredPluginPath) || -+ nsnull != PL_strstr(plugin->mFullPath.get(), preferredPluginPath)) { -+ return plugin; ++ while (plugin) { ++ if (((!isAbsolute && 0 == PL_strcasecmp(plugin->mFileName.get(), preferred.get())) || ++ (isAbsolute && 0 == PL_strcasecmp(plugin->mFullPath.get(), preferred.get()))) && ++ (!aCheckEnabled || plugin->IsEnabled())) { ++ PRInt32 mimeCount = plugin->mMimeTypes.Length(); ++ for (PRInt32 i = 0; i < mimeCount; i++) { ++ if (0 == PL_strcasecmp(plugin->mMimeTypes[i].get(), aMimeType)) { ++ return plugin; ++ } ++ } + } + plugin = plugin->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 ++ plugin = mPlugins; while (plugin) { if (!aCheckEnabled || plugin->IsEnabled()) { PRInt32 mimeCount = plugin->mMimeTypes.Length();