Bug 1269807 - Remove support for all NPAPI plugins except for Flash, behind a pref. This will be disabled for ESR 52, but enabled for release 52. In the next cycle, the pref will be removed and this will be hardcoded. r=jimm
draft
Bug 1269807 - Remove support for all NPAPI plugins except for Flash, behind a pref. This will be disabled for ESR 52, but enabled for release 52. In the next cycle, the pref will be removed and this will be hardcoded. r=jimm
MozReview-Commit-ID: 6VD1tJI4aTw
--- a/dom/plugins/base/nsPluginHost.cpp
+++ b/dom/plugins/base/nsPluginHost.cpp
@@ -2088,16 +2088,31 @@ nsPluginHost::AddPluginTag(nsPluginTag*
if (!IsTypeInList(aPluginTag->MimeTypes()[i], disableFullPage)) {
RegisterWithCategoryManager(aPluginTag->MimeTypes()[i],
ePluginRegister);
}
}
}
}
+static bool
+PluginInfoIsFlash(const nsPluginInfo& info)
+{
+ if (!strcmp(info.fDescription, "Shockwave Flash")) {
+ return false;
+ }
+ for (uint32_t i = 0; i < info.fVariantCount; ++i) {
+ if (info.fMimeTypeArray[i] &&
+ !strcmp(info.fMimeTypeArray[i], "application/x-shockwave-flash")) {
+ return true;
+ }
+ }
+ return false;
+}
+
typedef NS_NPAPIPLUGIN_CALLBACK(char *, NP_GETMIMEDESCRIPTION)(void);
nsresult nsPluginHost::ScanPluginsDirectory(nsIFile *pluginsDir,
bool aCreatePluginList,
bool *aPluginsChanged)
{
MOZ_ASSERT(XRE_IsParentProcess());
@@ -2108,16 +2123,18 @@ nsresult nsPluginHost::ScanPluginsDirect
#ifdef PLUGIN_LOGGING
nsAutoCString dirPath;
pluginsDir->GetNativePath(dirPath);
PLUGIN_LOG(PLUGIN_LOG_BASIC,
("nsPluginHost::ScanPluginsDirectory dir=%s\n", dirPath.get()));
#endif
+ bool flashOnly = Preferences::GetBool("plugin.load_flash_only", true);
+
nsCOMPtr<nsISimpleEnumerator> iter;
rv = pluginsDir->GetDirectoryEntries(getter_AddRefs(iter));
if (NS_FAILED(rv))
return rv;
AutoTArray<nsCOMPtr<nsIFile>, 6> pluginFiles;
bool hasMore;
@@ -2210,17 +2227,18 @@ nsresult nsPluginHost::ScanPluginsDirect
memset(&info, 0, sizeof(info));
nsresult res;
// Opening a block for the telemetry AutoTimer
{
Telemetry::AutoTimer<Telemetry::PLUGIN_LOAD_METADATA> telemetry;
res = pluginFile.GetPluginInfo(info, &library);
}
// if we don't have mime type don't proceed, this is not a plugin
- if (NS_FAILED(res) || !info.fMimeTypeArray) {
+ if (NS_FAILED(res) || !info.fMimeTypeArray ||
+ (flashOnly && !PluginInfoIsFlash(info))) {
RefPtr<nsInvalidPluginTag> invalidTag = new nsInvalidPluginTag(filePath.get(),
fileModTime);
pluginFile.FreePluginInfo(info);
if (aCreatePluginList) {
invalidTag->mSeen = true;
}
invalidTag->mNext = mInvalidPlugins;
--- a/testing/profiles/prefs_general.js
+++ b/testing/profiles/prefs_general.js
@@ -347,8 +347,12 @@ user_pref("browser.urlbar.suggest.search
user_pref("browser.urlbar.userMadeSearchSuggestionsChoice", true);
user_pref("dom.audiochannel.mutedByDefault", false);
user_pref("webextensions.tests", true);
user_pref("startup.homepage_welcome_url", "about:blank");
user_pref("startup.homepage_welcome_url.additional", "");
user_pref("browser.usedOnWindows10.introURL", "");
+
+// For Firefox 52 only, ESR will support non-Flash plugins while release will
+// not, so we keep testing the non-Flash pathways
+user_pref("plugin.load_flash_only", false);