| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <title>WebShare Test: consume user activation</title> | |
| <link rel="help" href="https://github.com/w3c/web-share/pull/219" /> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/resources/testdriver.js"></script> | |
| <script src="/resources/testdriver-vendor.js"></script> | |
| </head> | |
| <body> | |
| <script> | |
| async function loadIframe() { | |
| const iframe = document.createElement("iframe"); | |
| iframe.src = "./resources/blank.html"; | |
| document.body.appendChild(iframe); | |
| await new Promise((resolve) => { | |
| iframe.addEventListener("load", resolve); | |
| }); | |
| return iframe; | |
| } | |
| promise_test(async (t) => { | |
| const iframe = await loadIframe(); | |
| const { contentWindow } = iframe; | |
| const { navigator, DOMException } = contentWindow; | |
| const data = { text: "text" }; | |
| iframe.remove(); | |
| await promise_rejects_dom( | |
| t, | |
| "InvalidStateError", | |
| DOMException, | |
| navigator.share(data), | |
| "Expected promise rejected with InvalidStateError from .share()" | |
| ); | |
| }, "calling share() on non-fully active document returns a promise rejected with InvalidStateError"); | |
| promise_test(async (t) => { | |
| const iframe = await loadIframe(); | |
| const { contentWindow } = iframe; | |
| const { navigator, DOMException } = contentWindow; | |
| const data = { text: "text" }; | |
| // Acquire transient activation, but make the iframe non-fully-active | |
| await test_driver.bless( | |
| "web share", | |
| () => { | |
| iframe.remove(); | |
| }, | |
| contentWindow | |
| ); | |
| await promise_rejects_dom( | |
| t, | |
| "InvalidStateError", | |
| DOMException, | |
| navigator.share(data), | |
| "Expected promise rejected with InvalidStateError from .share()" | |
| ); | |
| }, "calling share() with transient activation on non-fully active document returns a promise rejected with InvalidStateError"); | |
| promise_test(async (t) => { | |
| const iframe = await loadIframe(); | |
| const { contentWindow } = iframe; | |
| const { navigator } = contentWindow; | |
| const data = { text: "text" }; | |
| assert_true(navigator.canShare(data), "doc is fully active, so true"); | |
| iframe.remove(); | |
| assert_false(navigator.canShare(data), "not fully active, so false"); | |
| }, "calling canShare() on a non-fully active document returns false"); | |
| </script> | |
| </body> | |
| </html> |