Home | History | Annotate | Download | only in api
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Use the <code>chrome.syncFileSystem</code> API to save and synchronize data
      6 // on Google Drive. This API is NOT for accessing arbitrary user docs stored in
      7 // Google Drive. It provides app-specific syncable storage for offline and
      8 // caching usage so that the same data can be available across different
      9 // clients. Read <a href="app_storage.html">Manage Data</a> for more on using
     10 // this API.
     11 namespace syncFileSystem {
     12   enum SyncAction {
     13     added, updated, deleted
     14   };
     15 
     16   enum ServiceStatus {
     17     // The sync service is being initialized (e.g. restoring data from the
     18     // database, checking connectivity and authenticating to the service etc).
     19     initializing,
     20 
     21     // The sync service is up and running.
     22     running,
     23 
     24     // The sync service is not synchronizing files because the remote service
     25     // needs to be authenticated by the user to proceed.
     26     authentication_required,
     27 
     28     // The sync service is not synchronizing files because the remote service
     29     // is (temporarily) unavailable due to some recoverable errors, e.g.
     30     // network is offline, the remote service is down or not
     31     // reachable etc. More details should be given by |description| parameter
     32     // in OnServiceInfoUpdated (which could contain service-specific details).
     33     temporary_unavailable,
     34 
     35     // The sync service is disabled and the content will never sync.
     36     // (E.g. this could happen when the user has no account on
     37     // the remote service or the sync service has had an unrecoverable
     38     // error.)
     39     disabled
     40   };
     41 
     42   enum FileStatus {
     43     // Not conflicting and has no pending local changes.
     44     synced,
     45 
     46     // Has one or more pending local changes that haven't been synchronized.
     47     pending,
     48 
     49     // File conflicts with remote version and must be resolved manually.
     50     conflicting
     51   };
     52 
     53   enum SyncDirection {
     54     local_to_remote, remote_to_local
     55   };
     56 
     57   enum ConflictResolutionPolicy {
     58     last_write_win, manual
     59   };
     60 
     61   dictionary FileInfo {
     62     // <code>fileEntry</code> for the target file whose status has changed.
     63     // Contains name and path information of synchronized file.
     64     // On file deletion,
     65     // <code>fileEntry</code> information will still be available
     66     // but file will no longer exist.
     67     [instanceOf=Entry] object fileEntry;
     68 
     69     // Resulting file status after $ref:onFileStatusChanged event.
     70     // The status value can be <code>'synced'</code>,
     71     // <code>'pending'</code> or <code>'conflicting'</code>.
     72     FileStatus status;
     73 
     74     // Sync action taken to fire $ref:onFileStatusChanged event.
     75     // The action value can be
     76     // <code>'added'</code>, <code>'updated'</code> or <code>'deleted'</code>.
     77     // Only applies if status is <code>'synced'</code>.
     78     SyncAction? action;
     79 
     80     // Sync direction for the $ref:onFileStatusChanged event.
     81     // Sync direction value can be
     82     // <code>'local_to_remote'</code> or <code>'remote_to_local'</code>.
     83     // Only applies if status is <code>'synced'</code>.
     84     SyncDirection? direction;
     85   };
     86 
     87   dictionary FileStatusInfo {
     88     // One of the Entry's originally given to getFileStatuses.
     89     [instanceOf=Entry] object fileEntry;
     90 
     91     // The status value can be <code>'synced'</code>,
     92     // <code>'pending'</code> or <code>'conflicting'</code>.
     93     FileStatus status;
     94 
     95     // Optional error that is only returned if there was a problem retrieving
     96     // the FileStatus for the given file.
     97     DOMString? error;
     98   };
     99 
    100   dictionary StorageInfo {
    101     long usageBytes;
    102     long quotaBytes;
    103   };
    104 
    105   dictionary ServiceInfo {
    106     ServiceStatus state;
    107     DOMString description;
    108   };
    109 
    110   // A callback type for requestFileSystem.
    111   callback GetFileSystemCallback =
    112       void ([instanceOf=DOMFileSystem] object fileSystem);
    113 
    114   // A callback type for getUsageAndQuota.
    115   callback QuotaAndUsageCallback = void (StorageInfo info);
    116 
    117   // Returns true if operation was successful.
    118   callback DeleteFileSystemCallback = void (boolean result);
    119 
    120   // A callback type for getFileStatus.
    121   callback GetFileStatusCallback = void (FileStatus status);
    122 
    123   // A callback type for getFileStatuses.
    124   callback GetFileStatusesCallback = void (FileStatusInfo[] status);
    125 
    126   // A callback type for getServiceStatus.
    127   callback GetServiceStatusCallback = void (ServiceStatus status);
    128 
    129   // A callback type for getConflictResolutionPolicy.
    130   callback GetConflictResolutionPolicyCallback =
    131       void (ConflictResolutionPolicy policy);
    132 
    133   // A generic result callback to indicate success or failure.
    134   callback ResultCallback = void ();
    135 
    136   interface Functions {
    137     // Returns a syncable filesystem backed by Google Drive.
    138     // The returned <code>DOMFileSystem</code> instance can be operated on
    139     // in the same way as the Temporary and Persistant file systems (see
    140     // <a href="http://www.w3.org/TR/file-system-api/">http://www.w3.org/TR/file-system-api/</a>),
    141     // except that the filesystem object returned for Sync FileSystem does
    142     // <b>NOT</b> support directory operations (yet). You can get a list
    143     // of file entries by reading the root directory (by
    144     // <a href="http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-createReader-DirectoryReader">creating a new DirectoryReader</a>),
    145     // but cannot create a new directory in it.
    146     //
    147     // Calling this multiple times from
    148     // the same app will return the same handle to the same file system.
    149     static void requestFileSystem(GetFileSystemCallback callback);
    150 
    151     // Sets the default conflict resolution policy
    152     // for the <code>'syncable'</code> file storage for the app.
    153     // By default it is set to <code>'last_write_win'</code>.
    154     // When conflict resolution policy is set to <code>'last_write_win'</code>
    155     // conflicts for existing files are automatically resolved next time
    156     // the file is updated.
    157     // |callback| can be optionally given to know if the request has
    158     // succeeded or not.
    159     static void setConflictResolutionPolicy(
    160         ConflictResolutionPolicy policy,
    161         optional ResultCallback callback);
    162 
    163     // Gets the current conflict resolution policy.
    164     static void getConflictResolutionPolicy(
    165         GetConflictResolutionPolicyCallback callback);
    166 
    167     // Returns the current usage and quota in bytes
    168     // for the <code>'syncable'</code> file storage for the app.
    169     static void getUsageAndQuota([instanceOf=DOMFileSystem] object fileSystem,
    170                                  QuotaAndUsageCallback callback);
    171 
    172     // Returns the $ref:FileStatus for the given <code>fileEntry</code>.
    173     // The status value can be <code>'synced'</code>,
    174     // <code>'pending'</code> or <code>'conflicting'</code>.
    175     // Note that <code>'conflicting'</code> state only happens when
    176     // the service's conflict resolution policy is set to <code>'manual'</code>.
    177     static void getFileStatus([instanceOf=Entry] object fileEntry,
    178                               GetFileStatusCallback callback);
    179 
    180     // Returns each $ref:FileStatus for the given <code>fileEntry</code> array.
    181     // Typically called with the result from dirReader.readEntries().
    182     static void getFileStatuses(object[] fileEntries,
    183                                 GetFileStatusesCallback callback);
    184 
    185     // Returns the current sync backend status.
    186     static void getServiceStatus(GetServiceStatusCallback callback);
    187   };
    188 
    189   interface Events {
    190     // Fired when an error or other status change has happened in the
    191     // sync backend (for example, when the sync is temporarily disabled due to
    192     // network or authentication error).
    193     static void onServiceStatusChanged(ServiceInfo detail);
    194 
    195     // Fired when a file has been updated by the background sync service.
    196     static void onFileStatusChanged(FileInfo detail);
    197   };
    198 
    199 };
    200