summaryrefslogtreecommitdiffstats
path: root/dom/plugins/test/unit/test_allowed_types.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/plugins/test/unit/test_allowed_types.js')
-rw-r--r--dom/plugins/test/unit/test_allowed_types.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/dom/plugins/test/unit/test_allowed_types.js b/dom/plugins/test/unit/test_allowed_types.js
new file mode 100644
index 000000000..09b30b31a
--- /dev/null
+++ b/dom/plugins/test/unit/test_allowed_types.js
@@ -0,0 +1,142 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+
+function run_test() {
+ const pluginHost = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
+ const pluginDefaultState = Services.prefs.getIntPref("plugin.default.state");
+
+ Services.prefs.setBoolPref("plugin.load_flash_only", false);
+
+ function reload_plugins_with_allowed_types(allowed_types) {
+ if (typeof allowed_types === "undefined") {
+ // If we didn't get an allowed_types string, then unset the pref,
+ // so the caller can test the behavior when the pref isn't set.
+ Services.prefs.clearUserPref("plugin.allowed_types");
+ } else {
+ Services.prefs.setCharPref("plugin.allowed_types", allowed_types);
+ }
+ pluginHost.reloadPlugins();
+ }
+
+ function get_status_for_type(type) {
+ try {
+ return pluginHost.getStateForType(type);
+ } catch(ex) {
+ // If the type is not allowed, then nsIPluginHost.getStateForType throws
+ // NS_ERROR_NOT_AVAILABLE, for which we return undefined to make it easier
+ // to write assertions about the API.
+ if (ex.result === Cr.NS_ERROR_NOT_AVAILABLE) {
+ return undefined;
+ }
+ throw ex;
+ }
+ }
+
+ // If allowed_types isn't set, then all plugin types are enabled.
+ reload_plugins_with_allowed_types();
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ // If allowed_types is set to the empty string, then all plugin types are enabled.
+ reload_plugins_with_allowed_types("");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ // If allowed_types is set to anything other than the empty string,
+ // then only types that exactly match its comma-separated entries are enabled,
+ // so a single space disables all types.
+ reload_plugins_with_allowed_types(" ");
+ do_check_eq(get_status_for_type("application/x-test"), undefined);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), undefined);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ // The rest of the assertions test various values of allowed_types to ensure
+ // that the correct types are enabled.
+
+ reload_plugins_with_allowed_types("application/x-test");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), undefined);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-Second-Test");
+ do_check_eq(get_status_for_type("application/x-test"), undefined);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-nonexistent");
+ do_check_eq(get_status_for_type("application/x-test"), undefined);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), undefined);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-test,application/x-Second-Test");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-Second-Test,application/x-test");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-test,application/x-nonexistent");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), undefined);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-nonexistent,application/x-test");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), undefined);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-test,application/x-Second-Test,application/x-nonexistent");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-test,application/x-nonexistent,application/x-Second-Test");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-Second-Test,application/x-test,application/x-nonexistent");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-Second-Test,application/x-nonexistent,application/x-test");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-nonexistent,application/x-test,application/x-Second-Test");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ reload_plugins_with_allowed_types("application/x-nonexistent,application/x-Second-Test,application/x-test");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-Second-Test"), pluginDefaultState);
+ do_check_eq(get_status_for_type("application/x-nonexistent"), undefined);
+
+ // Plugin types are case-insensitive, so matching should be too.
+ reload_plugins_with_allowed_types("APPLICATION/X-TEST");
+ do_check_eq(get_status_for_type("application/x-test"), pluginDefaultState);
+ reload_plugins_with_allowed_types("application/x-test");
+ do_check_eq(get_status_for_type("APPLICATION/X-TEST"), pluginDefaultState);
+
+ // Types must match exactly, so supersets should not enable subset types.
+ reload_plugins_with_allowed_types("application/x-test-superset");
+ do_check_eq(get_status_for_type("application/x-test"), undefined);
+ reload_plugins_with_allowed_types("superset-application/x-test");
+ do_check_eq(get_status_for_type("application/x-test"), undefined);
+
+ // Clean up.
+ Services.prefs.clearUserPref("plugin.allowed_types");
+ Services.prefs.clearUserPref("plugin.importedState");
+}