mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-28 03:17:31 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
206
dom/permission/tests/test_permissions_api.html
Normal file
206
dom/permission/tests/test_permissions_api.html
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
<!--
|
||||
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],
|
||||
],
|
||||
};
|
||||
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>
|
||||
Loading…
Add table
Add a link
Reference in a new issue