Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 <!DOCTYPE HTML>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=816847
5 -->
6 <head>
7 <title>Test for Bug 816847</title>
8 <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
9 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
11 </head>
12 <body onload="starttest();">
13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=816847">Mozilla Bug 816847</a>
14 <p id="display"></p>
15 <div id="content" style="display: none">
17 </div>
18 <pre id="test">
19 <script class="testbody" type="text/javascript">
20 /** Test for Bug 816847 **/
21 SimpleTest.waitForExplicitFinish();
23 const Cc = SpecialPowers.Cc;
24 const Ci = SpecialPowers.Ci;
25 const Cu = SpecialPowers.Cu;
27 const Services = Cu.import("resource://gre/modules/Services.jsm").Services;
28 const appsSvc = Cc["@mozilla.org/AppsService;1"]
29 .getService(Ci.nsIAppsService)
31 const manifest = "https://example.com/manifest.webapp";
32 const allow = Ci.nsIPermissionManager.ALLOW_ACTION;
33 const unknown = Ci.nsIPermissionManager.UNKNOWN_ACTION;
34 const perms = ['network-events', 'geolocation', 'camera', 'alarms']
36 function createPrincipal(aURI, aIsApp, aIsInBrowserElement) {
37 if(aIsApp) {
38 var app = appsSvc.getAppByManifestURL(aURI);
39 var localId = appsSvc.getAppLocalIdByManifestURL(aURI);
40 var uri = Services.io.newURI(app.origin, null, null);
41 return Services.scriptSecurityManager
42 .getAppCodebasePrincipal(uri,
43 localId,
44 aIsInBrowserElement);
45 }
47 var uri = Services.io.newURI(aURI, null, null);
48 return Services.scriptSecurityManager
49 .getNoAppCodebasePrincipal(uri);
50 }
52 // test addPermission and removePermission
53 function starttest(){
54 var app = appsSvc.getAppByManifestURL(manifest);
55 ok(app != null, "Got an app ");
57 var origin = app.origin
58 var nodePrincipal = SpecialPowers.wrap(document).nodePrincipal;
59 var appPrincipal = createPrincipal(manifest, true);
60 var noappPrincipal = createPrincipal(origin, false);
62 SpecialPowers.addPermission(perms[0], true, origin);
63 SpecialPowers.addPermission(perms[1], true, {manifestURL: manifest});
64 SpecialPowers.addPermission(perms[2], true, document);
65 SpecialPowers.addPermission(perms[3], true, {url: origin,
66 appId: Ci.nsIScriptSecurityManager.NO_APP_ID});
68 is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[0]),
69 allow, "Set permission by string");
70 is(Services.perms.testPermissionFromPrincipal(appPrincipal, perms[1]),
71 allow, "Set permission by manifestURL");
72 is(Services.perms.testPermissionFromPrincipal(nodePrincipal, perms[2]),
73 allow, "Set permission by principal");
74 is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[3]),
75 allow, "Set permission by other");
76 is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[1]),
77 unknown, "Check that app permission doesn't leak to normal page");
79 SpecialPowers.removePermission(perms[0], origin);
80 SpecialPowers.removePermission(perms[1], {manifestURL: manifest});
81 SpecialPowers.removePermission(perms[2], document);
82 SpecialPowers.removePermission(perms[3], {url: origin,
83 appId: Ci.nsIScriptSecurityManager.NO_APP_ID});
85 is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[0]),
86 unknown, "Removed permission by string");
87 is(Services.perms.testPermissionFromPrincipal(appPrincipal, perms[1]),
88 unknown, "Removed permission by manifestURL");
89 is(Services.perms.testPermissionFromPrincipal(nodePrincipal, perms[2]),
90 unknown, "Removed permission by principal");
91 is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[3]),
92 unknown, "Removed permission by other");
94 SimpleTest.finish();
95 }
97 </script>
98 </pre>
99 </body>
100 </html>