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