diff options
Diffstat (limited to 'remote/marionette/permissions.sys.mjs')
-rw-r--r-- | remote/marionette/permissions.sys.mjs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/remote/marionette/permissions.sys.mjs b/remote/marionette/permissions.sys.mjs new file mode 100644 index 0000000000..43fac98422 --- /dev/null +++ b/remote/marionette/permissions.sys.mjs @@ -0,0 +1,60 @@ +/* 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/. */ + +const lazy = {}; + +ChromeUtils.defineESModuleGetters(lazy, { + error: "chrome://remote/content/shared/webdriver/Errors.sys.mjs", + MarionettePrefs: "chrome://remote/content/marionette/prefs.sys.mjs", +}); + +/** @namespace */ +export const permissions = {}; + +/** + * Set a permission's state. + * Note: Currently just a shim to support testdriver's set_permission. + * + * @param {Object} descriptor + * Descriptor with the `name` property. + * @param {string} state + * State of the permission. It can be `granted`, `denied` or `prompt`. + * @param {boolean} oneRealm + * Currently ignored + * + * @throws {UnsupportedOperationError} + * If `marionette.setpermission.enabled` is not set or + * an unsupported permission is used. + */ +permissions.set = function(descriptor, state, oneRealm) { + if (!lazy.MarionettePrefs.setPermissionEnabled) { + throw new lazy.error.UnsupportedOperationError( + "'Set Permission' is not available" + ); + } + + const { name } = descriptor; + if (!["clipboard-write", "clipboard-read"].includes(name)) { + throw new lazy.error.UnsupportedOperationError( + `'Set Permission' doesn't support '${name}'` + ); + } + + if (state === "prompt") { + throw new lazy.error.UnsupportedOperationError( + "'Set Permission' doesn't support prompt" + ); + } + + // This is not a real implementation of the permissions API. + // Instead the purpose of this implementation is to have web-platform-tests + // that use `set_permission('clipboard-write|read')` not fail. + // We enable dom.events.testing.asyncClipboard for the whole test suite anyway, + // so no extra permission is necessary. + if (!Services.prefs.getBoolPref("dom.events.testing.asyncClipboard", false)) { + throw new lazy.error.UnsupportedOperationError( + "'Set Permission' expected dom.events.testing.asyncClipboard to be set" + ); + } +}; |