| // META: global=window-module |
| // META: script=/resources/testdriver.js |
| // META: script=/resources/testdriver-vendor.js |
| // META: script=/notifications/resources/helpers.js |
| |
| // Tests for window.pushManager |
| // https://w3c.github.io/push-api/#extensions-to-the-serviceworkerregistration-interface |
| |
| import { pushMessage } from "/push-api/resources/helpers.js" |
| |
| let windowSubscription; |
| promise_setup(async () => { |
| await trySettingPermission("granted"); |
| windowSubscription = await pushManager.subscribe(); |
| add_completion_callback(() => windowSubscription.unsubscribe()); |
| }); |
| |
| promise_test(async t => { |
| const registration = await prepareActiveServiceWorkerForTest(t, "push-sw.js", {scope: "/"}); |
| let swSubscription = await registration.pushManager.getSubscription(); |
| assert_object_equals(swSubscription.toJSON(), windowSubscription.toJSON(), |
| "getSubscription() for service worker should return the window subscription."); |
| const {promise, resolve} = Promise.withResolvers(); |
| navigator.serviceWorker.addEventListener("message", e => { |
| resolve(e.data.data.text); |
| }, {once: true}); |
| await pushMessage(windowSubscription, { message: "Hello" }); |
| const pushText = await promise; |
| assert_equals(pushText, "Hello", |
| "Service worker should get push event when push message is sent through window.pushManager."); |
| }, "Using window.pushManager when there is a service worker with scope /"); |
| |
| promise_test(async t => { |
| const registration = await prepareActiveServiceWorkerForTest(t, "push-sw.js"); |
| assert_equals(await registration.pushManager.getSubscription(), null, |
| "getSubscription() should return null if only window has a push subscription."); |
| const swSubscription = await registration.pushManager.subscribe(); |
| // https://w3c.github.io/push-api/#push-subscription |
| // "A push endpoint MUST uniquely identify the push subscription." |
| assert_not_equals(swSubscription.endpoint, windowSubscription.endpoint, |
| "Service worker subscription should be different from window subscription."); |
| }, "Using window.pushManager when there is a service worker with scope NOT equal to /"); |