<!DOCTYPE html>
<!--
 | Cleaning up an image after successfully loading it.
 -->
<html>

<head>
  <title>image-cleanup</title>
  <style>
    div {
      width: 500px;
      height: 400px;
      background-color: blue;
    }
  </style>
</head>

<body>
  <div id='image'></div>
  <script>
    if (window.testRunner) {
      window.testRunner.waitUntilDone();
    }

    // Image blob to load.
    var image_array = new Uint8Array([
      137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0,
      6, 0, 0, 0, 6, 8, 2, 0, 0, 0, 111, 174, 120, 31, 0, 0, 0, 3, 115, 66,
      73, 84, 8, 8, 8, 219, 225, 79, 224, 0, 0, 0, 25, 116, 69, 88, 116, 83,
      111, 102, 116, 119, 97, 114, 101, 0, 103, 110, 111, 109, 101, 45, 115,
      99, 114, 101, 101, 110, 115, 104, 111, 116, 239, 3, 191, 62, 0, 0, 0,
      36, 73, 68, 65, 84, 8, 153, 99, 252, 80, 238, 198, 128, 10, 88, 24, 24,
      24, 154, 119, 190, 132, 243, 107, 221, 197, 153, 24, 48, 0, 113, 66,
      140, 152, 198, 3, 0, 225, 21, 6, 103, 179, 203, 171, 64, 0, 0, 0, 0,
      73, 69, 78, 68, 174, 66, 96, 130]);
    var image_blob = new Blob([image_array.buffer]);
    var image_url = URL.createObjectURL(image_blob);

    var loaded = false;
    var cleaned = true;
    var image = new Image(); // HTMLImageElement
    var cobalt = document.getElementById('image');

    image.onload = function () {
      loaded = true;
      cobalt.style.background = 'url(' + image_url + ') no-repeat';
      // After loading the image wait a little bit then remove the src attribute.
      setTimeout(function () {
        image.removeAttribute('src');
      }, 100);
    }

    image.onerror = function () {
      cleaned = false;
    }

    image.src = image_url;

    // Conclude the test based on the current state.
    setTimeout(function () {
      if (loaded && cleaned) {
        reportSuccess();
      } else {
        reportError();
      }
    }, 500);

    function reportSuccess() {
      endTest();
    }

    function reportError() {
      console.error('test failed: loaded=' + loaded + ', cleaned=' + cleaned);
      endTest();
    }
    function endTest() {
      if (window.testRunner) {
        window.testRunner.notifyDone();
      }
    }
  </script>
</body>

</html>
