[prerender] Update restriction-web-locks.https.html to include query()
This CL updates 'restriction-web-locks.https.html' Web test to
include verification for query() in prerendering.
Bug: 1365949
Change-Id: If22158b24dbc4498d97284cd55b5f46d51a2cfba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3977730
Commit-Queue: Julie Jeongeun Kim <jkim@igalia.com>
Reviewed-by: Hiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1063729}
diff --git a/speculation-rules/prerender/resources/web-locks.html b/speculation-rules/prerender/resources/web-locks.html
index 464d3a4..621dd18 100644
--- a/speculation-rules/prerender/resources/web-locks.html
+++ b/speculation-rules/prerender/resources/web-locks.html
@@ -15,9 +15,18 @@
if (!isPrerendering) {
loadInitiatorPage();
} else {
+ const method = params.get('method');
const prerenderEventCollector = new PrerenderEventCollector();
- const promise = navigator.locks.request('prerender-test-lock', lock => {});
- prerenderEventCollector.start(promise, 'navigator.locks.request');
+ let promise;
+ switch(method) {
+ case 'request':
+ promise = navigator.locks.request('prerender-test-lock', lock => {});
+ break;
+ case 'query':
+ promise = navigator.locks.query();
+ break;
+ }
+ prerenderEventCollector.start(promise, `navigator.locks.${method}`);
}
</script>
diff --git a/speculation-rules/prerender/restriction-web-locks.https.html b/speculation-rules/prerender/restriction-web-locks.https.html
index 234b5e1..02b328d 100644
--- a/speculation-rules/prerender/restriction-web-locks.https.html
+++ b/speculation-rules/prerender/restriction-web-locks.https.html
@@ -10,38 +10,41 @@
setup(() => assertSpeculationRulesIsSupported());
-promise_test(async t => {
- const uid = token();
- const bc = new PrerenderChannel('test-channel', uid);
+function RunTest(method, description) {
+ promise_test(async t => {
+ const uid = token();
+ const bc = new PrerenderChannel('test-channel', uid);
- const gotMessage = new Promise(resolve => {
- bc.addEventListener('message', e => {
- resolve(e.data);
- }, {
- once: true
+ const gotMessage = new Promise(resolve => {
+ bc.addEventListener('message', e => {
+ resolve(e.data);
+ }, {
+ once: true
+ });
});
- });
- const url = `resources/web-locks.html?uid=${uid}`;
- window.open(url, '_blank', 'noopener');
+ const url = `resources/web-locks.html?method=${method}&uid=${uid}`;
+ window.open(url, '_blank', 'noopener');
- const result = await gotMessage;
- const expected = [
- {event: 'started waiting navigator.locks.request', prerendering: true},
- {event: 'prerendering change', prerendering: false},
- {event: 'finished waiting navigator.locks.request', prerendering: false},
- ];
- assert_equals(result.length, expected.length);
- for (let i = 0; i < result.length; i++) {
- assert_equals(result[i].event, expected[i].event, `event[${i}]`);
- assert_equals(result[i].prerendering, expected[i].prerendering,
- `prerendering[${i}]`);
- }
- bc.close();
+ const result = await gotMessage;
+ const expected = [
+ {event: `started waiting navigator.locks.${method}`, prerendering: true},
+ {event: 'prerendering change', prerendering: false},
+ {event: `finished waiting navigator.locks.${method}`, prerendering: false},
+ ];
+ assert_equals(result.length, expected.length);
+ for (let i = 0; i < result.length; i++) {
+ assert_equals(result[i].event, expected[i].event, `event[${i}]`);
+ assert_equals(result[i].prerendering, expected[i].prerendering,
+ `prerendering[${i}]`);
+ }
+ bc.close();
- // Send a close signal to PrerenderEventCollector on the prerendered page.
- new PrerenderChannel('close', uid).postMessage('');
-}, `the access to the Web Locks API should be deferred until the prerendered
- page is activated`);
+ // Send a close signal to PrerenderEventCollector on the prerendered page.
+ new PrerenderChannel('close', uid).postMessage('');
+ }, description);
+}
+RunTest(`request`, `navigator.locks.request should be deferred until the prerendered page is activated`);
+RunTest(`query`, `navigator.locks.query should be deferred until the prerendered page is activated`);
</script>
</body>