1<html>
2<head>
3<script src="resources/push-api-test-pre.js"></script>
4<script src="resources/subscribe-tests.js"></script>
5</head>
6<body>
7<script>
8if (window.testRunner)
9 testRunner.denyWebNotificationPermissionOnPrompt(window.origin);
10
11navigator.serviceWorker.register("resources/subscribe-worker.js", { }).then(async (registration) => {
12 try {
13 await waitForState(registration.installing, "activated");
14 await testServiceWorkerPermissionState(registration, 'prompt');
15 await testDocumentPermissionState(registration, 'prompt');
16 await testServiceWorkerSubscribe(registration, 'NotAllowedError');
17 await testDocumentSubscribeWithoutUserGesture(registration, 'NotAllowedError');
18
19 let promise = new Promise((resolve, reject) => {
20 if (!window.internals) {
21 reject('Test requires internals.');
22 return;
23 }
24
25 internals.withUserGesture(() => {
26 let request1 = registration.pushManager.subscribe({
27 userVisibleOnly: true,
28 applicationServerKey: VALID_SERVER_KEY
29 });
30 let request2 = registration.pushManager.subscribe({
31 userVisibleOnly: true,
32 applicationServerKey: VALID_SERVER_KEY
33 });
34 Promise.allSettled([request1, request2]).then(resolve);
35 });
36 });
37 let [result1, result2] = await(promise);
38
39 if (result1.reason && result1.reason.name == 'NotAllowedError')
40 log('PASS: document subscribe with user gesture was error: NotAllowedError')
41 else
42 log(`FAIL: first subscribe failed with unexpected result ${result1.value || result1.reason}`);
43
44 if (result2.reason && result2.reason.name == 'NotAllowedError' && result2.reason.message.includes('user gesture'))
45 log('PASS: document subscribe with consumed user gesture was failed with user gesture error')
46 else
47 log(`FAIL: second subscribe failed with unexpected result ${result2.value || result2.reason}`)
48 } catch (e) {
49 log(`FAIL: unexpected exception ${e}`);
50 } finally {
51 await registration.unregister();
52 finishPushAPITest();
53 }
54});
55</script>
56</body>
57</html>