<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body onload="runTest()">
<div style="position: relative; width: 1600px; height: 2400px; background-color: green;">
  <div style="position:absolute; left: 600px; top: 800px;"><img src="resources/animated.gif" id="testImage"/></div>
</div>
<script>
description("Make sure that animated images are properly stopped / resumed when zooming in or out.");
jsTestIsAsync = true;

function isImageAnimated()
{
  return !internals.hasPausedImageAnimations(document.getElementById("testImage"));
}

function zoomIn() {
  debug("Zoom in so that the image is no longer visible.");
  for (var i = 0; i < 5; ++i)
    window.eventSender.zoomPageIn();

  shouldBecomeEqual("isImageAnimated()", "false", finishJSTest);
}

function zoomOut() {
  debug("Zoom out so that the image becomes visible.");

  for (var i = 0; i < 5; ++i)
    window.eventSender.zoomPageOut();

  shouldBecomeEqual("isImageAnimated()", "true", zoomIn);
}

function imageLoaded() {
  shouldBecomeEqual("isImageAnimated()", "false", zoomOut);
}

function runTest() {
  if (!window.internals)
    return;

  var img = new Image();
  // Make sure the image is loaded before we check if it is animated.
  img.onload = imageLoaded;
  img.src = "resources/animated.gif";
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
