1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/testing/mochitest/tests/Harness_sanity/test_bug816847.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,101 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=816847 1.8 +--> 1.9 +<head> 1.10 + <title>Test for Bug 816847</title> 1.11 + <script type="text/javascript" src="/MochiKit/MochiKit.js"></script> 1.12 + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.13 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 1.14 +</head> 1.15 +<body onload="starttest();"> 1.16 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=816847">Mozilla Bug 816847</a> 1.17 +<p id="display"></p> 1.18 +<div id="content" style="display: none"> 1.19 + 1.20 +</div> 1.21 +<pre id="test"> 1.22 +<script class="testbody" type="text/javascript"> 1.23 +/** Test for Bug 816847 **/ 1.24 +SimpleTest.waitForExplicitFinish(); 1.25 + 1.26 +const Cc = SpecialPowers.Cc; 1.27 +const Ci = SpecialPowers.Ci; 1.28 +const Cu = SpecialPowers.Cu; 1.29 + 1.30 +const Services = Cu.import("resource://gre/modules/Services.jsm").Services; 1.31 +const appsSvc = Cc["@mozilla.org/AppsService;1"] 1.32 + .getService(Ci.nsIAppsService) 1.33 + 1.34 +const manifest = "https://example.com/manifest.webapp"; 1.35 +const allow = Ci.nsIPermissionManager.ALLOW_ACTION; 1.36 +const unknown = Ci.nsIPermissionManager.UNKNOWN_ACTION; 1.37 +const perms = ['network-events', 'geolocation', 'camera', 'alarms'] 1.38 + 1.39 +function createPrincipal(aURI, aIsApp, aIsInBrowserElement) { 1.40 + if(aIsApp) { 1.41 + var app = appsSvc.getAppByManifestURL(aURI); 1.42 + var localId = appsSvc.getAppLocalIdByManifestURL(aURI); 1.43 + var uri = Services.io.newURI(app.origin, null, null); 1.44 + return Services.scriptSecurityManager 1.45 + .getAppCodebasePrincipal(uri, 1.46 + localId, 1.47 + aIsInBrowserElement); 1.48 + } 1.49 + 1.50 + var uri = Services.io.newURI(aURI, null, null); 1.51 + return Services.scriptSecurityManager 1.52 + .getNoAppCodebasePrincipal(uri); 1.53 +} 1.54 + 1.55 +// test addPermission and removePermission 1.56 +function starttest(){ 1.57 + var app = appsSvc.getAppByManifestURL(manifest); 1.58 + ok(app != null, "Got an app "); 1.59 + 1.60 + var origin = app.origin 1.61 + var nodePrincipal = SpecialPowers.wrap(document).nodePrincipal; 1.62 + var appPrincipal = createPrincipal(manifest, true); 1.63 + var noappPrincipal = createPrincipal(origin, false); 1.64 + 1.65 + SpecialPowers.addPermission(perms[0], true, origin); 1.66 + SpecialPowers.addPermission(perms[1], true, {manifestURL: manifest}); 1.67 + SpecialPowers.addPermission(perms[2], true, document); 1.68 + SpecialPowers.addPermission(perms[3], true, {url: origin, 1.69 + appId: Ci.nsIScriptSecurityManager.NO_APP_ID}); 1.70 + 1.71 + is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[0]), 1.72 + allow, "Set permission by string"); 1.73 + is(Services.perms.testPermissionFromPrincipal(appPrincipal, perms[1]), 1.74 + allow, "Set permission by manifestURL"); 1.75 + is(Services.perms.testPermissionFromPrincipal(nodePrincipal, perms[2]), 1.76 + allow, "Set permission by principal"); 1.77 + is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[3]), 1.78 + allow, "Set permission by other"); 1.79 + is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[1]), 1.80 + unknown, "Check that app permission doesn't leak to normal page"); 1.81 + 1.82 + SpecialPowers.removePermission(perms[0], origin); 1.83 + SpecialPowers.removePermission(perms[1], {manifestURL: manifest}); 1.84 + SpecialPowers.removePermission(perms[2], document); 1.85 + SpecialPowers.removePermission(perms[3], {url: origin, 1.86 + appId: Ci.nsIScriptSecurityManager.NO_APP_ID}); 1.87 + 1.88 + is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[0]), 1.89 + unknown, "Removed permission by string"); 1.90 + is(Services.perms.testPermissionFromPrincipal(appPrincipal, perms[1]), 1.91 + unknown, "Removed permission by manifestURL"); 1.92 + is(Services.perms.testPermissionFromPrincipal(nodePrincipal, perms[2]), 1.93 + unknown, "Removed permission by principal"); 1.94 + is(Services.perms.testPermissionFromPrincipal(noappPrincipal, perms[3]), 1.95 + unknown, "Removed permission by other"); 1.96 + 1.97 + SimpleTest.finish(); 1.98 +} 1.99 + 1.100 +</script> 1.101 +</pre> 1.102 +</body> 1.103 +</html> 1.104 +