On Mon, Dec 16, 2013 at 10:16 AM, Anne van Kesteren <ann...@annevk.nl>wrote:

> On Mon, Dec 16, 2013 at 4:07 PM, Glenn Maynard <gl...@zewt.org> wrote:
> > What I meant is that it would be good for the above pattern to work, and
> not
> > cause an IO error.
>
> Can't you always get an IO error? User removes the file, some kind of
> hard drive failure, etc.
>

Sure.  I mean that it shouldn't fail at all.  We should enable this as a
pattern:

function doSomething(url)
{
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url);
    xhr.send();
    xhr.onload = complete_request;
}
...
function foo()
{
    var blob = createSomeBlob();
    var url = URL.createObjectURL(blob);
    doSomething(url);
    URL.revokeObjectURL(url); // or use autorevoke, but this should work too
    blob.close();
}

Where the author of foo() doesn't know anything about the internals of
doSomething.  If this throws an IO error then it won't work, since closing
the blob will cause doSomething's request to fail.  You'd have to either
add a callback mechanism so foo() can call close() later, which you
shouldn't need to do for an API that simply takes a URL.

This way, you call close() to indicate that you're done with the instance
of the blob.  The browser can't actually discard the underlying data
immediately, but it knows that it can as soon as the XHR fetch finishes.
 This would be undetectable from scripts and the blob would still be
unusable for the script immediately.

-- 
Glenn Maynard

Reply via email to