<html>
<head>
<style>
body {
    zoom: 1.2;
    padding: 0;
    margin: 0;
}

.box {
    width: 100px;
    height: 100px;
    background-color: blue;
    position: absolute;
    top: 60px;
    left: 40px;
}

.translate {
    transform: perspective(200px) translate3d(100px, 50px, 25px) rotateY(45deg);
    background-color: red;
}

.matrix {
    background-color: green;
}
</style>
<script type="text/javascript">

function runTest() {

    if (!window.testRunner) {

        var id1 = "a";
        var id2 = "b";
        var element1 = document.getElementById(id1);
        var element2 = document.getElementById(id2);
        var x1 = element1.getBoundingClientRect().left;
        var y1 = element1.getBoundingClientRect().top;
        var x2 = element2.getBoundingClientRect().left;
        var y2 = element2.getBoundingClientRect().top;

        var resultString = '';
        var tolerance = 1e-2;
        if (Math.abs(x1 - x2) < tolerance && Math.abs(y1 - y2) < tolerance) {
            resultString += "PASS - Element " + id1 + " and Element " + id2 + " had identical positions";
        } else {
            resultString += "FAIL - Element " + id1 + " and Element " + id2 + " had different positions";
        }

        document.body.appendChild(document.createTextNode(resultString));
    }
}
</script>
</head>
<body onload="runTest();">

<!-- You should see green box only. If you see red, the test has failed -->

<div id='a' class="box translate"></div>
<div id='b' class="box matrix"></div>

<script>
    document.getElementById('b').style.webkitTransform = new WebKitCSSMatrix('matrix3d(0.707107, 0, -0.707107, 0.00353553, 0, 1, 0, 0, 0.707107, 0, 0.707107, -0.00353553, 100, 50, 25, 0.875)');
</script>
</body>
</html>
