Bug 1429169 - Add enterprise policy for disabling the Flash plugin draft
authorKirk Steuber <ksteuber@mozilla.com>
Wed, 21 Mar 2018 11:04:28 -0700
changeset 775296 69d1f591fadfba49d088b1f4865db6e727452a17
parent 775295 50587d42afc024ed190179ae45642b4bad2cabde
child 775297 bbba03890a6062526c20e854c9a0d23e8ea81549
push id104688
push userksteuber@mozilla.com
push dateFri, 30 Mar 2018 20:38:45 +0000
bugs1429169
milestone61.0a1
Bug 1429169 - Add enterprise policy for disabling the Flash plugin MozReview-Commit-ID: AEZZbaYwTLT
browser/components/enterprisepolicies/Policies.jsm
browser/components/enterprisepolicies/schemas/policies-schema.json
browser/components/enterprisepolicies/tests/browser/browser.ini
browser/components/enterprisepolicies/tests/browser/browser_policy_disable_flash_plugin.js
--- a/browser/components/enterprisepolicies/Policies.jsm
+++ b/browser/components/enterprisepolicies/Policies.jsm
@@ -386,16 +386,34 @@ var Policies = {
         }
       }
     }
   },
 
   "FlashPlugin": {
     onBeforeUIStartup(manager, param) {
       addAllowDenyPermissions("plugin:flash", param.Allow, param.Block);
+
+      const FLASH_NEVER_ACTIVATE = 0;
+      const FLASH_ASK_TO_ACTIVATE = 1;
+      const FLASH_ALWAYS_ACTIVATE = 2;
+
+      let flashPrefVal;
+      if (param.Default === undefined) {
+        flashPrefVal = FLASH_ASK_TO_ACTIVATE;
+      } else if (param.Default) {
+        flashPrefVal = FLASH_ALWAYS_ACTIVATE;
+      } else {
+        flashPrefVal = FLASH_NEVER_ACTIVATE;
+      }
+      if (param.Locked) {
+        setAndLockPref("plugin.state.flash", flashPrefVal);
+      } else if (param.Default !== undefined) {
+        setDefaultPref("plugin.state.flash", flashPrefVal);
+      }
     }
   },
 
   "Homepage": {
     onBeforeUIStartup(manager, param) {
       // |homepages| will be a string containing a pipe-separated ('|') list of
       // URLs because that is what the "Home page" section of about:preferences
       // (and therefore what the pref |browser.startup.homepage|) accepts.
--- a/browser/components/enterprisepolicies/schemas/policies-schema.json
+++ b/browser/components/enterprisepolicies/schemas/policies-schema.json
@@ -288,16 +288,24 @@
           }
         },
 
         "Block": {
           "type": "array",
           "items": {
             "type": "origin"
           }
+        },
+
+        "Default": {
+          "type": "boolean"
+        },
+
+        "Locked": {
+          "type": "boolean"
         }
       }
     },
 
     "Homepage": {
       "description": "Set and optionally lock the homepage.",
       "first_available": "60.0",
       "enterprise_only": true,
--- a/browser/components/enterprisepolicies/tests/browser/browser.ini
+++ b/browser/components/enterprisepolicies/tests/browser/browser.ini
@@ -23,16 +23,17 @@ support-files =
 [browser_policy_block_about_profiles.js]
 [browser_policy_block_about_support.js]
 [browser_policy_block_set_desktop_background.js]
 [browser_policy_bookmarks.js]
 [browser_policy_clear_blocked_cookies.js]
 [browser_policy_cookie_settings.js]
 [browser_policy_default_browser_check.js]
 [browser_policy_disable_feedback_commands.js]
+[browser_policy_disable_flash_plugin.js]
 [browser_policy_disable_fxaccounts.js]
 [browser_policy_disable_masterpassword.js]
 [browser_policy_disable_pdfjs.js]
 [browser_policy_disable_pocket.js]
 [browser_policy_disable_privatebrowsing.js]
 [browser_policy_disable_safemode.js]
 [browser_policy_disable_shield.js]
 [browser_policy_disable_telemetry.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/enterprisepolicies/tests/browser/browser_policy_disable_flash_plugin.js
@@ -0,0 +1,134 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+const labelTextAlwaysActivate = "Always Activate";
+const labelTextAskToActivate = "Ask to Activate";
+const labelTextNeverActivate = "Never Activate";
+
+function restore_prefs() {
+  Services.prefs.clearUserPref("plugin.state.flash");
+}
+registerCleanupFunction(restore_prefs);
+
+async function test_flash_status({expectedLabelText, locked}) {
+  let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+  await BrowserOpenAddonsMgr("addons://list/plugin");
+  await ContentTask.spawn(tab.linkedBrowser, {aExpectedLabelText: expectedLabelText, aLocked: locked}, async function({aExpectedLabelText, aLocked}) {
+    let list = content.document.getElementById("addon-list");
+    let flashEntry = list.getElementsByAttribute("name", "Shockwave Flash")[0];
+    let dropDown = content.document.getAnonymousElementByAttribute(flashEntry, "anonid", "state-menulist");
+
+    is(dropDown.label, aExpectedLabelText,
+       "Flash setting text should match the expected value");
+    is(dropDown.disabled, aLocked,
+       "Flash controls disabled state should match policy locked state");
+  });
+  BrowserTestUtils.removeTab(tab);
+
+  is(Services.prefs.prefIsLocked("plugin.state.flash"), locked,
+     "Flash pref lock state should match policy lock state");
+}
+
+add_task(async function test_enabled() {
+  await setupPolicyEngineWithJson({
+    "policies": {
+      "FlashPlugin": {
+        "Default": true
+      }
+    }
+  });
+
+  await test_flash_status({
+    expectedLabelText: labelTextAlwaysActivate,
+    locked: false
+  });
+
+  restore_prefs();
+});
+
+add_task(async function test_enabled_locked() {
+  await setupPolicyEngineWithJson({
+    "policies": {
+      "FlashPlugin": {
+        "Default": true,
+        "Locked": true
+      }
+    }
+  });
+
+  await test_flash_status({
+    expectedLabelText: labelTextAlwaysActivate,
+    locked: true
+  });
+
+  restore_prefs();
+});
+
+add_task(async function test_disabled() {
+  await setupPolicyEngineWithJson({
+    "policies": {
+      "FlashPlugin": {
+        "Default": false
+      }
+    }
+  });
+
+  await test_flash_status({
+    expectedLabelText: labelTextNeverActivate,
+    locked: false
+  });
+
+  restore_prefs();
+});
+
+add_task(async function test_disabled_locked() {
+  await setupPolicyEngineWithJson({
+    "policies": {
+      "FlashPlugin": {
+        "Default": false,
+        "Locked": true
+      }
+    }
+  });
+
+  await test_flash_status({
+    expectedLabelText: labelTextNeverActivate,
+    locked: true
+  });
+
+  restore_prefs();
+});
+
+add_task(async function test_ask() {
+  await setupPolicyEngineWithJson({
+    "policies": {
+      "FlashPlugin": {
+      }
+    }
+  });
+
+  await test_flash_status({
+    expectedLabelText: labelTextAskToActivate,
+    locked: false
+  });
+
+  restore_prefs();
+});
+
+add_task(async function test_ask_locked() {
+  await setupPolicyEngineWithJson({
+    "policies": {
+      "FlashPlugin": {
+        "Locked": true
+      }
+    }
+  });
+
+  await test_flash_status({
+    expectedLabelText: labelTextAskToActivate,
+    locked: true
+  });
+
+  restore_prefs();
+});