diff --git a/dom/push/test/frame.html b/dom/push/test/frame.html
index a37404c7a625..6ab58b76b8e7 100644
--- a/dom/push/test/frame.html
+++ b/dom/push/test/frame.html
@@ -5,7 +5,7 @@
-
@@ -26,10 +25,25 @@ http://creativecommons.org/licenses/publicdomain/
-
@@ -31,8 +30,15 @@ http://creativecommons.org/licenses/publicdomain/
var registration;
add_task(function* start() {
- yield setupPrefs();
- yield setPushPermission(false);
+ SpecialPowers.addPermission("desktop-notification", false, document);
+ yield new Promise(resolve => {
+ SpecialPowers.pushPrefEnv({"set": [
+ ["dom.push.enabled", true],
+ ["dom.serviceWorkers.exemptFromPerDomainMax", true],
+ ["dom.serviceWorkers.enabled", true],
+ ["dom.serviceWorkers.testing.enabled", true]
+ ]}, resolve);
+ });
var url = "worker.js" + "?" + Math.random();
registration = yield navigator.serviceWorker.register(url, {scope: "."});
@@ -69,7 +75,12 @@ http://creativecommons.org/licenses/publicdomain/
state: "prompt",
}];
for (var test of tests) {
- yield setPushPermission(test.action);
+ if (test.action == permissionManager.UNKNOWN_ACTION) {
+ SpecialPowers.removePermission("desktop-notification", document);
+ } else {
+ SpecialPowers.addPermission("desktop-notification",
+ test.action, document);
+ }
var state = yield registration.pushManager.permissionState();
is(state, test.state, JSON.stringify(test));
}
diff --git a/dom/push/test/test_register.html b/dom/push/test/test_register.html
index c1b685ac0a7d..62366239013e 100644
--- a/dom/push/test/test_register.html
+++ b/dom/push/test/test_register.html
@@ -10,8 +10,6 @@ http://creativecommons.org/licenses/publicdomain/
Test for Bug 1038811
-
-
@@ -29,53 +27,112 @@ http://creativecommons.org/licenses/publicdomain/
// console.log(str + "\n");
}
- var registration;
- add_task(function* start() {
- yield setupPrefs();
- yield setPushPermission(true);
-
- var url = "worker.js" + "?" + (Math.random());
- registration = yield navigator.serviceWorker.register(url, {scope: "."});
- });
-
var controlledFrame;
- add_task(function* createControlledIFrame() {
- controlledFrame = yield injectControlledFrame();
- });
+ function createControlledIFrame(swr) {
+ var p = new Promise(function(res, rej) {
+ var iframe = document.createElement('iframe');
+ iframe.id = "controlledFrame";
+ iframe.src = "http://mochi.test:8888/tests/dom/push/test/frame.html";
- add_task(function* checkPermissionState() {
- var state = yield registration.pushManager.permissionState();
- is(state, "granted", "permissionState() should resolve to granted.");
- });
+ iframe.onload = function() {
+ res(swr)
+ }
+ controlledFrame = iframe;
+ document.body.appendChild(iframe);
+ });
+ return p;
+ }
- var pushSubscription;
- add_task(function* setupPushNotification() {
- pushSubscription = yield registration.pushManager.subscribe();
- });
+ function checkPermissionState(swr) {
+ return swr.pushManager.permissionState().then(function(state) {
+ ok(state === "granted", "permissionState() should resolve to granted.");
+ return swr;
+ }).catch(function(e) {
+ ok(false, "permissionState() should resolve to granted.");
+ return swr;
+ });
+ }
- add_task(function* waitForPushNotification() {
- yield Promise.all([
- controlledFrame.waitOnPushMessage(),
- fetch("http://mochi.test:8888/tests/dom/push/test/push-server.sjs", {
- method: "PUT",
- headers: {
- "X-Push-Method": "POST",
- "X-Push-Server": pushSubscription.endpoint,
- },
- }),
- ]);
- });
+ function sendPushToPushServer(pushEndpoint) {
+ // Work around CORS for now.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', "http://mochi.test:8888/tests/dom/push/test/push-server.sjs", true);
+ xhr.setRequestHeader("X-Push-Method", "PUT");
+ xhr.setRequestHeader("X-Push-Server", pushEndpoint);
+ xhr.onload = function(e) {
+ debug("xhr : " + this.status);
+ }
+ xhr.onerror = function(e) {
+ debug("xhr error: " + e);
+ }
+ xhr.send("version=24601");
+ }
- add_task(function* unsubscribe() {
- controlledFrame.remove();
- yield pushSubscription.unsubscribe();
- });
+ var registration;
- add_task(function* unregister() {
- var result = yield registration.unregister();
- ok(result, "Unregister should return true.");
- });
+ function start() {
+ return navigator.serviceWorker.register("worker.js" + "?" + (Math.random()), {scope: "."})
+ .then((swr) => registration = swr);
+ }
+ function unregister() {
+ return registration.unregister().then(function(result) {
+ ok(result, "Unregister should return true.");
+ }, function(e) {
+ dump("Unregistering the SW failed with " + e + "\n");
+ });
+ }
+
+ function setupPushNotification(swr) {
+ var p = new Promise(function(res, rej) {
+ swr.pushManager.subscribe().then(
+ function(pushSubscription) {
+ ok(true, "successful registered for push notification");
+ res(pushSubscription);
+ }, function(error) {
+ ok(false, "could not register for push notification");
+ res(null);
+ }
+ );
+ });
+ return p;
+ }
+
+ function unregisterPushNotification(pushSubscription) {
+ controlledFrame.parentNode.removeChild(controlledFrame);
+ controlledFrame = null;
+ return pushSubscription.unsubscribe();
+ }
+
+ function waitForPushNotification(pushSubscription) {
+ var p = controlledFrame.contentWindow.waitOnPushMessage();
+ sendPushToPushServer(pushSubscription.endpoint);
+ return p.then(function() {
+ return pushSubscription;
+ });
+ }
+
+ function runTest() {
+ start()
+ .then(createControlledIFrame)
+ .then(checkPermissionState)
+ .then(setupPushNotification)
+ .then(waitForPushNotification)
+ .then(unregisterPushNotification)
+ .then(unregister)
+ .catch(function(e) {
+ ok(false, "Some test failed with error " + e);
+ }).then(SimpleTest.finish);
+ }
+
+ SpecialPowers.pushPrefEnv({"set": [
+ ["dom.push.enabled", true],
+ ["dom.serviceWorkers.exemptFromPerDomainMax", true],
+ ["dom.serviceWorkers.enabled", true],
+ ["dom.serviceWorkers.testing.enabled", true]
+ ]}, runTest);
+ SpecialPowers.addPermission("desktop-notification", true, document);
+ SimpleTest.waitForExplicitFinish();