<!DOCTYPE html>
<meta charset=utf-8>
<title>Web Locks API: Client IDs in query() vs. Service Worker</title>
<link rel=help href="https://wicg.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>
