<!DOCTYPE html>
<head>
  <title>Deferred images with loading='lazy' use the original
         base URL specified at parse-time</title>
  <link rel="author" title="Rob Buis" href="mailto:rbuis@igalia.com">
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="../resources/common.js"></script>
  <base href='/html/semantics/embedded-content/the-img-element/resources/'>
</head>

<script>
  const below_viewport_img = new ElementLoadPromise("below-viewport");

  let has_window_loaded = false;

  async_test(t => {
    // At this point, the below-viewport image's request has been set-up, and
    // its URL is the URL that was parsed relative to the document's base URL
    // at this time. Any changes to the document's base URL from this point
    // forward should not impact the image when we scroll it in-view. This is
    // because the next step in the #updating-the-img-data algorithm is to to
    // fetch the request that has already been set up. Now we'll change the
    // document's base URL, and scroll the image in-view.
    window.addEventListener("load", t.step_func(() => {
      const base = document.querySelector('base');
      base.href = '/invalid-url-where-no-subresources-exist/';
      has_window_loaded = true;
      below_viewport_img.element().scrollIntoView();
    }));

    below_viewport_img.promise.then(t.step_func_done(() => {
      assert_true(has_window_loaded,
                  "Below-viewport loading=lazy images do not block the " +
                  "window load event");
    }));

    below_viewport_img.promise.catch(
      t.unreached_func("The image request should not load relative to the " +
                       "current (incorrect) base URL.")
    );
  }, "When a loading=lazy image is loaded, it loads relative to the " +
     "document's base URL computed at parse-time.");
</script>

<body>
  <div style="height:1000vh"></div>
  <img id="below-viewport" src="image.png" loading="lazy"
       onload="below_viewport_img.resolve()"
       onerror="below_viewport_img.reject()">
</body>
