<!DOCTYPE html>
<html>
  <head>
    <title>changing object-fit values on video elements</title>
    <style>
      video {
        width: 120px;
        height: 120px;
        border: 1px solid blue;
        background-color: gray;
        margin: 10px;
      }
    </style>
    <script src=media-file.js></script>
    <script>
        if (window.testRunner)
          testRunner.waitUntilDone();

        function init()
        {
            setSrcByTagName("video", findMediaFile("video", "content/test"));

            var totalCount = document.getElementsByTagName('video').length;
            var count = totalCount;

            if (window.testRunner) {
                document.addEventListener("canplaythrough", function () {
                    if (!--count)
                        setTimeout(function() { testRunner.notifyDone(); }, 500);
                }, true);

                setTimeout(function() {
                    document.body.appendChild(document.createTextNode('FAILED TOO'));
                    if (window.testRunner)
                        testRunner.notifyDone();
                }, 1500);
            }
        }
    </script>

  </head>
  <body onload="init();">
    <video id="video1" style="object-fit:contain;"></video>
    <video id="video2" style="object-fit:cover;"></video>
    <video id="video3" style="object-fit:fill;"></video>
    <video id="video4" style="object-fit:scale-down;"></video>
  </body>
</html>
