blob: c593816d4a3125c855f17f339984db0babd4c6a7 [file] [log] [blame]
<!DOCTYPE html>
<!-- This is in chromium/ because the equivalent version available in Web
Platform Tests also asserts the presence of the Client's `type` attribute.
This less precise version (and its resources) should be maintained only to
preserve test coverage until the attribute is implemented. See
https://crbug.com/705685 -->
<title>Service Worker: Clients.matchAll</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../resources/test-helpers.js"></script>
<script>
var scope = 'resources/blank.html?clients-matchAll';
var expectedFirst = [
/* visibilityState, focused, url, frameType */
['visible', true, new URL(scope + '#1', location).toString(), 'nested'],
['visible', false, new URL(scope + '#2', location).toString(), 'nested']
];
var expectedSecond = [
/* visibilityState, focused, url, frameType */
['visible', true, new URL(scope + '#2', location).toString(), 'nested'],
['visible', false, new URL(scope + '#1', location).toString(), 'nested']
];
var frame1, frame2;
var worker;
promise_test(function(t) {
return service_worker_unregister_and_register(
t, 'resources/clients-matchall-worker.js', scope)
.then(function(registration) {
worker = registration.installing;
return wait_for_state(t, worker, 'activated');
})
.then(function() { return with_iframe(scope + '#1'); })
.then(function(f) {
frame1 = f;
return with_iframe(scope + '#2');
})
.then(function(f) {
frame2 = f;
return new Promise(function(resolve) {
frame1.focus();
var channel = new MessageChannel();
channel.port1.onmessage = resolve;
worker.postMessage({port:channel.port2}, [channel.port2]);
});
})
.then(function(message) {
assert_equals(message.data.length, 2);
assert_array_equals(message.data[0], expectedFirst[0]);
assert_array_equals(message.data[1], expectedFirst[1]);
return new Promise(function(resolve) {
frame2.focus();
var channel = new MessageChannel();
channel.port1.onmessage = resolve;
worker.postMessage({port:channel.port2}, [channel.port2]);
});
})
.then(function(message) {
assert_equals(message.data.length, 2);
assert_array_equals(message.data[0], expectedSecond[0]);
assert_array_equals(message.data[1], expectedSecond[1]);
frame1.remove();
frame2.remove();
return service_worker_unregister_and_done(t, scope);
})
}, 'Test Clients.matchAll()');
</script>