diff options
author | Ruben Rodriguez <ruben@gnu.org> | 2015-11-28 15:24:36 -0600 |
---|---|---|
committer | Ruben Rodriguez <ruben@gnu.org> | 2015-11-28 16:27:06 -0600 |
commit | e4a3586a14996bbece3b26c9e3b7704ea6af8615 (patch) | |
tree | 499bdd16b3a90c30b01e4b47a5882d13b4800f50 /data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/content/permissions.js | |
parent | 4dbc2fae927bb02ef243c87938e638af9afee8fa (diff) |
LibreJS upgraded to 6.0.10
Diffstat (limited to 'data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/content/permissions.js')
-rw-r--r-- | data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/content/permissions.js | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/content/permissions.js b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/content/permissions.js new file mode 100644 index 0000000..49cc955 --- /dev/null +++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/content/permissions.js @@ -0,0 +1,88 @@ +/* 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/. */ +'use strict'; + +const { Cc, Ci, Cu } = require('chrome'); +const { List, addListItem } = require('sdk/util/list'); +const { URL } = require('sdk/url'); + +const { Services } = require('../chrome/services'); + +const { nsIPermissionManager } = Ci; + +const UNKNOWN = nsIPermissionManager.UNKNOWN_ACTION; // 0 +const ALLOW = nsIPermissionManager.ALLOW_ACTION; // 1 +const BLOCK = nsIPermissionManager.DENY_ACTION; // 2 +const SESSION = Ci.nsICookiePermission.ACCESS_SESSION; // 8 + +function getKey(obj, val) { + for (let key in obj) + if (obj[key] == val) + return key; + + return undefined; +} + +const PERMISSIONS = { + 'session': SESSION, + 'allow': ALLOW, + 'deny': BLOCK +}; + +const TYPES = { + 'images': 'image', + 'popups': 'popup', + 'desktop-notifications': 'desktop-notification', + 'installs': 'install', + 'location': 'geo', + 'fullscreen': 'fullscreen', + 'pointer-lock': 'pointerLock' +} + +const PM = Cc['@mozilla.org/permissionmanager;1']. + getService(nsIPermissionManager); + +function add(options) { + let uri = Services.io.newURI(options.url, null, null); + if (!/^https?/.test(uri.scheme)) { + throw new Error('invalid content url, only https or http schemes are accepted'); + } + + PM.add(uri, + TYPES[options.type], + PERMISSIONS[options.permission]); +} + +function remove(options) { + PM.remove(URL(options.url).host, TYPES[options.type]); +} + +function removeAll() { + PM.removeAll(); +} + +// TODO: cache entries after first request, and observe new additions with the "perm-changed" event + +exports.permissions = { + add: add, + remove: remove, + removeAll: removeAll, + get permissions() { + let list = List(); + let permissions = PM.enumerator; + while (permissions.hasMoreElements()) { + let permission = permissions.getNext().QueryInterface(Ci.nsIPermission); + + addListItem(list, { + type: getKey(TYPES, permission.type), + host: String(permission.host), + permission: getKey(PERMISSIONS, Number(permission.capability)) + //'expire-time': Number(permission.expireTime), + }); + } + return list; + }, + TYPES: TYPES, + PERMISSIONS: PERMISSIONS +} |