Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<title>Web Share: consume transient activation</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css" />
<body>
<button id="share">Share</button>
</body>
<script>
// TODO: add a task that tests share() consume the transient user activation.
// Because OS-level prompt can't be cancelled, it's currently not possible to
// test this. We need to add a Web share Mocking service:
// test that share() would be blocked with an already-consumed-activation.
add_task(async function blockedIfAlreadyConsumed() {
const wrappedDoc = SpecialPowers.wrap(document);
const button = document.getElementById("share");
// Kick off transient activation
synthesizeMouseAtCenter(button, {});
ok(
wrappedDoc.hasValidTransientUserGestureActivation,
"Activated by a gesture"
);
wrappedDoc.consumeTransientUserGestureActivation();
try {
const sharePromise = navigator.share({ title: "test" });
await sharePromise;
ok(false, "must throw because activation was already consumed");
} catch (err) {
is(err.name, "NotAllowedError", "Expected NotAllowedError DOMException");
} finally {
ok(
!wrappedDoc.hasValidTransientUserGestureActivation,
"share() must consume the activation"
);
}
});
</script>