blob: 45da2b35eff06d35169b0191b3f30d5bb60b2a3f [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, frameType */
['visible', true, normalizeURL(scope) + '#1', 'nested'],
['visible', false, normalizeURL(scope) + '#2', 'nested'],
undefined
];
</script>