diff --git a/dom/plugins/base/nsPluginHost.cpp b/dom/plugins/base/nsPluginHost.cpp index 91c0b47a0d2..3b78b99778f 100644 --- a/dom/plugins/base/nsPluginHost.cpp +++ b/dom/plugins/base/nsPluginHost.cpp @@ -125,6 +125,11 @@ static const char *kPrefWhitelist = "plugin.allowed_types"; static const char *kPrefDisableFullPage = "plugin.disable_full_page_plugin_for_types"; static const char *kPrefJavaMIME = "plugin.java.mime"; +// How long we wait before unloading an idle plugin process. +// Defaults to 30 seconds. +static const char *kPrefUnloadPluginTimeoutSecs = "dom.ipc.plugins.unloadTimeoutSecs"; +static const uint32_t kDefaultPluginUnloadingTimeout = 30; + // Version of cached plugin info // 0.01 first implementation // 0.02 added caching of CanUnload to fix bug 105935 @@ -226,7 +231,7 @@ bool ReadSectionHeader(nsPluginManifestLineReader& reader, const char *token) static bool UnloadPluginsASAP() { - return Preferences::GetBool("dom.ipc.plugins.unloadASAP", false); + return (Preferences::GetUint(kPrefUnloadPluginTimeoutSecs, kDefaultPluginUnloadingTimeout) == 0); } nsPluginHost::nsPluginHost() @@ -727,7 +732,11 @@ void nsPluginHost::OnPluginInstanceDestroyed(nsPluginTag* aPluginTag) } else { aPluginTag->mUnloadTimer = do_CreateInstance(NS_TIMER_CONTRACTID); } - aPluginTag->mUnloadTimer->InitWithCallback(this, 1000 * 60 * 3, nsITimer::TYPE_ONE_SHOT); + uint32_t unloadTimeout = Preferences::GetUint(kPrefUnloadPluginTimeoutSecs, + kDefaultPluginUnloadingTimeout); + aPluginTag->mUnloadTimer->InitWithCallback(this, + 1000 * unloadTimeout, + nsITimer::TYPE_ONE_SHOT); } } } diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js index 0da83a681f0..c43b5f6c22d 100644 --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -2060,6 +2060,10 @@ pref("dom.ipc.plugins.java.enabled", false); pref("dom.ipc.plugins.flash.subprocess.crashreporter.enabled", true); pref("dom.ipc.plugins.reportCrashURL", true); +// How long we wait before unloading an idle plugin process. +// Defaults to 30 seconds. +pref("dom.ipc.plugins.unloadTimeoutSecs", 30); + pref("dom.ipc.processCount", 1); // Enable the use of display-lists for SVG hit-testing and painting.