<!DOCTYPE html>
<meta charset="utf-8">
<title>Test setting EventHandler attributes</title>
<link rel="help" href="https://w3c.github.io/encrypted-media/#attributes-3">

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<body>
<audio id="testElement"
       onencrypted="window.onencryptedHandlerSetFromParserWasFired()"
       onwaitingforkey="window.onwaitingforkeyHandlerSetFromParserWasFired()">
</audio>
<script>
  ["encrypted", "waitingforkey"].forEach(eventName => {
    promise_test(() => {
      return new Promise(resolve => {
        window[`on${eventName}HandlerSetFromParserWasFired`] = resolve;
        testElement.dispatchEvent(new Event(eventName));
      });
    }, `on${eventName} handler set from parser`);

    promise_test(() => {
      const el = document.createElement("audio");
      el.setAttribute(`on${eventName}`, `window.on${eventName}HandlerSetViaSetAttributeWasFired()`);
      document.body.append(el);

      return new Promise(resolve => {
        window[`on${eventName}HandlerSetViaSetAttributeWasFired`] = resolve;
        el.dispatchEvent(new Event(eventName));
      });
    }, `on${eventName} handler set via setAttribute()`);
  });
</script>
