<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 {
    -webkit-transform: translate(100px, 50px);
    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 = webkitConvertPointFromNodeToPage(element1, new WebKitPoint(0,0)).x;
        var y1 = webkitConvertPointFromNodeToPage(element1, new WebKitPoint(0,0)).y;
        var x2 = webkitConvertPointFromNodeToPage(element2, new WebKitPoint(0,0)).x;
        var y2 = webkitConvertPointFromNodeToPage(element2, new WebKitPoint(0,0)).y;

        var resultString = '';
        if (x1 == x2 && y1 == y2) {
            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('matrix(1, 0, 0, 1, 100, 50)');
</script>
</body>
</html>
