1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
"use strict";
Components.utils.import("resource:///modules/SitePermissions.jsm");
Components.utils.import("resource://gre/modules/Services.jsm");
add_task(function* testPermissionsListing() {
Assert.deepEqual(SitePermissions.listPermissions().sort(),
["camera", "cookie", "desktop-notification", "geo", "image",
"indexedDB", "install", "microphone", "popup", "screen"],
"Correct list of all permissions");
});
add_task(function* testGetAllByURI() {
// check that it returns an empty array on an invalid URI
// like a file URI, which doesn't support site permissions
let wrongURI = Services.io.newURI("file:///example.js", null, null)
Assert.deepEqual(SitePermissions.getAllByURI(wrongURI), []);
let uri = Services.io.newURI("https://example.com", null, null)
Assert.deepEqual(SitePermissions.getAllByURI(uri), []);
SitePermissions.set(uri, "camera", SitePermissions.ALLOW);
Assert.deepEqual(SitePermissions.getAllByURI(uri), [
{ id: "camera", state: SitePermissions.ALLOW }
]);
SitePermissions.set(uri, "microphone", SitePermissions.SESSION);
SitePermissions.set(uri, "desktop-notification", SitePermissions.BLOCK);
Assert.deepEqual(SitePermissions.getAllByURI(uri), [
{ id: "camera", state: SitePermissions.ALLOW },
{ id: "microphone", state: SitePermissions.SESSION },
{ id: "desktop-notification", state: SitePermissions.BLOCK }
]);
SitePermissions.remove(uri, "microphone");
Assert.deepEqual(SitePermissions.getAllByURI(uri), [
{ id: "camera", state: SitePermissions.ALLOW },
{ id: "desktop-notification", state: SitePermissions.BLOCK }
]);
SitePermissions.remove(uri, "camera");
SitePermissions.remove(uri, "desktop-notification");
Assert.deepEqual(SitePermissions.getAllByURI(uri), []);
// XXX Bug 1303108 - Control Center should only show non-default permissions
SitePermissions.set(uri, "addon", SitePermissions.BLOCK);
Assert.deepEqual(SitePermissions.getAllByURI(uri), []);
SitePermissions.remove(uri, "addon");
});
add_task(function* testGetPermissionDetailsByURI() {
// check that it returns an empty array on an invalid URI
// like a file URI, which doesn't support site permissions
let wrongURI = Services.io.newURI("file:///example.js", null, null)
Assert.deepEqual(SitePermissions.getPermissionDetailsByURI(wrongURI), []);
let uri = Services.io.newURI("https://example.com", null, null)
SitePermissions.set(uri, "camera", SitePermissions.ALLOW);
SitePermissions.set(uri, "cookie", SitePermissions.SESSION);
SitePermissions.set(uri, "popup", SitePermissions.BLOCK);
let permissions = SitePermissions.getPermissionDetailsByURI(uri);
let camera = permissions.find(({id}) => id === "camera");
Assert.deepEqual(camera, {
id: "camera",
label: "Use the Camera",
state: SitePermissions.ALLOW,
availableStates: [
{ id: SitePermissions.UNKNOWN, label: "Always Ask" },
{ id: SitePermissions.ALLOW, label: "Allow" },
{ id: SitePermissions.BLOCK, label: "Block" },
]
});
// check that removed permissions (State.UNKNOWN) are skipped
SitePermissions.remove(uri, "camera");
permissions = SitePermissions.getPermissionDetailsByURI(uri);
camera = permissions.find(({id}) => id === "camera");
Assert.equal(camera, undefined);
// check that different available state values are represented
let cookie = permissions.find(({id}) => id === "cookie");
Assert.deepEqual(cookie, {
id: "cookie",
label: "Set Cookies",
state: SitePermissions.SESSION,
availableStates: [
{ id: SitePermissions.ALLOW, label: "Allow" },
{ id: SitePermissions.SESSION, label: "Allow for Session" },
{ id: SitePermissions.BLOCK, label: "Block" },
]
});
let popup = permissions.find(({id}) => id === "popup");
Assert.deepEqual(popup, {
id: "popup",
label: "Open Pop-up Windows",
state: SitePermissions.BLOCK,
availableStates: [
{ id: SitePermissions.ALLOW, label: "Allow" },
{ id: SitePermissions.BLOCK, label: "Block" },
]
});
SitePermissions.remove(uri, "cookie");
SitePermissions.remove(uri, "popup");
});
|