<html>
  <!-- This test reproduces a perspective w < 0 error addressed in
       https://bugs.webkit.org/show_bug.cgi?id=79136. In that bug, as a layer is being
       transformed, it may get "clamped" by the homogeneous coordinate w < 0.  When
       projecting individual points, this was handled correctly, but projecting quads was
       ignoring this clamping, causing invalid quads to be generated, which ultimately did
       not hit-test correctly.
    -->
<head>
  <style type="text/css">
    #container {
        -webkit-perspective: 1000px;
        -webkit-perspective-origin-x: 145px;
        /* removing this property fixes the issue, but doesn't provide the desired rendering */
        -webkit-perspective-origin-y: 189px;
    }

    #intermediate {
        position: absolute;
        left: 40px;
        top: 189px;
        -webkit-transform-style: preserve-3d;
    }

    #results {
        position: absolute;
        top: 420px;
        left: 20px;
    }

    #backgroundLayer {
        position: absolute;
        width: 400px;
        height: 400px;
        background-color: gray;
    }

    .highlightOnHover:hover {
        background-color: orange;
    }

    .rotatedUp {
        -webkit-transform: rotateX(-240deg) translateZ(200px)
    }

    .rotatedDown {
        -webkit-transform: rotateX(-300deg) translateZ(200px)
    }

    .green {
        background-color: green;
    }

    .box {
        position: absolute;
        width: 300px;
        height: 110px;
    }

  </style>
  <script src="resources/hit-test-utils.js"></script>
  <script>
      var hitTestData = [
        // Points near the corners of the top layer
        { 'point': [35, 100], 'target' : 'topLayer' },
        { 'point': [370, 100], 'target' : 'topLayer' },
        { 'point': [40, 40], 'target' : 'topLayer' },
        { 'point': [365, 40], 'target' : 'topLayer' },

        // Points within the axis-aligned bounding box of the top layer, but not actually on the layer itself
        { 'point': [35, 40], 'target' : 'backgroundLayer' },
        { 'point': [370, 40], 'target' : 'backgroundLayer' },

        // Points near the corners of the top layer
        { 'point': [40, 340], 'target' : 'bottomLayer' },
        { 'point': [365, 340], 'target' : 'bottomLayer' },
        { 'point': [35, 260], 'target' : 'bottomLayer' },
        { 'point': [370, 280], 'target' : 'bottomLayer' },

        // Points within the axis-aligned bounding box of the bottom layer, but not actually on the layer itself
        { 'point': [35, 340], 'target' : 'backgroundLayer' },
        { 'point': [371, 340], 'target' : 'backgroundLayer' },
      ];

      window.addEventListener('load', runTest, false);
  </script>
</head>

<body>

  <div id="backgroundLayer"></div>

  <div id="container">
    <div id="intermediate" class="host" style="-webkit-transform: rotate3d(1, 0, 0, 270deg)">
      <div id="topLayer" class="highlightOnHover rotatedUp green box" style=""></div>
      <div id="bottomLayer" class="highlightOnHover rotatedDown green box" style=""></div>
    </div>
  </div>

  <div id="results"></div>

</body>
</html>
