Bug 1159641, Part 2 - Use tasks in the Push permissions test. r=mt a=ritu
authorKit Cambridge <kcambridge@mozilla.com>
Fri, 30 Oct 2015 11:48:56 -0700
changeset 305719 3b528ca2a11a3cbb49046a2a84969791be638dff
parent 305718 6dae0b0bdb8c50b4bae3e814db1239b0eea23001
child 305720 3f7cc875e92e16af8b707509125132294ad1e04f
push id1001
push userraliiev@mozilla.com
push dateMon, 18 Jan 2016 19:06:03 +0000
treeherdermozilla-release@8b89261f3ac4 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmt, ritu
bugs1159641
milestone44.0a2
Bug 1159641, Part 2 - Use tasks in the Push permissions test. r=mt a=ritu
dom/push/test/test_permissions.html
--- a/dom/push/test/test_permissions.html
+++ b/dom/push/test/test_permissions.html
@@ -5,16 +5,17 @@ Bug 1038811: Push tests.
 
 Any copyright is dedicated to the Public Domain.
 http://creativecommons.org/licenses/publicdomain/
 
 -->
 <head>
   <title>Test for Bug 1038811</title>
   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
   <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
 </head>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1038811">Mozilla Bug 1038811</a>
 <p id="display"></p>
 <div id="content" style="display: none">
 
 </div>
@@ -22,104 +23,73 @@ http://creativecommons.org/licenses/publ
 </pre>
 
 <script class="testbody" type="text/javascript">
 
   function debug(str) {
   //  console.log(str + "\n");
   }
 
-  function start() {
-    return navigator.serviceWorker.register("worker.js" + "?" + (Math.random()), {scope: "."})
-    .then((swr) => registration = swr);
-  }
+  var registration;
+  add_task(function* start() {
+    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);
+    });
 
-  function unregister() {
-    return registration.unregister().then(function(result) {
-      ok(result, "Unregister should return true.");
-    }, function(e) {
-      dump("Unregistering the SW failed with " + e + "\n");
-    });
-  }
+    var url = "worker.js" + "?" + Math.random();
+    registration = yield navigator.serviceWorker.register(url, {scope: "."});
+  });
 
-  function setupPushNotification(swr) {
-    var p = new Promise(function(res, rej) {
-      swr.pushManager.subscribe().then(
-        function(pushSubscription) {
-          ok(false, "subscribe() should fail because no permission for push");
-          res(swr);
-        }, function(error) {
-          ok(true, "subscribe() could not register for push notification");
-          res(swr);
-        }
-        );
-    });
-    return p;
-  }
+  add_task(function* setupPushNotification() {
+    try {
+      yield registration.pushManager.subscribe();
+      ok(false, "subscribe() should fail because no permission for push");
+    } catch (error) {
+      ok(true, "subscribe() could not register for push notification");
+    }
+  });
 
-  function getEndpoint(swr) {
-    var p = new Promise(function(res, rej) {
-      swr.pushManager.getSubscription().then(
-        function(pushSubscription) {
-          is(pushSubscription, null, "getSubscription() should return null because no permission for push");
-          res(swr);
-        }, function(error) {
-          ok(false, "getSubscription() could not register for push notification");
-          res(swr);
-        }
-        );
-    });
-    return p;
-  }
+  add_task(function* getEndpoint() {
+    var pushSubscription = yield registration.pushManager.getSubscription();
+    is(pushSubscription, null, "getSubscription() should return null because no permission for push");
+  });
 
-  function checkPermissionState(swr) {
+  add_task(function* checkPermissionState() {
     var permissionManager = SpecialPowers.Ci.nsIPermissionManager;
     var tests = [{
       action: permissionManager.ALLOW_ACTION,
       state: "granted",
     }, {
       action: permissionManager.DENY_ACTION,
       state: "denied",
     }, {
       action: permissionManager.PROMPT_ACTION,
       state: "prompt",
     }, {
       action: permissionManager.UNKNOWN_ACTION,
       state: "prompt",
     }];
-    return tests.reduce((promise, test) => {
-      return promise.then(function() {
-        if (test.action == permissionManager.UNKNOWN_ACTION) {
-          SpecialPowers.removePermission("desktop-notification", document);
-        } else {
-          SpecialPowers.addPermission("desktop-notification",
-            test.action, document);
-        }
-        return swr.pushManager.permissionState().then(state => {
-          is(state, test.state, JSON.stringify(test));
-        });
-      });
-    }, Promise.resolve());
-  }
+    for (var test of tests) {
+      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));
+    }
+  });
 
-  function runTest() {
-    start()
-    .then(setupPushNotification)
-    .then(getEndpoint)
-    .then(checkPermissionState)
-    .then(unregister)
-    .catch(function(e) {
-      ok(false, "Some test failed with error " + e);
-    }).then(SimpleTest.finish);
-  }
-
-  SpecialPowers.addPermission("desktop-notification", false, document);
-  SpecialPowers.pushPrefEnv({"set": [
-    ["dom.push.enabled", true],
-    ["dom.serviceWorkers.exemptFromPerDomainMax", true],
-    ["dom.serviceWorkers.enabled", true],
-    ["dom.serviceWorkers.testing.enabled", true]
-    ]}, runTest);
-  SimpleTest.waitForExplicitFinish();
+  add_task(function* unregister() {
+    var result = yield registration.unregister();
+    ok(result, "Unregister should return true.");
+  });
 
 </script>
 </body>
 </html>