Index: LayoutTests/http/tests/serviceworker/clients-matchall-client-types.html |
diff --git a/LayoutTests/http/tests/serviceworker/clients-matchall-client-types.html b/LayoutTests/http/tests/serviceworker/clients-matchall-client-types.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..70193f091fb931d0a9e2d826d67ef0442aa7a6cc |
--- /dev/null |
+++ b/LayoutTests/http/tests/serviceworker/clients-matchall-client-types.html |
@@ -0,0 +1,82 @@ |
+<!DOCTYPE html> |
+<title>Service Worker: Clients.matchAll with various clientTypes</title> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
+<script src="resources/test-helpers.js"></script> |
+<script> |
+var scope = 'resources/clients-matchall-client-types'; |
+var iframe_url = scope + '-iframe.html'; |
+var worker_url = scope + '-worker.js'; |
falken
2015/03/31 04:34:32
nit: hmm we've been using -worker.js for service w
nhiroki
2015/04/01 04:51:34
Renamed to -shared-worker.js
|
+ |
+/* visibilityState, focused, url, frameType */ |
+var expected_without_type = [ |
+ ['visible', true, new URL(iframe_url, location).toString(), 'nested'] |
falken
2015/03/31 04:34:32
nit: these .toString() could be .href to save typi
nhiroki
2015/04/01 04:51:34
Done.
|
+]; |
+var expected_with_window = [ |
+ ['visible', true, new URL(iframe_url, location).toString(), 'nested'] |
+]; |
+var expected_with_shared_worker = [ |
+ [,,new URL(worker_url, location).toString(), 'none'] |
+]; |
+var expected_with_all = [ |
+ ['visible', true, new URL(iframe_url, location).toString(), 'nested'], |
+ [,,new URL(worker_url, location).toString(), 'none'] |
+]; |
+ |
+function test_matchall(frame, expected, query_options) { |
+ // Make sure the frame gets focus. |
+ frame.focus(); |
+ expected.sort(function(a, b) { return a[2] > b[2] ? 1 : -1; }); |
+ return new Promise(function(resolve, reject) { |
+ var channel = new MessageChannel(); |
+ channel.port1.onmessage = function(e) { |
+ assert_equals(e.data.length, expected.length); |
+ for (var i = 0; i < e.data.length; i++) |
+ assert_array_equals(e.data[i], expected[i]); |
+ resolve(frame); |
falken
2015/03/31 04:34:32
nit: this return value isn't used
nhiroki
2015/04/01 04:51:34
Removed.
|
+ }; |
+ frame.contentWindow.navigator.serviceWorker.controller.postMessage( |
+ {port:channel.port2, options:query_options}, |
+ [channel.port2]); |
+ }); |
+} |
+ |
+promise_test(function(t) { |
+ var frame; |
+ return service_worker_unregister_and_register( |
+ t, 'resources/clients-matchall-worker.js', scope) |
+ .then(function(registration) { |
+ return wait_for_state(t, registration.installing, 'activated'); |
+ }) |
+ .then(function() { return with_iframe(iframe_url); }) |
+ .then(function(f) { |
+ frame = f; |
+ return new Promise(function(resolve, reject) { |
+ var w = new SharedWorker(worker_url); |
+ w.port.onmessage = function(e) { |
+ resolve(e.data); |
falken
2015/03/31 04:34:32
nit: unused
nhiroki
2015/04/01 04:51:34
Removed.
|
+ } |
falken
2015/03/31 04:34:32
nit: missing semi-colon
nhiroki
2015/04/01 04:51:34
Done.
|
+ }); |
+ }) |
+ .then(function() { |
+ return test_matchall(frame, expected_without_type, {}); |
+ }) |
+ .then(function() { |
+ return test_matchall(frame, expected_with_window, |
+ {type:"window"}); |
falken
2015/03/31 04:34:31
nit: should be single-quotes in JS (same below)
nhiroki
2015/04/01 04:51:34
Done.
|
+ }) |
+ .then(function() { |
+ return test_matchall(frame, expected_with_shared_worker, |
+ {type:"sharedworker"}); |
+ }) |
+ .then(function() { |
+ return test_matchall(frame, expected_with_all, |
+ {type:"all"}); |
+ }) |
+ .then(function() { |
+ frame.remove(); |
+ return service_worker_unregister_and_done(t, scope); |
+ }); |
+ }, 'Verify matchAll() with various client types'); |
+ |
+</script> |