<!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:
  // https://bugzilla.mozilla.org/show_bug.cgi?id=1646229

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