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