Skip to content

Commit

Permalink
ServiceWorker: Modernize clients-matchall-client-types.https.html
Browse files Browse the repository at this point in the history
This CL modernizes clients-matchall-client-types.https.html using ES
features (arrow functions, async/await, etc) for code cleanup. This
doesn't change functional behavior.

Bug: n/a
Change-Id: Iaf35d11f1f90ec8e9cf9d41d585a873d7bcd8695
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2010758
Commit-Queue: Hiroki Nakagawa <[email protected]>
Reviewed-by: Eriko Kurimoto <[email protected]>
Reviewed-by: Kenichi Ishibashi <[email protected]>
Cr-Commit-Position: refs/heads/master@{#733872}
  • Loading branch information
nhiroki authored and chromium-wpt-export-bot committed Jan 22, 2020
1 parent 4d0e114 commit f2eb044
Showing 1 changed file with 56 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,117 +4,89 @@
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
var scope = 'resources/clients-matchall-client-types';
var iframe_url = scope + '-iframe.html';
var shared_worker_url = scope + '-shared-worker.js';
var dedicated_worker_url = scope + '-dedicated-worker.js';
const scope = 'resources/clients-matchall-client-types';
const iframe_url = scope + '-iframe.html';
const shared_worker_url = scope + '-shared-worker.js';
const dedicated_worker_url = scope + '-dedicated-worker.js';

/* visibilityState, focused, url, type, frameType */
var expected_only_window = [
const expected_only_window = [
['visible', true, new URL(iframe_url, location).href, 'window', 'nested']
];
var expected_only_shared_worker = [
const expected_only_shared_worker = [
[undefined, undefined, new URL(shared_worker_url, location).href, 'sharedworker', 'none']
];
var expected_only_dedicated_worker = [
const expected_only_dedicated_worker = [
[undefined, undefined, new URL(dedicated_worker_url, location).href, 'worker', 'none']
];

// These are explicitly sorted by URL in the service worker script.
var expected_all_clients = [
const expected_all_clients = [
expected_only_dedicated_worker[0],
expected_only_window[0],
expected_only_shared_worker[0],
];

function test_matchall(frame, expected, query_options) {
async function test_matchall(frame, expected, query_options) {
// Make sure the frame gets focus.
frame.focus();
return new Promise(function(resolve, reject) {
var channel = new MessageChannel();
channel.port1.onmessage = function(e) { resolve(e.data); };
const data = await new Promise(resolve => {
const channel = new MessageChannel();
channel.port1.onmessage = e => resolve(e.data);
frame.contentWindow.navigator.serviceWorker.controller.postMessage(
{port:channel.port2, options:query_options},
[channel.port2]);
}).then(function(data) {
if (typeof data === 'string') {
throw new Error(data);
}
});

assert_equals(data.length, expected.length, 'result count');
if (typeof data === 'string') {
throw new Error(data);
}

for (var i = 0; i < data.length; ++i) {
assert_array_equals(data[i], expected[i]);
}
});
assert_equals(data.length, expected.length, 'result count');

for (let i = 0; i < data.length; ++i) {
assert_array_equals(data[i], expected[i]);
}
}

promise_test(function(t) {
var frame;
return service_worker_unregister_and_register(
t, 'resources/clients-matchall-worker.js', scope)
.then(function(registration) {
t.add_cleanup(function() {
return service_worker_unregister(t, scope);
});
promise_test(async t => {
const registration = await service_worker_unregister_and_register(
t, 'resources/clients-matchall-worker.js', scope);
t.add_cleanup(_ => registration.unregister());
await wait_for_state(t, registration.installing, 'activated');
const frame = await with_iframe(iframe_url);
t.add_cleanup(_ => frame.remove());
await test_matchall(frame, expected_only_window, {});
await test_matchall(frame, expected_only_window, {type:'window'});
}, 'Verify matchAll() with window client type');

return wait_for_state(t, registration.installing, 'activated');
})
.then(function() { return with_iframe(iframe_url); })
.then(function(f) {
frame = f;
t.add_cleanup(function() { frame.remove(); });
return test_matchall(frame, expected_only_window, {});
})
.then(function() {
return test_matchall(frame, expected_only_window, {type:'window'});
});
}, 'Verify matchAll() with window client type');
promise_test(async t => {
const registration = await service_worker_unregister_and_register(
t, 'resources/clients-matchall-worker.js', scope);
t.add_cleanup(_ => registration.unregister());
await wait_for_state(t, registration.installing, 'activated');
const frame = await with_iframe(iframe_url);
t.add_cleanup(_ => frame.remove());

promise_test(function(t) {
var frame;
return service_worker_unregister_and_register(
t, 'resources/clients-matchall-worker.js', scope)
.then(function(registration) {
t.add_cleanup(function() {
return service_worker_unregister(t, scope);
});
// Set up worker clients.
const shared_worker = await new Promise((resolve, reject) => {
const w = new SharedWorker(shared_worker_url);
w.onerror = e => reject(e.message);
w.port.onmessage = _ => resolve(w);
});
const dedicated_worker = await new Promise((resolve, reject) => {
const w = new Worker(dedicated_worker_url);
w.onerror = e => reject(e.message);
w.onmessage = _ => resolve(w);
w.postMessage('Start');
});

return wait_for_state(t, registration.installing, 'activated');
})
.then(function() { return with_iframe(iframe_url); })
.then(function(f) {
frame = f;
t.add_cleanup(function() { frame.remove(); });
return new Promise(function(resolve, reject) {
var w = new SharedWorker(shared_worker_url);
w.port.onmessage = resolve;
});
})
.then(function() {
return new Promise(function(resolve, reject) {
var w = new Worker(dedicated_worker_url);
w.onmessage = resolve;
w.postMessage('Start');
});
})
.then(function() {
return test_matchall(frame, expected_only_window, {});
})
.then(function() {
return test_matchall(frame, expected_only_window, {type:'window'});
})
.then(function() {
return test_matchall(frame, expected_only_shared_worker,
{type:'sharedworker'});
})
.then(function() {
return test_matchall(frame, expected_only_dedicated_worker,
{type:'worker'});
})
.then(function() {
return test_matchall(frame, expected_all_clients, {type:'all'});
});
await test_matchall(frame, expected_only_window, {});
await test_matchall(frame, expected_only_window, {type:'window'});
await test_matchall(frame, expected_only_shared_worker,
{type:'sharedworker'});
await test_matchall(frame, expected_only_dedicated_worker, {type:'worker'});
await test_matchall(frame, expected_all_clients, {type:'all'});
}, 'Verify matchAll() with {window, sharedworker, worker} client types');

</script>

0 comments on commit f2eb044

Please sign in to comment.