summaryrefslogtreecommitdiff
path: root/data/extensions/jid1-KtlZuoiikVfFew@jetpack/node_modules/pathfinder/lib/content/permissions.js
diff options
context:
space:
mode:
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.js88
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
+}