зеркало из https://github.com/mozilla/gecko-dev.git
111 строки
3.4 KiB
JavaScript
111 строки
3.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/*
|
|
* Utility module for tests to access the PermissionManager
|
|
* with uri or origin string parameters.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
|
|
|
let pm = Services.perms;
|
|
|
|
let secMan = Services.scriptSecurityManager;
|
|
|
|
const EXPORTED_SYMBOLS = ["PermissionTestUtils"];
|
|
|
|
/**
|
|
* Convert origin string or uri to principal.
|
|
* If passed an nsIPrincipal it will be returned without conversion.
|
|
* @param {Ci.nsIPrincipal|Ci.nsIURI|string} subject - Subject to convert to principal
|
|
* @returns {Ci.nsIPrincipal} Principal created from subject
|
|
*/
|
|
function convertToPrincipal(subject) {
|
|
if (subject instanceof Ci.nsIPrincipal) {
|
|
return subject;
|
|
}
|
|
if (typeof subject === "string") {
|
|
return secMan.createContentPrincipalFromOrigin(subject);
|
|
}
|
|
if (subject === null || subject instanceof Ci.nsIURI) {
|
|
return secMan.createContentPrincipal(subject, {});
|
|
}
|
|
throw new Error(
|
|
"subject parameter must be an nsIURI an origin string or a principal."
|
|
);
|
|
}
|
|
|
|
let PermissionTestUtils = {
|
|
/**
|
|
* Add permission information for a given subject.
|
|
* Subject can be a principal, uri or origin string.
|
|
* @see nsIPermissionManager for documentation
|
|
*
|
|
* @param {Ci.nsIPrincipal|Ci.nsIURI|string} subject
|
|
* @param {*} args
|
|
*/
|
|
add(subject, ...args) {
|
|
return pm.addFromPrincipal(convertToPrincipal(subject), ...args);
|
|
},
|
|
/**
|
|
* Get all custom permissions for a given subject.
|
|
* Subject can be a principal, uri or origin string.
|
|
* @see nsIPermissionManager for documentation
|
|
*
|
|
* @param {Ci.nsIPrincipal|Ci.nsIURI|string} subject
|
|
* @param {*} args
|
|
*/
|
|
getAll(subject, ...args) {
|
|
return pm.getAllForPrincipal(convertToPrincipal(subject), ...args);
|
|
},
|
|
/**
|
|
* Remove permission information for a given subject and permission type
|
|
* Subject can be a principal, uri or origin string.
|
|
* @see nsIPermissionManager for documentation
|
|
*
|
|
* @param {Ci.nsIPrincipal|Ci.nsIURI|string} subject
|
|
* @param {*} args
|
|
*/
|
|
remove(subject, ...args) {
|
|
return pm.removeFromPrincipal(convertToPrincipal(subject), ...args);
|
|
},
|
|
/**
|
|
* Test whether a website has permission to perform the given action.
|
|
* Subject can be a principal, uri or origin string.
|
|
* @see nsIPermissionManager for documentation
|
|
*
|
|
* @param {Ci.nsIPrincipal|Ci.nsIURI|string} subject
|
|
* @param {*} args
|
|
*/
|
|
testPermission(subject, ...args) {
|
|
return pm.testPermissionFromPrincipal(convertToPrincipal(subject), ...args);
|
|
},
|
|
/**
|
|
* Test whether a website has permission to perform the given action.
|
|
* Subject can be a principal, uri or origin string.
|
|
* @see nsIPermissionManager for documentation
|
|
*
|
|
* @param {Ci.nsIPrincipal|Ci.nsIURI|string} subject
|
|
* @param {*} args
|
|
*/
|
|
testExactPermission(subject, ...args) {
|
|
return pm.testExactPermissionFromPrincipal(
|
|
convertToPrincipal(subject),
|
|
...args
|
|
);
|
|
},
|
|
/**
|
|
* Get the permission object associated with the given subject and action.
|
|
* Subject can be a principal, uri or origin string.
|
|
* @see nsIPermissionManager for documentation
|
|
*
|
|
* @param {Ci.nsIPrincipal|Ci.nsIURI|string} subject
|
|
* @param {*} args
|
|
*/
|
|
getPermissionObject(subject, type, exactHost = false) {
|
|
return pm.getPermissionObject(convertToPrincipal(subject), type, exactHost);
|
|
},
|
|
};
|