| Index: LayoutTests/resources/permissions-helper.js
|
| diff --git a/LayoutTests/resources/permissions-helper.js b/LayoutTests/resources/permissions-helper.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6428d750c2b650ee9e55a7ae0ff36038c8f94684
|
| --- /dev/null
|
| +++ b/LayoutTests/resources/permissions-helper.js
|
| @@ -0,0 +1,50 @@
|
| +// This file provides a PermissionsHelper object which can be used by
|
| +// LayoutTests using testRunner to handle permissions. The methods in the object
|
| +// return promises so can be used to write idiomatic, race-free code.
|
| +//
|
| +// The current available methods are:
|
| +// - setPermission: given a permission name (known by testRunner) and a state,
|
| +// it will set the permission to the specified state and resolve the promise
|
| +// when done.
|
| +// Example:
|
| +// PermissionsHelper.setPermission('geolocation', 'prompt').then(runTest);
|
| +"use strict";
|
| +
|
| +var PermissionsHelper = (function() {
|
| + function nameToObject(permissionName) {
|
| + switch (permissionName) {
|
| + case "midi":
|
| + return {name: "midi"};
|
| + case "midi-sysex":
|
| + return {name: "midi", sysex: true};
|
| + case "push-messaging":
|
| + return {name: "push", userVisibleOnly: true};
|
| + case "notifications":
|
| + return {name: "notifications"};
|
| + case "geolocation":
|
| + return {name: "geolocation"};
|
| + default:
|
| + throw "Invalid permission name provided";
|
| + }
|
| + }
|
| +
|
| + return {
|
| + setPermission: function(name, state) {
|
| + return new Promise(function(resolver, reject) {
|
| + navigator.permissions.query(nameToObject(name)).then(function(result) {
|
| + if (result.state == state) {
|
| + resolver()
|
| + return;
|
| + }
|
| +
|
| + result.onchange = function() {
|
| + result.onchange = null;
|
| + resolver();
|
| + };
|
| +
|
| + testRunner.setPermission(name, state, location.origin, location.origin);
|
| + });
|
| + });
|
| + }
|
| + }
|
| +})();
|
|
|