<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="resources/helpers.js"></script>
<iframe id="iframe" src="resources/shownotification-window-iframe.html"></iframe>
<script>
/** @type {ServiceWorkerRegistration} */
let registration;

promise_setup(async (t) => {
  await trySettingPermission("granted");
  registration = await getActiveServiceWorker("noop-sw.js");
  await closeAllNotifications();
});

promise_test(async (t) => {
  t.add_cleanup(closeAllNotifications);

  if (iframe.contentDocument.readyState !== "complete") {
    await new Promise(resolve => iframe.onload = resolve);
  }

  await iframe.contentWindow.showNotification();
  let notifications = await registration.getNotifications();
  assert_equals(notifications.length, 1, "Should persist the notification");

  iframe.contentWindow.location.reload();
  // Wait for some time for potential notification close requests to be sent
  await new Promise(resolve => iframe.onload = resolve);
  notifications = await registration.getNotifications();
  assert_equals(notifications.length, 1, "Should keep the notification");
}, 'Refreshing window does not clear persistent notifications');
</script>
</body>
