- From: Charles Pritchard <chuck@jumis.com>
- Date: Mon, 05 Mar 2012 18:46:18 -0800
- To: Glenn Maynard <glenn@zewt.org>
- CC: Feras Moussa <ferasm@microsoft.com>, "public-webapps@w3.org" <public-webapps@w3.org>, Adrian Bateman <adrianba@microsoft.com>
- Message-ID: <4F557A7A.9080200@jumis.com>
On 3/5/2012 5:56 PM, Glenn Maynard wrote:
> On Mon, Mar 5, 2012 at 7:04 PM, Charles Pritchard <chuck@jumis.com
> <mailto:chuck@jumis.com>> wrote:
>
> Do you see old behavior working something like the following?
>
>
> var blob = new Blob("my new big blob");
> var keepBlob = blob.slice(); destination.postMessage(blob, '*',
> [blob]); // is try/catch needed here?
>
>
> You don't need to do that. If you don't want postMessage to transfer
> the blob, then simply don't include it in the transfer parameter, and
> it'll perform a normal structured clone. postMessage behaves this way
> in part for backwards-compatibility: so exactly in cases like this, we
> can make Blob implement Transferable without breaking existing code.
>
> See http://dev.w3.org/html5/postmsg/#posting-messages and similar
> postMessage APIs.
Web Intents won't have a transfer map argument.
http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html#widl-Intent-data
For the Web Intents structured cloning algorithm, Web Intents would be
inserting into step 3:
If input is a Transferable object, add it to the transfer map.
http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#internal-structured-cloning-algorithm
Then Web Intents would move the first section of the structured cloning
algorithm to follow the internal cloning algorithm section, swapping
their order.
http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#safe-passing-of-structured-data
That's my understanding.
Something like this may be necessary if Blob were a Transferable:
var keepBlob = blob.slice();
var intent = new Intent("-x-my-intent", blob);
navigator.startActivity(intent, callback);
> And we might have an error on postMessage stashing it in the
> transfer array if it's not a Transferable on an older browser.
>
>
Example of how easy the neutered concept applies to Transferrable:
> var blob = new Blob("my big blob");
> blob.close();
I like the idea of having Blob implement Transferrable and adding close
to the Transferrable interface.
File.close could have a better relationship with the cache and/or locks
on data.
Some history on Transferrable and structured clones:
Note: MessagePort does have a close method and is currently the only
Transferrable mentioned in WHATWG:
http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#transferable-objects
ArrayBuffer is widely implemented. It was the second item to implement
Transferrable:
http://www.khronos.org/registry/typedarray/specs/latest/#9
Subsequently, ImageData adopted Uint8ClampedArray for one of its
properties, adopting TypedArrays:
http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#imagedata
This has lead to some instability in the structured clone algorithm for
ImageData as the typed array object for ImageData is read-only.
https://www.w3.org/Bugs/Public/show_bug.cgi?id=13800
ArrayBuffer is still in a strawman state.
-Charles
Received on Tuesday, 6 March 2012 02:46:43 UTC