<!DOCTYPE html>
<meta charset=utf-8>
<title>Web Locks API: Client IDs in query() vs. Service Worker</title>
<link rel=help href="https://w3c.github.io/web-locks/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
<script>

// Returns a promise resolved by the next message event.
function nextMessage() {
  return new Promise(resolve => {
    window.addEventListener('message', event => {
      resolve(event.data);
    }, {once: true});
  });
}

promise_test(async t => {
  assert_implements(navigator.locks);
  const iframe_url = 'resources/sw-controlled-iframe.html';

  // Register a service worker that will control an iframe.
  const registration = await service_worker_unregister_and_register(
    t, 'resources/service-worker.js', iframe_url);
  await wait_for_state(t, registration.installing, 'activated');

  const iframe = await with_iframe(iframe_url);

  iframe.contentWindow.postMessage('get_sw_client_id', '*');
  const sw_client_id = await nextMessage();

  iframe.contentWindow.postMessage('get_lock_client_id', '*');
  const lock_client_id = await nextMessage();

  // NOTE: Not assert_equals(), as we don't want log the randomly generated
  // clientIds, since they would not match any failure expectation files.
  assert_equals(lock_client_id, sw_client_id,
              'clientIds should match, but are different');

  await registration.unregister();

}, 'Client IDs match between Locks API and Service Workers');

</script>
