<!DOCTYPE html>
<head>
  <title>Below-viewport iframes with loading='lazy' load when set to
         loading='eager' or the `loading` attribute is removed</title>
  <link rel="author" title="Dom Farolino" href="mailto:domfarolino@gmail.com">
  <link rel="help" href="https://github.com/whatwg/html/pull/5579">
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
</head>

<script>
  const t = async_test("Below-viewport iframes with loading='lazy' load when " +
                       "set to loading='eager' or the `loading` attribute is " +
                       "removed");

  const iframe_1_onload = t.unreached_func("#iframe_1 should not load before " +
                                           "the window load event");
  const iframe_2_onload = t.unreached_func("#iframe_2 should not load before " +
                                           "the window load event");

  window.addEventListener("load", t.step_func(() => {
    const iframe_1 = document.querySelector('#iframe_1');
    const iframe_2 = document.querySelector('#iframe_2');

    const iframe_1_promise = new Promise((resolve, reject) => {
      iframe_1.onerror = reject;
      iframe_1.onload = resolve;
    });

    const iframe_2_promise = new Promise((resolve, reject) => {
      iframe_2.onerror = reject;
      iframe_2.onload = resolve;
    });

    Promise.all([iframe_1_promise, iframe_2_promise])
      .then(t.step_func_done())
      .catch(t.unreached_func("The iframes should load successfully"));

    // Kick off the requests.
    iframe_1.loading = 'eager';
    iframe_2.removeAttribute('loading'); // unset the attribute, putting it in
                                         // the default (eager) state.
  }));

</script>

<body>
  <div style="height:1000vh;"></div>
  <iframe id="iframe_1"
          src="resources/subframe.html?1"
          loading="lazy" onload="iframe_1_onload();"></iframe>
  <iframe id="iframe_2"
          src="resources/subframe.html?2"
          loading="lazy" onload="iframe_2_onload();"></iframe>
</body>
