| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| [DartPackage="mojo_services"] |
| module mojo.files; |
| |
| import "files/public/interfaces/file.mojom"; |
| import "files/public/interfaces/types.mojom"; |
| |
| // This interface provides access to a directory in a "file system", providing |
| // operations such as creating/opening/removing/renaming files/directories |
| // within it. Note that all relative |path| arguments are relative to "this" |
| // directory (i.e., "this" directory functions as the current working directory |
| // for the various operations). |
| // TODO(vtl): Paths may be relative; should they allowed to be absolute? |
| // (Currently not.) |
| interface Directory { |
| // Operations about "this" |Directory|: |
| |
| // Reads the contents of this directory. |
| // TODO(vtl): Clarify error codes versus |directory_contents|. |
| Read() => (Error error, array<DirectoryEntry>? directory_contents); |
| |
| // Gets information about this directory. On success, |file_information| is |
| // non-null and will contain this information. |
| Stat() => (Error error, FileInformation? file_information); |
| |
| // Updates this directory's atime and/or mtime to the time specified by |
| // |atime| (or |mtime|, respectively), which may also indicate "now". If |
| // |atime| or |mtime| is null, then the corresponding time is not modified. |
| Touch(TimespecOrNow? atime, TimespecOrNow? mtime) => (Error error); |
| |
| // Operations *in* "this" |Directory|: |
| |
| // Opens the file specified by |path| with the given |open_flags|. |file| is |
| // optional, mainly for consistency with |OpenDirectory()| (but may be useful, |
| // together with |kOpenFlagCreate|, for "touching" a file). |
| OpenFile(string path, File&? file, uint32 open_flags) |
| => (Error error); |
| |
| // Opens the directory specified by |path|. |directory| is optional, so that |
| // this may be used as a simple "mkdir()" with |kOpenFlagCreate|. |
| OpenDirectory(string path, |
| Directory&? directory, |
| uint32 open_flags) => (Error error); |
| |
| // Renames/moves the file/directory given by |path| to |new_path|. |
| Rename(string path, string new_path) => (Error error); |
| |
| // Deletes the given path, which may be a file or a directory (see |
| // |kDeleteFlag...| for details). |
| Delete(string path, uint32 delete_flags) => (Error error); |
| |
| // TODO(vtl): directory "streaming"? |
| // TODO(vtl): "make root" (i.e., prevent cd-ing, etc., to parent); note that |
| // this would require a much more complicated implementation (e.g., it needs |
| // to be "inherited" by OpenDirectory(), and the enforcement needs to be valid |
| // even if the opened directory is subsequently moved -- e.g., closer to the |
| // "root") |
| // TODO(vtl): Add a "watch"? |
| // TODO(vtl): Should we have a "close" method? |
| // TODO(vtl): Add Dup() and Reopen() (like File)? |
| }; |