chromium/third_party/blink/web_tests/fast/workers/resources/worker-sharedarraybuffer-transfer.js

function verifyArray(ta, length) {
    var i;
    for (i = 0; i < length; ++i) {
        if (ta[i] != i) {
            postMessage("FAIL: Transferred data is incorrect. Expected " +
                i + " got " + ta[i]);
            return;
        }
    }
    postMessage("PASS: Transferred data is OK.");
}

function verifyArrayType(ta, name) {
    var className = Object.prototype.toString.call(ta);
    if (className.indexOf(name) != -1)
        postMessage("PASS: Transferred array type is OK.");
    else
        postMessage("FAIL: Expected array type " + name + " got " + className);
}

self.addEventListener('message', function(e) {
    var ab;
    var sab;
    var sab2;
    var ta;

    switch (e.data.name) {
        case 'SharedArrayBuffer':
            sab = e.data.data;
            ta = new Uint8Array(sab);
            verifyArray(ta, e.data.length);
            break;

        case 'Int8Array':
        case 'Uint8Array':
        case 'Uint8ClampedArray':
        case 'Int16Array':
        case 'Uint16Array':
        case 'Int32Array':
        case 'Uint32Array':
        case 'Float32Array':
        case 'Float64Array':
            ta = e.data.data;
            verifyArrayType(ta, e.data.name);
            verifyArray(ta, e.data.length);
            break;

        case 'ArrayBufferAndSharedArrayBuffer':
            ab = e.data.ab;
            sab = e.data.sab;
            verifyArray(new Uint8Array(ab), e.data.abByteLength);
            verifyArray(new Uint8Array(sab), e.data.sabByteLength);
            break;

        case 'SharedArrayBufferTwice':
            sab = e.data.sab;
            sab2 = e.data.sab2;
            if (sab !== sab2) {
                postMessage('FAIL: Expected two SharedArrayBuffers to be equal.');
            }
            verifyArray(new Uint8Array(sab), e.data.sabByteLength);
            break;

        default:
            postMessage("ERROR: unknown command " + e.data.name);
            break;
    }
    postMessage("DONE");
});