diff options
Diffstat (limited to 'browser/components/originattributes/test/mochitest/test_permissions_api.html')
-rw-r--r-- | browser/components/originattributes/test/mochitest/test_permissions_api.html | 207 |
1 files changed, 0 insertions, 207 deletions
diff --git a/browser/components/originattributes/test/mochitest/test_permissions_api.html b/browser/components/originattributes/test/mochitest/test_permissions_api.html deleted file mode 100644 index 63c74d1fe..000000000 --- a/browser/components/originattributes/test/mochitest/test_permissions_api.html +++ /dev/null @@ -1,207 +0,0 @@ -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<!DOCTYPE HTML> -<html> - -<head> - <meta charset="utf-8"> - <title>Test for Permissions API</title> - <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <link rel="stylesheet" href="/tests/SimpleTest/test.css"> -</head> - -<body> - <pre id="test"></pre> - <script type="application/javascript;version=1.8"> - /*globals SpecialPowers, SimpleTest, is, ok, */ - 'use strict'; - - const { - UNKNOWN_ACTION, - PROMPT_ACTION, - ALLOW_ACTION, - DENY_ACTION - } = SpecialPowers.Ci.nsIPermissionManager; - - SimpleTest.waitForExplicitFinish(); - - const PERMISSIONS = [{ - name: 'geolocation', - type: 'geo' - }, { - name: 'notifications', - type: 'desktop-notification' - }, { - name: 'push', - type: 'desktop-notification' - }, ]; - - const UNSUPPORTED_PERMISSIONS = [ - 'foobarbaz', // Not in spec, for testing only. - 'midi', - ]; - - // Create a closure, so that tests are run on the correct window object. - function createPermissionTester(aWindow) { - return { - setPermissions(allow) { - const permissions = PERMISSIONS.map(({ type }) => { - return { - type, - allow, - 'context': aWindow.document - }; - }); - return new Promise((resolve) => { - SpecialPowers.popPermissions(() => { - SpecialPowers.pushPermissions(permissions, resolve); - }); - }); - }, - revokePermissions() { - const promisesToRevoke = PERMISSIONS.map(({ name }) => { - return aWindow.navigator.permissions - .revoke({ name }) - .then( - ({ state }) => is(state, 'prompt', `correct state for '${name}'`), - () => ok(false, `revoke should not have rejected for '${name}'`) - ); - }); - return Promise.all(promisesToRevoke); - }, - revokeUnsupportedPermissions() { - const promisesToRevoke = UNSUPPORTED_PERMISSIONS.map(({ name }) => { - return aWindow.navigator.permissions - .revoke({ name }) - .then( - () => ok(false, `revoke should not have resolved for '${name}'`), - error => is(error.name, 'TypeError', `revoke should have thrown TypeError for '${name}'`) - ); - }); - return Promise.all(promisesToRevoke); - }, - checkPermissions(state) { - const promisesToQuery = PERMISSIONS.map(({ name }) => { - return aWindow.navigator.permissions - .query({ name }) - .then( - () => is(state, state, `correct state for '${name}'`), - () => ok(false, `query should not have rejected for '${name}'`) - ); - }); - return Promise.all(promisesToQuery); - }, - checkUnsupportedPermissions() { - const promisesToQuery = UNSUPPORTED_PERMISSIONS.map(({ name }) => { - return aWindow.navigator.permissions - .query({ name }) - .then( - () => ok(false, `query should not have resolved for '${name}'`), - error => { - is(error.name, 'TypeError', - `query should have thrown TypeError for '${name}'`); - } - ); - }); - return Promise.all(promisesToQuery); - }, - promiseStateChanged(name, state) { - return aWindow.navigator.permissions - .query({ name }) - .then(status => { - return new Promise( resolve => { - status.onchange = () => { - status.onchange = null; - is(status.state, state, `state changed for '${name}'`); - resolve(); - }; - }); - }, - () => ok(false, `query should not have rejected for '${name}'`)); - }, - testStatusOnChange() { - return new Promise((resolve) => { - SpecialPowers.popPermissions(() => { - const permission = 'geolocation'; - const promiseGranted = this.promiseStateChanged(permission, 'granted'); - this.setPermissions(ALLOW_ACTION); - promiseGranted.then(() => { - const promisePrompt = this.promiseStateChanged(permission, 'prompt'); - SpecialPowers.popPermissions(); - return promisePrompt; - }).then(resolve); - }); - }); - }, - testInvalidQuery() { - return aWindow.navigator.permissions - .query({ name: 'invalid' }) - .then( - () => ok(false, 'invalid query should not have resolved'), - () => ok(true, 'invalid query should have rejected') - ); - }, - testInvalidRevoke() { - return aWindow.navigator.permissions - .revoke({ name: 'invalid' }) - .then( - () => ok(false, 'invalid revoke should not have resolved'), - () => ok(true, 'invalid revoke should have rejected') - ); - }, - }; - } - - function enablePrefs() { - const ops = { - 'set': [ - ['dom.permissions.revoke.enable', true], - ['privacy.firstparty.isolate', true], - ], - }; - return SpecialPowers.pushPrefEnv(ops); - } - - function createIframe() { - return new Promise((resolve) => { - const iframe = document.createElement('iframe'); - iframe.src = 'file_empty.html'; - iframe.onload = () => resolve(iframe.contentWindow); - document.body.appendChild(iframe); - }); - } - debugger; - window.onload = () => { - enablePrefs() - .then(createIframe) - .then(createPermissionTester) - .then((tester) => { - return tester - .checkUnsupportedPermissions() - .then(() => tester.setPermissions(UNKNOWN_ACTION)) - .then(() => tester.checkPermissions('prompt')) - .then(() => tester.setPermissions(PROMPT_ACTION)) - .then(() => tester.checkPermissions('prompt')) - .then(() => tester.setPermissions(ALLOW_ACTION)) - .then(() => tester.checkPermissions('granted')) - .then(() => tester.setPermissions(DENY_ACTION)) - .then(() => tester.checkPermissions('denied')) - .then(() => tester.testStatusOnChange()) - .then(() => tester.testInvalidQuery()) - .then(() => tester.revokeUnsupportedPermissions()) - .then(() => tester.revokePermissions()) - .then(() => tester.checkPermissions('prompt')) - .then(() => tester.testInvalidRevoke()); - }) - .then(SimpleTest.finish) - .catch((e) => { - ok(false, `Unexpected error ${e}`); - SimpleTest.finish(); - }); - }; - </script> -</body> - -</html> |