summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/serviceworkers/openWindow_worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/workers/test/serviceworkers/openWindow_worker.js')
-rw-r--r--dom/workers/test/serviceworkers/openWindow_worker.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/dom/workers/test/serviceworkers/openWindow_worker.js b/dom/workers/test/serviceworkers/openWindow_worker.js
new file mode 100644
index 000000000..46c0f998e
--- /dev/null
+++ b/dom/workers/test/serviceworkers/openWindow_worker.js
@@ -0,0 +1,116 @@
+// the worker won't shut down between events because we increased
+// the timeout values.
+var client;
+var window_count = 0;
+var expected_window_count = 7;
+var resolve_got_all_windows = null;
+var got_all_windows = new Promise(function(res, rej) {
+ resolve_got_all_windows = res;
+});
+
+// |expected_window_count| needs to be updated for every new call that's
+// expected to actually open a new window regardless of what |clients.openWindow|
+// returns.
+function testForUrl(url, throwType, clientProperties, resultsArray) {
+ return clients.openWindow(url)
+ .then(function(e) {
+ if (throwType != null) {
+ resultsArray.push({
+ result: false,
+ message: "openWindow should throw " + throwType
+ });
+ } else if (clientProperties) {
+ resultsArray.push({
+ result: (e instanceof WindowClient),
+ message: "openWindow should resolve to a WindowClient"
+ });
+ resultsArray.push({
+ result: e.url == clientProperties.url,
+ message: "Client url should be " + clientProperties.url
+ });
+ // Add more properties
+ } else {
+ resultsArray.push({
+ result: e == null,
+ message: "Open window should resolve to null. Got: " + e
+ });
+ }
+ })
+ .catch(function(err) {
+ if (throwType == null) {
+ resultsArray.push({
+ result: false,
+ message: "Unexpected throw: " + err
+ });
+ } else {
+ resultsArray.push({
+ result: err.toString().indexOf(throwType) >= 0,
+ message: "openWindow should throw: " + err
+ });
+ }
+ })
+}
+
+onmessage = function(event) {
+ if (event.data == "testNoPopup") {
+ client = event.source;
+
+ var results = [];
+ var promises = [];
+ promises.push(testForUrl("about:blank", "TypeError", null, results));
+ promises.push(testForUrl("http://example.com", "InvalidAccessError", null, results));
+ promises.push(testForUrl("_._*`InvalidURL", "InvalidAccessError", null, results));
+ Promise.all(promises).then(function(e) {
+ client.postMessage(results);
+ });
+ }
+ if (event.data == "NEW_WINDOW") {
+ window_count += 1;
+ if (window_count == expected_window_count) {
+ resolve_got_all_windows();
+ }
+ }
+
+ if (event.data == "CHECK_NUMBER_OF_WINDOWS") {
+ got_all_windows.then(function() {
+ return clients.matchAll();
+ }).then(function(cl) {
+ event.source.postMessage({result: cl.length == expected_window_count,
+ message: "The number of windows is correct."});
+ for (i = 0; i < cl.length; i++) {
+ cl[i].postMessage("CLOSE");
+ }
+ });
+ }
+}
+
+onnotificationclick = function(e) {
+ var results = [];
+ var promises = [];
+
+ var redirect = "http://mochi.test:8888/tests/dom/workers/test/serviceworkers/redirect.sjs?"
+ var redirect_xorigin = "http://example.com/tests/dom/workers/test/serviceworkers/redirect.sjs?"
+ var same_origin = "http://mochi.test:8888/tests/dom/workers/test/serviceworkers/open_window/client.html"
+ var different_origin = "http://example.com/tests/dom/workers/test/serviceworkers/open_window/client.html"
+
+
+ promises.push(testForUrl("about:blank", "TypeError", null, results));
+ promises.push(testForUrl(different_origin, null, null, results));
+ promises.push(testForUrl(same_origin, null, {url: same_origin}, results));
+ promises.push(testForUrl("open_window/client.html", null, {url: same_origin}, results));
+
+ // redirect tests
+ promises.push(testForUrl(redirect + "open_window/client.html", null,
+ {url: same_origin}, results));
+ promises.push(testForUrl(redirect + different_origin, null, null, results));
+
+ promises.push(testForUrl(redirect_xorigin + "open_window/client.html", null,
+ null, results));
+ promises.push(testForUrl(redirect_xorigin + same_origin, null,
+ {url: same_origin}, results));
+
+ Promise.all(promises).then(function(e) {
+ client.postMessage(results);
+ });
+}
+