dom/tests/browser/browser_webapps_permissions.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:a1fe2d9ce133
1 /* vim:set ts=2 sw=2 sts=2 et: */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 const DEBUG = 0;
7 function log()
8 {
9 if (DEBUG) {
10 let output = [];
11 for (let prop in arguments) {
12 output.push(arguments[prop]);
13 }
14 dump("-*- browser_webapps_permissions test: " + output.join(" ") + "\n");
15 }
16 }
17
18 let scope = {};
19 Cu.import("resource://gre/modules/PermissionSettings.jsm", scope);
20
21 var windowMediator = Cc["@mozilla.org/appshell/window-mediator;1"]
22 .getService(Ci.nsIWindowMediator);
23
24 const TEST_URL =
25 "http://mochi.test:8888/browser/dom/tests/browser/test-webapps-permissions.html";
26 const TEST_MANIFEST_URL =
27 "http://mochi.test:8888/browser/dom/tests/browser/test-webapp.webapp";
28 const TEST_ORIGIN_URL = "http://mochi.test:8888";
29
30 const installedPermsToTest = {
31 "storage": "unknown",
32 "geolocation": "prompt",
33 "alarms": "allow",
34 "desktop-notification": "allow",
35 "audio-channel-normal": "allow"
36 };
37
38 const uninstalledPermsToTest = {
39 "geolocation": "unknown",
40 "alarms": "unknown",
41 "desktop-notification": "unknown",
42 "audio-channel-normal": "unknown"
43 };
44
45 var permManager = Cc["@mozilla.org/permissionmanager;1"]
46 .getService(Ci.nsIPermissionManager);
47 permManager.addFromPrincipal(window.document.nodePrincipal,
48 "webapps-manage",
49 Ci.nsIPermissionManager.ALLOW_ACTION);
50
51 var gWindow, gNavigator;
52
53 function test() {
54 waitForExplicitFinish();
55
56 var tab = gBrowser.addTab(TEST_URL);
57 gBrowser.selectedTab = tab;
58 var browser = gBrowser.selectedBrowser;
59 PopupNotifications.panel.addEventListener("popupshown", handlePopup, false);
60
61 registerCleanupFunction(function () {
62 gWindow = null;
63 gBrowser.removeTab(tab);
64
65 // The installation may have created a XUL alert window
66 // (see notifyInstallSuccess in WebappManager.jsm).
67 // It need to be closed before the test finishes.
68 var browsers = windowMediator.getEnumerator('alert:alert');
69 while (browsers.hasMoreElements()) {
70 browsers.getNext().close();
71 }
72 });
73
74 browser.addEventListener("DOMContentLoaded", function onLoad(event) {
75 browser.removeEventListener("DOMContentLoaded", onLoad, false);
76 gWindow = browser.contentWindow;
77
78 SpecialPowers.setBoolPref("dom.mozPermissionSettings.enabled", true);
79 SpecialPowers.addPermission("permissions", true, browser.contentWindow.document);
80 SpecialPowers.addPermission("permissions", true, browser.contentDocument);
81 SpecialPowers.addPermission("webapps-manage", true, browser.contentWindow.document);
82
83 executeSoon(function (){
84 gWindow.focus();
85 var nav = XPCNativeWrapper.unwrap(browser.contentWindow.navigator);
86 ok(nav.mozApps, "we have a mozApps property");
87 var navMozPerms = nav.mozPermissionSettings;
88 ok(navMozPerms, "mozPermissions is available");
89
90 // INSTALL app
91 var pendingInstall = nav.mozApps.install(TEST_MANIFEST_URL, null);
92 pendingInstall.onsuccess = function onsuccess()
93 {
94 ok(this.result, "we have a result: " + this.result);
95
96 function testPerm(aPerm, aAccess)
97 {
98 var res =
99 navMozPerms.get(aPerm, TEST_MANIFEST_URL, TEST_ORIGIN_URL, false);
100 is(res, aAccess, "install: " + aPerm + " is " + res);
101 }
102
103 for (let permName in installedPermsToTest) {
104 testPerm(permName, installedPermsToTest[permName]);
105 }
106
107 // uninstall checks
108 uninstallApp();
109 };
110
111 pendingInstall.onerror = function onerror(e)
112 {
113 ok(false, "install()'s onerror was called: " + e);
114 ok(false, "All permission checks failed, uninstal tests were not run");
115 };
116 });
117 }, false);
118 }
119
120 function uninstallApp()
121 {
122 var browser = gBrowser.selectedBrowser;
123 var nav = XPCNativeWrapper.unwrap(browser.contentWindow.navigator);
124 var navMozPerms = nav.mozPermissionSettings;
125
126 var pending = nav.mozApps.getInstalled();
127 pending.onsuccess = function onsuccess() {
128 var m = this.result;
129 for (var i = 0; i < m.length; i++) {
130 var app = m[i];
131
132 function uninstall() {
133 var pendingUninstall = nav.mozApps.mgmt.uninstall(app);
134
135 pendingUninstall.onsuccess = function(r) {
136 // test to make sure all permissions have been removed
137 function testPerm(aPerm, aAccess)
138 {
139 var res =
140 navMozPerms.get(aPerm, TEST_MANIFEST_URL, TEST_ORIGIN_URL, false);
141 is(res, aAccess, "uninstall: " + aPerm + " is " + res);
142 }
143
144 for (let permName in uninstalledPermsToTest) {
145 testPerm(permName, uninstalledPermsToTest[permName]);
146 }
147
148 finish();
149 };
150
151 pending.onerror = function _onerror(e) {
152 ok(false, e);
153 ok(false, "All uninstall() permission checks failed!");
154
155 finish();
156 };
157 };
158 uninstall();
159 }
160 };
161 }
162
163 function handlePopup(aEvent)
164 {
165 aEvent.target.removeEventListener("popupshown", handlePopup, false);
166 SpecialPowers.wrap(this).childNodes[0].button.doCommand();
167 }

mercurial