<!DOCTYPE html>
<!--
 | Test case which ensures that when an element's ancestor has its display set
 | to none, all running transitions on it are immediately ended.
 | While the specification doesn't seem to say anything about this, it is
 | how Chrome and Firefox both work, and it is also intuitively in line with
 | the following behavior specified for CSS Animations:
 | From https://www.w3.org/TR/2013/WD-css3-animations-20130219/#animations,
 | "Setting the display property to ‘none’ will terminate any running animation
 |  applied to the element and its descendants. If an element has a display of
 |  ‘none’, updating display to a value other than ‘none’ will start all
 |  animations applied to the element by the ‘animation-name’ property, as well
 |  as all animations applied to descendants with display other than ‘none’."
 -->
<html>
<head>
  <style>
    #block {
      width: 100px;
      height: 100px;
      background-color: red;
      font-size: 30px;
      transition: background-color 1s, transform 2s linear;
    }
  </style>
</head>
<body>
  <div id="outer-container">
    <div id="inner-container">
      <div id="block"></div>
    </div>
  </div>

  <script>
    if (window.testRunner) {
      window.testRunner.waitUntilDone();
    }

    var blockDiv = document.getElementById('block');
    var containerDiv = document.getElementById('outer-container');

    window.addEventListener('load', function() {
      if (window.testRunner) {
        // Do a layout upon the load event so that we setup our source styles
        // that we will be transitioning from.
        window.testRunner.DoNonMeasuredLayout();
      }

      blockDiv.style.backgroundColor = 'blue';
      blockDiv.style.transform = "translate(100px, 0)";

      if (window.testRunner) {
        // Run the transition a bit so that it is started but not completed.
        window.testRunner.DoNonMeasuredLayout();
        window.testRunner.AdvanceClockByMs(500);
        window.testRunner.DoNonMeasuredLayout();

        containerDiv.style.display = "none";

        window.testRunner.DoNonMeasuredLayout();

        containerDiv.style.display = "block";

        // Measure that the transition should now appear to be fully completed.
        window.testRunner.notifyDone();
      }
    });
  </script>

</body>
</html>
