<!DOCTYPE html>
<html>
<body>
<pre id='console'></pre>

<script>
function log(message)
{
    document.getElementById('console').appendChild(document.createTextNode(message + "\n"));
}

function runTest() {
    var worker = new Worker('resources/worker-domurl.js');
    worker.onmessage = function(event) {
        if (event.data == 'DONE') {
            testDOMURL();
            if (window.testRunner)
                testRunner.notifyDone();
        } else
            log(event.data);
    }
    testDOMURL();
    worker.postMessage('');
}

function testDOMURL() 
{
    if (window.URL.createObjectURL == undefined)
        log('FAIL: window.URL.createObjectURL undefined');
    else
        log('PASS: window.URL.createObjectURL defined');

    if (window.URL.revokeObjectURL == undefined)
        log('FAIL: window.URL.revokeObjectURL undefined');
    else
        log('PASS: window.URL.revokeObjectURL defined');
}

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}
window.onload = runTest;
</script>
</body>
</html>
