Re: Comment on File API's FileData::slice method

On Fri, Oct 2, 2009 at 9:19 AM, Darin Fisher <darin@chromium.org> wrote:
> On Fri, Oct 2, 2009 at 9:15 AM, Arun Ranganathan <aranganathan@mozilla.com>
> wrote:
>>
>> Darin Fisher wrote:
>>>
>>> FileData::slice appears to be spec'd like so:
>>> FileData slice(in long long offset, in long long length); // throws
>>> FileException
>>>
>>> This suggests that it may throw a file exception.  I'm wondering if that
>>> is
>>> a requirement?  It seems that the rest of the methods are designed to
>>> report
>>> success or failure asynchronously.  I'm wondering why slice is not spec'd
>>> similarly.
>>>
>>> I think it would be bad for UAs to implement this exception since it
>>> would
>>> require a synchronous stat'ing of the filesystem.  That could hang the
>>> calling thread for a long time (consider network file systems).
>>>
>>> It seems like it would be better for the spec to encourage
>>> an asynchronous implementation.  For example, it should be the case that
>>> the
>>> FileData object returned by slice may or may not be valid.  The user
>>> would
>>> only find out when they try to use the FileData object.
>>>
>>
>> By asynchronous, do you mean, with a callback function for the FileData
>> object to be returned?  It sounds like what you are advocating is that this
>> method does not raise an exception, but the FileData object is either valid
>> or null.  If so, I think that sounds sensible.  Have I understood you
>> correctly?
>>
>> -- A*
>>
>>
>
>
> Not quite.  My proposal is that:
> 1) no exception is thrown
> 2) a non-null FileData object is always returned
> The parameters of the returned FileData object are only validated when you
> try to use the FileData object.
> Note: it is possible that we may still wish to throw an exception if the
> inputs to slice can be determined to be invalid without requiring a
> filesystem 'stat' call.  For example, if either the offset or length is
> negative, then clearly we could consider the slice invalid.

Why not stat the file when the File object is created? That always
happens in a asynchronous manner (so far drag'n'drop and <input
type=file>).

/ Jonas

Received on Friday, 2 October 2009 18:26:21 UTC