From: timeless@mozdev.org add support for plugin.soname.list.{plugin-file-name} diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -2671,6 +2671,7 @@ pref("print.print_color", false); pref("browser.cache.disk.capacity", 4096); pref("plugin.soname.list", ""); +pref("plugin.soname.list.libflashplayer.so", "/usr/lib/libGL.so"); # OpenVMS #endif diff --git a/modules/plugin/base/src/nsPluginsDirUnix.cpp b/modules/plugin/base/src/nsPluginsDirUnix.cpp --- a/modules/plugin/base/src/nsPluginsDirUnix.cpp +++ b/modules/plugin/base/src/nsPluginsDirUnix.cpp @@ -158,11 +158,12 @@ static PRBool LoadExtraSharedLib(const c /* this function looks for user_pref("plugin.soname.list", "/usr/X11R6/lib/libXt.so.6:libXext.so"); + user_pref("plugin.soname.list.libflashplayer.so", "/usr/lib/libGL.so"); in user's pref.js and loads all libs in specified order */ -static void LoadExtraSharedLibs() +static void LoadExtraSharedLibs(const char *soname) { // check out if user's prefs.js has libs name nsresult res; @@ -170,8 +171,15 @@ static void LoadExtraSharedLibs() if (NS_SUCCEEDED(res) && (prefs != nsnull)) { char *sonameList = NULL; PRBool prefSonameListIsSet = PR_TRUE; - res = prefs->GetCharPref(PREF_PLUGINS_SONAME, &sonameList); + nsCAutoString prefname(PREF_PLUGINS_SONAME); + if (soname) { + prefname.AppendLiteral("."); + prefname.Append(soname); + } + res = prefs->GetCharPref(prefname.get(), &sonameList); if (!sonameList) { + if (soname) + return; // pref is not set, lets use hardcoded list prefSonameListIsSet = PR_FALSE; sonameList = PL_strdup(DEFAULT_EXTRA_LIBS_LIST); @@ -374,12 +382,12 @@ nsresult nsPluginFile::LoadPlugin(PRLibr if (NS_FAILED(rv)) return rv; -#ifdef AIX nsCAutoString leafName; rv = mPlugin->GetNativeLeafName(leafName); if (NS_FAILED(rv)) return rv; +#ifdef AIX if (StringBeginsWith(leafName, NS_LITERAL_CSTRING("libjavaplugin_oji"))) SetJavaLibPath(path); #endif @@ -389,6 +397,12 @@ nsresult nsPluginFile::LoadPlugin(PRLibr #if defined(MOZ_WIDGET_GTK2) /////////////////////////////////////////////////////////// + // Sometimes plugins are just evil and we need to help them + // not hurt us. This hook lets users preload arbitrary + // libraries for individual plugins. + LoadExtraSharedLibs(leafName.get()); + + /////////////////////////////////////////////////////////// // Normally, Mozilla isn't linked against libXt and libXext // since it's a Gtk/Gdk application. On the other hand, // legacy plug-ins expect the libXt and libXext symbols @@ -400,7 +414,6 @@ nsresult nsPluginFile::LoadPlugin(PRLibr // namespace before attempting to load the plug-in seems to // work fine. - #if defined(SOLARIS) || defined(HPUX) // Acrobat/libXm: Lazy resolving might cause crash later (bug 211587) pLibrary = outLibrary = PR_LoadLibraryWithFlags(libSpec, PR_LD_NOW); @@ -409,7 +422,7 @@ nsresult nsPluginFile::LoadPlugin(PRLibr pLibrary = outLibrary = PR_LoadLibraryWithFlags(libSpec, 0); #endif if (!pLibrary) { - LoadExtraSharedLibs(); + LoadExtraSharedLibs(nsnull); // try reload plugin once more pLibrary = outLibrary = PR_LoadLibraryWithFlags(libSpec, 0); if (!pLibrary)