| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <title>requireInteraction: true</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <p> | |
| <button id="button">Push me to open a requireInteraction=true notification!</button> | |
| <button id="finish">Push me if you are done</button> | |
| </p> | |
| Steps: | |
| <ol> | |
| <li>Make sure you didn't block the notification permission.</li> | |
| <li>Allow the notification permission if the prompt opens.</li> | |
| <li>Click the first button.</li> | |
| <li>See whether the notification disappears from the screen without interaction. It must not.</li> | |
| <li>If you are sure it's not disappearing, then click that second button.</li> | |
| </ol> | |
| Why this is manual? Because | |
| <ol> | |
| <li> | |
| One need to wait for more than arbitrary platform-specific time to see | |
| it really does not disappear automatically. | |
| </li> | |
| <li>There's simply no API to tell it's disappeared from the screen or not</li> | |
| </ol> | |
| <script> | |
| setup({ explicit_timeout: true }) | |
| promise_test(async () => { | |
| const permission = await Notification.requestPermission(); | |
| if (permission === "denied") { | |
| throw new Error("Permission is denied, can't proceed"); | |
| } | |
| await new Promise(r => button.onclick = r); | |
| const n = new Notification("Test notification", { requireInteraction: true }); | |
| await new Promise((resolve, reject) => { | |
| n.onshow = resolve; | |
| n.onerror = () => reject(new Error( | |
| "Notification failed, and there's no good error message. Maybe some permission issue?" | |
| )); | |
| }); | |
| await Promise.race([ | |
| new Promise(r => finish.onclick = r), | |
| new Promise((r, reject) => { | |
| n.onclose = n.onclick = () => reject(new Error( | |
| "Uh, you should finish the test before you interact with the notification." | |
| )); | |
| }), | |
| ]); | |
| }); | |
| </script> |