| // 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 /"); |