Re: What changes to Web Messaging spec are proposed? [Was: Re: Using ArrayBuffer as payload for binary data to/from Web Workers]

On Wed, Jun 22, 2011 at 1:57 AM, David Levin <levin@chromium.org> wrote:

> Let's say the call doesn't throw when given a type B that isn't
> transferrable.
> Let's also say some later changes the javascript code and uses B after the
> postMessage call.
> Everything work. No throw is done and B isn't "gutted" because it isn't
> transferrable.
>

Throwing for unsupported objects will break common, reasonable uses, making
everyone jump hoops to use transfer.  Not throwing will only break code that
seriously misuses the API, by listing objects for transfer and then
continuing to use the object.

Anyway, if this exception is thrown, everyone's going to use a helper like
this:

function filterTransferrable(list) {
    var ret = [];
    for(var i = 0; i < list.length; ++i) {
        if(list[i] instanceof Transferrable)
            ret.push(list[i]);
    }
    return ret;
}

postMessage([A, B], filterTransferrable([A, B]));

... which will trigger the case you describe anyway.

-- 
Glenn Maynard

Received on Wednesday, 22 June 2011 06:43:42 UTC