<!DOCTYPE html>
<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
</head>
<body>
<script>
description("WebSocket message event origin attribute test (Blob message)");

window.jsTestIsAsync = true;
var data = "";
var origin = "";

function startsWith(target, prefix)
{
    return target.indexOf(prefix) === 0;
}

function createBlobContainingHelloWorld()
{
    return new Blob(["Hello, world!"]);
}

function createEmptyBlob()
{
    return new Blob([]);
}

function createBlobContainingAllDistinctBytes()
{
    var array = new Uint8Array(256);
    for (var i = 0; i < 256; ++i)
        array[i] = i;
    return new Blob([array]);
}

var url = "ws://127.0.0.1:8880/check-binary-messages";
var ws = new WebSocket(url);
var closeEvent;

ws.onopen = function()
{
    ws.send(createBlobContainingHelloWorld());
    ws.send(createEmptyBlob());
    ws.send(createBlobContainingAllDistinctBytes());
};

ws.onmessage = function(event)
{
    var message = event.data;
    if (startsWith(message, "PASS"))
        testPassed(message);
    else
        testFailed(message);
    origin = event.origin;
    shouldBeEqualToString("origin", "ws://127.0.0.1:8880");
};

ws.onclose = function(event)
{
    closeEvent = event;
    shouldBeTrue("closeEvent.wasClean");
    finishJSTest();
};

</script>
</body>
</html>
