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
authorBenjamin Smedberg <benjamin@smedbergs.us>
Tue, 27 Sep 2016 13:50:59 -0400
changeset 418079 a40f48f20c2a1648ecc32be22dd5fba15511e534
parent 417914 66a77b9bfe5dcacd50eccf85de7c0e7e15ce0ffd
child 418121 89274c2a3d019df1d21ffa2bfe940c1e648a09c8
push id30584
push userbsmedberg@mozilla.com
push dateTue, 27 Sep 2016 17:54:16 +0000
reviewersjimm
bugs1269807
milestone52.0a1
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
dom/plugins/base/nsPluginHost.cpp
testing/profiles/prefs_general.js
--- 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);