| Index: runtime/bin/directory.dart
 | 
| diff --git a/runtime/bin/directory.dart b/runtime/bin/directory.dart
 | 
| index 050f601e1727cb9eb85db7cfbb9b02c6f9ab458b..6cda57c8441a0995fc2160aedcc7114f8de03bfd 100644
 | 
| --- a/runtime/bin/directory.dart
 | 
| +++ b/runtime/bin/directory.dart
 | 
| @@ -20,11 +20,10 @@ interface Directory default _Directory {
 | 
|    Directory.current();
 | 
|  
 | 
|    /**
 | 
| -   * Check whether a directory with this name already exists. If the
 | 
| -   * operation completes successfully the callback is called with the
 | 
| -   * result. Otherwise [onError] is called.
 | 
| +   * Check whether a directory with this name already exists. Returns
 | 
| +   * a [:Future<bool>:] that completes with the result.
 | 
|     */
 | 
| -  void exists(void callback(bool exists));
 | 
| +  Future<bool> exists();
 | 
|  
 | 
|    /**
 | 
|     * Synchronously check whether a directory with this name already exists.
 | 
| @@ -32,11 +31,11 @@ interface Directory default _Directory {
 | 
|    bool existsSync();
 | 
|  
 | 
|    /**
 | 
| -   * Creates the directory with this name if it does not exist.  If
 | 
| -   * the directory is successfully created the callback is
 | 
| -   * called. Otherwise [onError] is called.
 | 
| +   * Creates the directory with this name if it does not
 | 
| +   * exist. Returns a [:Future<Directory>:] that completes with this
 | 
| +   * directory once it has been created.
 | 
|     */
 | 
| -  void create(void callback());
 | 
| +  Future<Directory> create();
 | 
|  
 | 
|    /**
 | 
|     * Synchronously creates the directory with this name if it does not exist.
 | 
| @@ -51,36 +50,26 @@ interface Directory default _Directory {
 | 
|     * directory name.  If the path is the empty string, a default
 | 
|     * system temp directory and name are used for the template.
 | 
|     *
 | 
| -   * The path is modified to be the path of the new directory.  After
 | 
| -   * the new directory is created, and the path modified, the callback
 | 
| -   * will be called.  The error handler is called if the temporary
 | 
| -   * directory cannot be created.
 | 
| +   * Returns a [:Future<Directory>:] that completes with the newly
 | 
| +   * created temporary directory.
 | 
|     */
 | 
| -  void createTemp(void callback());
 | 
| +  Future<Directory> createTemp();
 | 
|  
 | 
|    /**
 | 
|     * Synchronously creates a temporary directory with a name based on the
 | 
|     * current path. This name and path is used as a template, and additional
 | 
|     * characters are appended to it by the call to make a unique directory name.
 | 
|     * If the path is the empty string, a default system temp directory and name
 | 
| -   * are used for the template.
 | 
| -   * The path is modified to be the path of the new directory.
 | 
| +   * are used for the template. Returns the newly created temporary directory.
 | 
|     */
 | 
| -  void createTempSync();
 | 
| +  Directory createTempSync();
 | 
|  
 | 
|    /**
 | 
|     * Deletes the directory with this name. The directory must be
 | 
| -   * empty. If the operation completes successfully the callback is
 | 
| -   * called. Otherwise [onError] is called.
 | 
| +   * empty. Returns a [:Future<Directory>:] that completes with
 | 
| +   * this directory when the deletion is done.
 | 
|     */
 | 
| -  void delete(void callback());
 | 
| -
 | 
| -  /**
 | 
| -   * Deletes this directory and all sub-directories and files in the
 | 
| -   * directories. If the operation completes successfully the callback
 | 
| -   * is called. Otherwise [onError] is called.
 | 
| -   */
 | 
| -  void deleteRecursively(void callback());
 | 
| +  Future<Directory> delete();
 | 
|  
 | 
|    /**
 | 
|     * Synchronously deletes the directory with this name. The directory
 | 
| @@ -90,6 +79,13 @@ interface Directory default _Directory {
 | 
|    void deleteSync();
 | 
|  
 | 
|    /**
 | 
| +   * Deletes this directory and all sub-directories and files in the
 | 
| +   * directories. Returns a [:Future<Directory>:] that completes with
 | 
| +   * this directory when the deletion is done.
 | 
| +   */
 | 
| +  Future<Directory> deleteRecursively();
 | 
| +
 | 
| +  /**
 | 
|     * Synchronously deletes this directory and all sub-directories and
 | 
|     * files in the directories. Throws an exception if the directory
 | 
|     * cannot be deleted.
 | 
| @@ -98,49 +94,54 @@ interface Directory default _Directory {
 | 
|  
 | 
|    /**
 | 
|     * List the sub-directories and files of this
 | 
| -   * [Directory]. Optionally recurse into sub-directories. For each
 | 
| -   * file and directory, the file or directory handler is called. When
 | 
| -   * all directories have been listed the done handler is called. If
 | 
| -   * the listing operation is recursive, the error handler is called
 | 
| -   * if a subdirectory cannot be opened for listing.
 | 
| +   * [Directory]. Optionally recurse into sub-directories. Returns a
 | 
| +   * [DirectoryLister] object representing the active listing
 | 
| +   * operation. Handlers for files and directories should be
 | 
| +   * registered on this DirectoryLister object.
 | 
| +   */
 | 
| +  DirectoryLister list([bool recursive]);
 | 
| +
 | 
| +  /**
 | 
| +   * Gets the path of this directory.
 | 
|     */
 | 
| -  // TODO(ager): Should we change this to return an event emitting
 | 
| -  // DirectoryLister object. Alternatively, pass in one callback that
 | 
| -  // gets called with an indication of whether what it is called with
 | 
| -  // is a file, a directory or an indication that the listing is over.
 | 
| -  void list([bool recursive]);
 | 
| +  final String path;
 | 
| +}
 | 
|  
 | 
| +
 | 
| +/**
 | 
| + * A [DirectoryLister] represents an actively running listing operation.
 | 
| + *
 | 
| + * For each file and directory, the file or directory handler is
 | 
| + * called. When all directories have been listed the done handler is
 | 
| + * called. If the listing operation is recursive, the error handler is
 | 
| + * called if a subdirectory cannot be opened for listing.
 | 
| + */
 | 
| +interface DirectoryLister default _DirectoryLister {
 | 
|    /**
 | 
|     * Sets the directory handler that is called for all directories
 | 
| -   * during listing operations. The directory handler is called with
 | 
| -   * the full path of the directory.
 | 
| +   * during listing. The directory handler is called with the full
 | 
| +   * path of the directory.
 | 
|     */
 | 
|    void set onDir(void onDir(String dir));
 | 
|  
 | 
|    /**
 | 
| -   * Sets the handler that is called for all files during listing
 | 
| -   * operations. The file handler is called with the full path of the
 | 
| -   * file.
 | 
| +   * Sets the handler that is called for all files during listing. The
 | 
| +   * file handler is called with the full path of the file.
 | 
|     */
 | 
|    void set onFile(void onFile(String file));
 | 
|  
 | 
|    /**
 | 
| -   * Set the handler that is called when a directory listing is
 | 
| -   * done. The handler is called with an indication of whether or not
 | 
| -   * the listing operation completed.
 | 
| +   * Set the handler that is called when a listing is done. The
 | 
| +   * handler is called with an indication of whether or not the
 | 
| +   * listing operation completed.
 | 
|     */
 | 
|    void set onDone(void onDone(bool completed));
 | 
|  
 | 
|    /**
 | 
| -   * Sets the handler that is called if there is an error while listing
 | 
| -   * or creating directories.
 | 
| +   * Sets the handler that is called if there is an error while
 | 
| +   * listing directories.
 | 
|     */
 | 
|    void set onError(void onError(e));
 | 
| -
 | 
| -  /**
 | 
| -   * Gets the path of this directory.
 | 
| -   */
 | 
| -  final String path;
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |