- From: Arthur Barstow <art.barstow@gmail.com>
- Date: Tue, 21 Oct 2014 17:01:48 -0400
- To: WebApps WG <public-webapps@w3.org>
On 10/21/14 4:36 PM, Ali Alabbas wrote: > > Hello, > > I'm with the IE Platform team at Microsoft. We have a few comments on > the latest editor's draft of the newly proposed FileSystem API [1]. > I believe [1] is Arun's <http://w3c.github.io/filesystem-api/Overview.html>. > 1.1 Use cases (3. Audio/Photo editor with offline access or local > cache for speed) > > * Edited files should be accessible by other client-side applications > > - Having the sandboxed file system share its contents between all apps > would allow apps to tamper with the files of another app. This could > result in corrupted files and perhaps an invalid state for some apps > that expect certain contents to exist in a file. This makes us wonder: > should we warn users about files that are being opened and written to? > If an app is just doing a read, can it open a file or directory > without the user's permission, or could this pose a possible issue as > well? Also, is the Quota Management API going to be a dependency? It's > unclear what we would do with regards to requesting permission to > access files. Will this spec be responsible for defining what > questions/permission inquiries are presented and when they are > presented to the user? For example, what happens when one file is > locked for use by a different application? Is the user notified and > given the option to open a read-only copy of that file? > > 3. The Directory Interface > > * Change events > > - I would like to revisit the discussion on apps getting notifications > of changes to files/directories. There are many scenarios where an > application would want to react to renames/moves of a file/directory. > There would also be value in being notified of a change to a > directory's structure. If an app has a file browser that allows a user > to select files and/or directories and another app makes changes to > the sandboxed filesystem, then it would be expected that the first app > should be notified and would be able to refresh its directory tree. > Otherwise it would require the user to somehow force a refresh which > would not be a good user experience since the user would expect the > file browser to update on its own. > > * removeDeep() & move() > > - Do these support links or junctions? If not, what is the expected > behavior? > > * enumerate() > > - It would be useful to have pre-filtering support for the following: > file/directory, ranges, wildcard search. Currently we would be forced > to enumerate the entire set and manually filter out the items we want > from the result set. > > - Callers often know exactly whether or not they want to enumerate > files or folders. For example, an image upload service may only be > interested in the files present in a directory rather than all of its > directories. Perhaps it would be useful to have enumerateFiles() and > enumerateDirectories() for this purpose? Or we could have another > argument for enumerate() that is an enum ("directory", "file"). > > - Supporting optimized pagination of large directories. We could have > arguments for a starting index and length we would be able to specify > a range of items to retrieve within the result set. > > - Supporting the wildcard character to pre-filter a list of > files/directories (e.g. *.jpg). > > 4. The FileHandle Interface > > * FileHandles > > - Is this basically going to be the first to get the handle gets to > use it and all subsequent calls need to wait for the file handle to > become available again? Are there more details about the locking model > used here? > > * Auto-closing of FileHandles > > - This may cause confusion as it does not match the common developer > mental model of a file handle which is “opened” and then available for > use until it's “closed”. Perhaps it would be advantageous to have an > explicit close function as part of the FileHandle interface? With the > current behavior there can be overhead with the unintended closure of > the FileHandle that would require a developer to continuously > open/close a FileHandle. The currently defined behavior assumes that a > developer is done with all their file manipulations when they have > completed a promise chain. However, a developer may want to keep the > FileHandle open to be used elsewhere at some other point in time that > is not related to the current promise chain. An example of the > usefulness of having an explicit close function is if you were to > implement a word processor and wanted to lock down the file that it > currently has open for the period of its editing. This way you are > free to continue operating on that file for the duration that it is > open, protecting the file from other processes, and not having to > undergo the costly setup and teardown of a file handle. > > * AbortableProgressPromise > > - It is not clear how a developer would define the abort callback of > an AbortableProgressPromise. It seems that the user agent would be > responsible for setting the abort callback since it instantiates and > returns the AbortableProgressPromise. > > 5. The FileHandleWritable Interface > > * write() & flush() > > - It might be useful to have support for “transacted” streams where > the caller can write to a copy of the file and then have it atomically > replaced: swap the old file with the new one and then delete the old > file. This reduces the opportunity for an app crash to lead to a > corrupted file on disk; it would be corrupted without transacted > streams if the app crashes during save. The transacted streams could > be handled during the (automated) flush where the user agent would > write to a temp file and atomically replace the intended file. > > * flush() > > - This is costly functionality to expose and is likely to be overused > by callers. It would be beneficial to automatically flush changes to > disk by allowing the default file write behavior by the OS. For > example, on Windows, we would leave it up to the filesystem cache to > determine the best time to flush to disk. This is non-deterministic > from the app's point of view, but the only time it is a potential > problem is when there's a hard power-off. Most apps should not be > concerned with this; only apps that have very high data reliability > requirements would need the granular control of flushing to disk. In > those cases a developer should use IndexedDB. So we should consider > obscuring this functionality since it's not a common requirement and > has a performance impact if it's widely used. > > 6. FileSystem Configuration Parameters > > * Dictionary DestinationDict > > - The DestinationDict seems to exist to facilitate the renaming of a > directory in conjunction with a move. However, the same operation is > done differently for files which makes the functionality non-uniform. > Perhaps we can add a rename() function to make it more intuitive? > > Thank you, > > Ali >
Received on Tuesday, 21 October 2014 21:02:30 UTC