# HG changeset patch # User David Chan # Date 1364596106 25200 # Node ID 721396d5ab8208be12fa70e41dd0dfa61af6dc2b # Parent b0d84238095938e638497cd1b02bc7005f1abdfb Bug 815105 - WebAPI permissions tests diff --git a/dom/permission/tests/Makefile.in b/dom/permission/tests/Makefile.in --- a/dom/permission/tests/Makefile.in +++ b/dom/permission/tests/Makefile.in @@ -12,15 +12,73 @@ relativesrcdir = dom/permission/tests include $(DEPTH)/config/autoconf.mk XPCSHELL_TESTS = unit include $(topsrcdir)/config/rules.mk _TEST_FILES = \ test_permission_basics.html \ + test_alarms.html \ + test_camera.html \ + test_idle.html \ + test_permissions.html \ + test_power.html \ + test_settings.html \ + test_systemXHR.html \ + test_tcp-socket.html \ + test_webapps-manage.html \ + shim.html \ + framework.js \ $(NULL) + +# test_browser and test_embed-apps don't work on +# desktop since reallyIsBrowserOrApp and reallyIsApp +# don't appear to be working +ifdef MOZ_B2G +_TEST_FILES += \ + test_browser.html \ + test_embed-apps.html \ + test_keyboard.html \ + test_wifi-manage.html \ + $(NULL) +endif + +ifdef MOZ_B2G_RIL +_TEST_FILES += \ + test_cellbroadcast.html \ + test_mobileconnection.html \ + test_networkstats-manage.html \ + test_telephony.html \ + test_voicemail.html \ + $(NULL) +endif + +ifdef MOZ_B2G_FM +_TEST_FILES += \ + test_fmradio.html \ + $(NULL) +endif + +ifdef MOZ_B2G_BT +_TEST_FILES += \ + test_bluetooth.html \ + $(NULL) +endif + +ifdef MOZ_WEBSMS_BACKEND +_TEST_FILES += \ + test_sms.html \ + $(NULL) +endif + +ifdef MOZ_TIME_MANAGER +_TEST_FILES += \ + test_time.html \ + $(NULL) +endif + _CHROME_TEST_FILES = \ $(NULL) libs:: $(_TEST_FILES) $(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir) diff --git a/dom/permission/tests/framework.js b/dom/permission/tests/framework.js new file mode 100644 --- /dev/null +++ b/dom/permission/tests/framework.js @@ -0,0 +1,154 @@ +/** Test for Bug 815105 **/ + +function log(arg) { + dump(arg + "\n"); +} + +SimpleTest.waitForExplicitFinish(); +var expand = SpecialPowers.Cu.import("resource://gre/modules/PermissionsTable.jsm").expandPermissions; +const permTable = SpecialPowers.Cu.import("resource://gre/modules/PermissionsTable.jsm").PermissionsTable; +const UUIDSvc = SpecialPowers.Cc["@mozilla.org/uuid-generator;1"] + .getService(SpecialPowers.Ci.nsIUUIDGenerator) + +const TEST_DOMAIN = "http://example.org"; +const SHIM_PATH = "/tests/dom/permission/tests/shim.html" +var gContent = document.getElementById('content'); + +//var gData; defined in external files +var gRemainingTests; +var Thingies = {}; + +function TestThingy(aData) { + var self = this; + this.step = 0; + this.data = aData; + this.setupParent = false; + this.perms = expandPermissions(aData.perm); + this.uuid = UUIDSvc.generateUUID().toString(); + this.iframe = null; + + // keep a reference to this for eventhandler + Thingies[this.uuid] = this; + + this.createFrame = function() { + var iframe = document.createElement('iframe'); + iframe.setAttribute('id', 'testframe' + self.step + self.perms) + iframe.src = TEST_DOMAIN + SHIM_PATH; + iframe.addEventListener('load', function _iframeLoad() { + iframe.removeEventListener('load', _iframeLoad); + + // check permissions are correct + var allow = (self.step == 0 ? false : true) + self.perms.forEach(function (el) { + var res = SpecialPowers.hasPermission(el, iframe.contentDocument); + is(res, allow, (allow ? "Has " : "Doesn't have ") + el); + }); + + var msg = { + uuid: self.uuid, + step: self.step++, + testdata: self.data, + } + // start the tests + iframe.contentWindow.postMessage(msg, "*"); + }); + + self.iframe = iframe; + gContent.appendChild(iframe); } + + this.next = function () { + switch(self.step) { + case 0: + self.createFrame(); + break; + case 1: + // add permissions + addPermissions(self.perms, self.iframe.contentDocument, self.createFrame.bind(self)); + break; + case 2: + checkFinish(); + break; + default: + ok(false, "Should not be reached"); + break + } + } + + this.start = function() { + if (self.data.skip) { + ok(true, "Skipped " + self.data.perm); + checkFinish(); + } else { + // some permissions need parent to have permission as well + if (!self.setupParent && self.data.needParentPerm && + !SpecialPowers.isMainProcess()) { + self.setupParent = true; + addPermissions(self.perms, window.document, self.start.bind(self)); + } else if (self.data.settings && self.data.settings.length) { + SpecialPowers.pushPrefEnv({'set': self.data.settings.slice(0)}, + self.next.bind(self)); + } else { + self.next(); + } + } + } +} + +function addPermissions(aPerms, aDoc, aCallback) { + var permList = []; + aPerms.forEach(function (el) { + var obj = {'type': el, + 'allow': 1, + 'context': aDoc}; + permList.push(obj); + }); + SpecialPowers.pushPermissions(permList, aCallback); +} + +function expandPermissions(aPerms) { + var perms = []; + aPerms.forEach(function(el) { + var access = permTable[el].access ? "readwrite" : null; + var expanded = SpecialPowers.unwrap(expand(el, access)); + perms = perms.concat(expanded.slice(0)); + }); + + return perms; +} + +function msgHandler(evt) { + var data = evt.data; + ok(data.result, data.msg); + + var test = Thingies[data.uuid]; + if (test) { + test.next(); + } else { + ok(false, "Received unknown uuid " + data.uuid); + checkFinish(); + } +} + +function checkFinish() { + if (--gRemainingTests) { + gTestRunner.next(); + } else { + window.removeEventListener('message', msgHandler); + SimpleTest.finish(); + } +} + +function runTest() { + gRemainingTests = Object.keys(gData).length; + + for (var test in gData) { + var test = new TestThingy(gData[test]); + test.start(); + yield; + } +} + +var gTestRunner = runTest(); + +window.addEventListener('load', function() { gTestRunner.next(); }, false); +window.addEventListener('message', msgHandler, false); diff --git a/dom/permission/tests/shim.html b/dom/permission/tests/shim.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/shim.html @@ -0,0 +1,86 @@ + + + + + + + + diff --git a/dom/permission/tests/test_alarms.html b/dom/permission/tests/test_alarms.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_alarms.html @@ -0,0 +1,31 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_bluetooth.html b/dom/permission/tests/test_bluetooth.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_bluetooth.html @@ -0,0 +1,30 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_browser.html b/dom/permission/tests/test_browser.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_browser.html @@ -0,0 +1,55 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_camera.html b/dom/permission/tests/test_camera.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_camera.html @@ -0,0 +1,30 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_cellbroadcast.html b/dom/permission/tests/test_cellbroadcast.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_cellbroadcast.html @@ -0,0 +1,31 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_embed-apps.html b/dom/permission/tests/test_embed-apps.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_embed-apps.html @@ -0,0 +1,51 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_fmradio.html b/dom/permission/tests/test_fmradio.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_fmradio.html @@ -0,0 +1,30 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_idle.html b/dom/permission/tests/test_idle.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_idle.html @@ -0,0 +1,47 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_keyboard.html b/dom/permission/tests/test_keyboard.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_keyboard.html @@ -0,0 +1,30 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_mobileconnection.html b/dom/permission/tests/test_mobileconnection.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_mobileconnection.html @@ -0,0 +1,30 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_networkstats-manage.html b/dom/permission/tests/test_networkstats-manage.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_networkstats-manage.html @@ -0,0 +1,31 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_permissions.html b/dom/permission/tests/test_permissions.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_permissions.html @@ -0,0 +1,31 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_power.html b/dom/permission/tests/test_power.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_power.html @@ -0,0 +1,30 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_settings.html b/dom/permission/tests/test_settings.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_settings.html @@ -0,0 +1,36 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_sms.html b/dom/permission/tests/test_sms.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_sms.html @@ -0,0 +1,32 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_systemXHR.html b/dom/permission/tests/test_systemXHR.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_systemXHR.html @@ -0,0 +1,38 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_tcp-socket.html b/dom/permission/tests/test_tcp-socket.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_tcp-socket.html @@ -0,0 +1,50 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_telephony.html b/dom/permission/tests/test_telephony.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_telephony.html @@ -0,0 +1,32 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_time.html b/dom/permission/tests/test_time.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_time.html @@ -0,0 +1,30 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_voicemail.html b/dom/permission/tests/test_voicemail.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_voicemail.html @@ -0,0 +1,30 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_webapps-manage.html b/dom/permission/tests/test_webapps-manage.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_webapps-manage.html @@ -0,0 +1,43 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + + diff --git a/dom/permission/tests/test_wifi-manage.html b/dom/permission/tests/test_wifi-manage.html new file mode 100644 --- /dev/null +++ b/dom/permission/tests/test_wifi-manage.html @@ -0,0 +1,41 @@ + + + + + + Test for Bug 815105 + + + + +Mozilla Bug 815105 +

+ +
+
+
+
+ + +