blob: 68c6d7f7ac02a316856a405f6579eb191e738924 [file] [log] [blame]
<!DOCTYPE html>
<title>Service Worker: Clients.get</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
var scope = 'resources/clients-get-frame.html';
var client_ids = [];
var frame;
promise_test(function(t) {
return service_worker_unregister_and_register(
t, 'resources/clients-get-worker.js', scope)
.then(function(registration) {
add_completion_callback(function() { registration.unregister(); });
return wait_for_state(t, registration.installing, 'activated');
})
.then(function() {
return with_iframe(scope + '#1');
})
.then(function(frame1) {
add_completion_callback(function() { frame1.remove(); });
frame1.focus();
return wait_for_clientId();
})
.then(function(client_id) {
client_ids.push(client_id);
return with_iframe(scope + '#2');
})
.then(function(frame2) {
frame = frame2;
add_completion_callback(function() { frame2.remove(); });
return wait_for_clientId();
})
.then(function(client_id) {
client_ids.push(client_id, 'invalid-id');
var channel = new MessageChannel();
var saw_message = new Promise(function(resolve) {
channel.port1.onmessage = resolve;
});
frame.contentWindow.navigator.serviceWorker.controller.postMessage(
{port: channel.port2, clientIds: client_ids}, [channel.port2]);
return saw_message;
})
.then(function(e) {
assert_equals(e.data.length, 3);
assert_array_equals(e.data[0], expected[0]);
assert_array_equals(e.data[1], expected[1]);
assert_equals(e.data[2], expected[2]);
});
}, 'Test Clients.get()');
function wait_for_clientId() {
return new Promise(function(resolve, reject) {
function get_client_id(e) {
window.removeEventListener('message', get_client_id);
resolve(e.data.clientId);
}
window.addEventListener('message', get_client_id, false);
});
}
var expected = [
// visibilityState, focused, url, type, frameType
['visible', true, normalizeURL(scope) + '#1', 'window', 'nested'],
['visible', false, normalizeURL(scope) + '#2', 'window', 'nested'],
undefined
];
</script>