Bug 1172884 P2 Add test for synthesizing a redirect to a compressed resource. r=ehsan
☠☠ backed out by 91a848ffec69 ☠ ☠
authorBen Kelly <ben@wanderview.com>
Thu, 11 Jun 2015 18:29:28 -0700
changeset 279318 1434730c0e1989f3028e11cae5056f9bad3860df
parent 279317 17d6ecf1b4ec0ad968271cbba2def8900ff009e1
child 279319 7b23ff6ac3a2d7e3efe17a27d0263fc3ab9f2a9f
push id4932
push userjlund@mozilla.com
push dateMon, 10 Aug 2015 18:23:06 +0000
treeherdermozilla-beta@6dd5a4f5f745 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersehsan
bugs1172884
milestone41.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1172884 P2 Add test for synthesizing a redirect to a compressed resource. r=ehsan
dom/workers/test/serviceworkers/gzip_redirect_worker.js
dom/workers/test/serviceworkers/mochitest.ini
dom/workers/test/serviceworkers/sw_clients/navigator.html
dom/workers/test/serviceworkers/test_gzip_redirect.html
new file mode 100644
--- /dev/null
+++ b/dom/workers/test/serviceworkers/gzip_redirect_worker.js
@@ -0,0 +1,13 @@
+self.addEventListener('fetch', function (event) {
+  if (!event.request.url.endsWith('sw_clients/does_not_exist.html')) {
+    return;
+  }
+
+  event.respondWith(new Response('', {
+    status: 301,
+    statusText: 'Moved Permanently',
+    headers: {
+      'Location': 'refresher_compressed.html'
+    }
+  }));
+});
--- a/dom/workers/test/serviceworkers/mochitest.ini
+++ b/dom/workers/test/serviceworkers/mochitest.ini
@@ -129,16 +129,18 @@ support-files =
   strict_mode_error.js
   skip_waiting_installed_worker.js
   skip_waiting_scope/index.html
   thirdparty/iframe1.html
   thirdparty/iframe2.html
   thirdparty/register.html
   thirdparty/unregister.html
   thirdparty/sw.js
+  gzip_redirect_worker.js
+  sw_clients/navigator.html
 
 [test_unregister.html]
 [test_installation_simple.html]
 [test_fetch_event.html]
 [test_https_fetch.html]
 [test_https_fetch_cloned_response.html]
 [test_https_synth_fetch_from_cached_sw.html]
 [test_match_all.html]
@@ -179,9 +181,10 @@ support-files =
 [test_strict_mode_error.html]
 [test_cross_origin_url_after_redirect.html]
 [test_origin_after_redirect.html]
 [test_origin_after_redirect_cached.html]
 [test_origin_after_redirect_to_https.html]
 [test_origin_after_redirect_to_https_cached.html]
 [test_https_origin_after_redirect.html]
 [test_https_origin_after_redirect_cached.html]
+[test_gzip_redirect.html]
 [test_register_base.html]
new file mode 100644
--- /dev/null
+++ b/dom/workers/test/serviceworkers/sw_clients/navigator.html
@@ -0,0 +1,35 @@
+<!--
+  Any copyright is dedicated to the Public Domain.
+  http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>Bug 982726 - test match_all not crashing</title>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<p id="display"></p>
+<div id="content" style="display: none"></div>
+<pre id="test"></pre>
+<script class="testbody" type="text/javascript">
+
+  if (!parent) {
+    dump("sw_clients/navigator.html shouldn't be launched directly!\n");
+  }
+
+  window.addEventListener("message", function(event) {
+    if (event.data.type === "NAVIGATE") {
+      window.location = event.data.url;
+    }
+  });
+
+  navigator.serviceWorker.ready.then(function() {
+    parent.postMessage("NAVIGATOR_READY", "*");
+  });
+
+</script>
+</pre>
+</body>
+</html>
+
new file mode 100644
--- /dev/null
+++ b/dom/workers/test/serviceworkers/test_gzip_redirect.html
@@ -0,0 +1,84 @@
+<!--
+  Any copyright is dedicated to the Public Domain.
+  http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>Bug 982726 - Test service worker post message </title>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<p id="display"></p>
+<div id="content" style="display: none"></div>
+<pre id="test"></pre>
+<script class="testbody" type="text/javascript">
+  var registration;
+  function start() {
+    return navigator.serviceWorker.register("gzip_redirect_worker.js",
+                                            { scope: "./sw_clients/" })
+      .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 testGzipRedirect(swr) {
+    var p = new Promise(function(res, rej) {
+      var navigatorReady = false;
+      var finalReady = false;
+
+      window.onmessage = function(e) {
+        if (e.data === "NAVIGATOR_READY") {
+          ok(!navigatorReady, "should only get navigator ready message once");
+          ok(!finalReady, "should get navigator ready before final redirect ready message");
+          navigatorReady = true;
+          iframe.contentWindow.postMessage({
+            type: "NAVIGATE",
+            url: "does_not_exist.html"
+          }, "*");
+        } else if (e.data === "READY") {
+          ok(navigatorReady, "should only get navigator ready message once");
+          ok(!finalReady, "should get final ready message only once");
+          finalReady = true;
+          res();
+        }
+      }
+    });
+
+    var content = document.getElementById("content");
+    ok(content, "Parent exists.");
+
+    iframe = document.createElement("iframe");
+    iframe.setAttribute('src', "sw_clients/navigator.html");
+    content.appendChild(iframe);
+
+    return p.then(() => content.removeChild(iframe));
+  }
+
+  function runTest() {
+    start()
+      .then(testGzipRedirect)
+      .then(unregister)
+      .catch(function(e) {
+        ok(false, "Some test failed with error " + e);
+      }).then(SimpleTest.finish);
+  }
+
+  SimpleTest.waitForExplicitFinish();
+  SpecialPowers.pushPrefEnv({"set": [
+    ["dom.serviceWorkers.exemptFromPerDomainMax", true],
+    ["dom.serviceWorkers.enabled", true],
+    ["dom.serviceWorkers.testing.enabled", true]
+  ]}, runTest);
+</script>
+</pre>
+</body>
+</html>