<!DOCTYPE html>
<div id='container'></div>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<script>

var test = async_test("This test checks that an element's compositor proxy can be sent from the main thread to the compositor thread.");

var lastAttribute = '';
function checkResponse(opacity, transform) {
    assert_true(opacity || transform);
    assert_not_equals(opacity, transform);
    var currentAttribute = opacity ? 'opacity' : 'transform';
    if (lastAttribute == '') {
        lastAttribute = currentAttribute;
    } else {
        assert_not_equals(lastAttribute, currentAttribute);
        test.done();
    }
}

function processMessage(msg) {
    var message = msg.data;
    assert_equals('response', message.type);
    checkResponse(message.opacity, message.transform);
}

var first = new CompositorWorker('resources/proxy-echo.js');
first.onmessage = processMessage;
var proxy = new CompositorProxy(document.getElementById('container'), ['opacity']);
assert_true(proxy.supports('opacity'));
assert_false(proxy.supports('touch'));
assert_false(proxy.supports('transform'));
assert_false(proxy.supports('scrollTop'));
first.postMessage(proxy);

var second = new CompositorWorker('resources/proxy-echo.js');
second.onmessage = processMessage;
proxy = new CompositorProxy(document.getElementById('container'), ['transform']);
assert_true(proxy.supports('transform'));
assert_false(proxy.supports('opacity'));
assert_false(proxy.supports('touch'));
assert_false(proxy.supports('scrollTop'));
second.postMessage(proxy);

</script>
