<!doctype html>
<meta charset=utf-8>
<title>Test push is a powerful feature via Permissions API</title>
<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="/notifications/resources/helpers.js"></script>

<script>
let registration;

promise_setup(async () => {
  registration = await prepareActiveServiceWorker("noop-sw.js");
});

promise_test(async (t) => {
  await trySettingPermission("prompt")
  const status = await navigator.permissions.query({ name: "push" });
  assert_true(status instanceof PermissionStatus);
  assert_equals(status.name, "push", `permission's name must be "push"`);
  assert_equals(status.state, "prompt", `permission's state must be "prompt" by default`);
}, `Query "push" powerful feature`);

promise_test(async (t) => {
  await trySettingPermission("granted")
  const subscription = await registration.pushManager.subscribe();
  t.add_cleanup(() => subscription.unsubscribe());

  assert_true(subscription instanceof PushSubscription);
  assert_equals(typeof subscription.endpoint, "string", "endpoint string exists");
  assert_equals(new URL(subscription.endpoint).protocol, "https:", "endpoint is a valid https URL")

  assert_true(subscription.getKey("p256dh") instanceof ArrayBuffer, "p256dh key exists");
  assert_true(subscription.getKey("p256dh").byteLength > 0, "p256dh key is not empty");
  assert_true(subscription.getKey("auth") instanceof ArrayBuffer, "auth key exists");
  assert_true(subscription.getKey("auth").byteLength > 0, "auth key is not empty");
}, "Granting permission should allow subscription");

promise_test(async (t) => {
  await trySettingPermission("denied")
  await promise_rejects_dom(t, "NotAllowedError", registration.pushManager.subscribe());
}, "Denying permission should disallow subscription");
</script>
