[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>