chromium/third_party/closure_compiler/externs/file_system_provider.js

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file was generated by:
//   tools/json_schema_compiler/compiler.py.
// NOTE: The format of types has changed. 'FooType' is now
//   'chrome.fileSystemProvider.FooType'.
// Please run the closure compiler before committing changes.
// See https://chromium.googlesource.com/chromium/src/+/main/docs/closure_compilation.md

/**
 * @fileoverview Externs generated from namespace: fileSystemProvider
 * @externs
 */

/** @const */
chrome.fileSystemProvider = {};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-ProviderError
 */
chrome.fileSystemProvider.ProviderError = {
  OK: 'OK',
  FAILED: 'FAILED',
  IN_USE: 'IN_USE',
  EXISTS: 'EXISTS',
  NOT_FOUND: 'NOT_FOUND',
  ACCESS_DENIED: 'ACCESS_DENIED',
  TOO_MANY_OPENED: 'TOO_MANY_OPENED',
  NO_MEMORY: 'NO_MEMORY',
  NO_SPACE: 'NO_SPACE',
  NOT_A_DIRECTORY: 'NOT_A_DIRECTORY',
  INVALID_OPERATION: 'INVALID_OPERATION',
  SECURITY: 'SECURITY',
  ABORT: 'ABORT',
  NOT_A_FILE: 'NOT_A_FILE',
  NOT_EMPTY: 'NOT_EMPTY',
  INVALID_URL: 'INVALID_URL',
  IO: 'IO',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-OpenFileMode
 */
chrome.fileSystemProvider.OpenFileMode = {
  READ: 'READ',
  WRITE: 'WRITE',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-ChangeType
 */
chrome.fileSystemProvider.ChangeType = {
  CHANGED: 'CHANGED',
  DELETED: 'DELETED',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-CommonActionId
 */
chrome.fileSystemProvider.CommonActionId = {
  SAVE_FOR_OFFLINE: 'SAVE_FOR_OFFLINE',
  OFFLINE_NOT_NECESSARY: 'OFFLINE_NOT_NECESSARY',
  SHARE: 'SHARE',
};

/**
 * @typedef {{
 *   providerName: string,
 *   id: string
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-CloudIdentifier
 */
chrome.fileSystemProvider.CloudIdentifier;

/**
 * @typedef {{
 *   versionTag: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-CloudFileInfo
 */
chrome.fileSystemProvider.CloudFileInfo;

/**
 * @typedef {{
 *   isDirectory: (boolean|undefined),
 *   name: (string|undefined),
 *   size: (number|undefined),
 *   modificationTime: (Date|undefined),
 *   mimeType: (string|undefined),
 *   thumbnail: (string|undefined),
 *   cloudIdentifier: (!chrome.fileSystemProvider.CloudIdentifier|undefined),
 *   cloudFileInfo: (!chrome.fileSystemProvider.CloudFileInfo|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-EntryMetadata
 */
chrome.fileSystemProvider.EntryMetadata;

/**
 * @typedef {{
 *   entryPath: string,
 *   recursive: boolean,
 *   lastTag: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-Watcher
 */
chrome.fileSystemProvider.Watcher;

/**
 * @typedef {{
 *   openRequestId: number,
 *   filePath: string,
 *   mode: !chrome.fileSystemProvider.OpenFileMode
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-OpenedFile
 */
chrome.fileSystemProvider.OpenedFile;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   displayName: string,
 *   writable: boolean,
 *   openedFilesLimit: number,
 *   openedFiles: !Array<!chrome.fileSystemProvider.OpenedFile>,
 *   supportsNotifyTag: (boolean|undefined),
 *   watchers: !Array<!chrome.fileSystemProvider.Watcher>
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-FileSystemInfo
 */
chrome.fileSystemProvider.FileSystemInfo;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   displayName: string,
 *   writable: (boolean|undefined),
 *   openedFilesLimit: (number|undefined),
 *   supportsNotifyTag: (boolean|undefined),
 *   persistent: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-MountOptions
 */
chrome.fileSystemProvider.MountOptions;

/**
 * @typedef {{
 *   fileSystemId: string
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-UnmountOptions
 */
chrome.fileSystemProvider.UnmountOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-UnmountRequestedOptions
 */
chrome.fileSystemProvider.UnmountRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   entryPath: string,
 *   isDirectory: boolean,
 *   name: boolean,
 *   size: boolean,
 *   modificationTime: boolean,
 *   mimeType: boolean,
 *   thumbnail: boolean,
 *   cloudIdentifier: boolean,
 *   cloudFileInfo: boolean
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-GetMetadataRequestedOptions
 */
chrome.fileSystemProvider.GetMetadataRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   entryPaths: !Array<string>
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-GetActionsRequestedOptions
 */
chrome.fileSystemProvider.GetActionsRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   directoryPath: string,
 *   isDirectory: boolean,
 *   name: boolean,
 *   size: boolean,
 *   modificationTime: boolean,
 *   mimeType: boolean,
 *   thumbnail: boolean
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-ReadDirectoryRequestedOptions
 */
chrome.fileSystemProvider.ReadDirectoryRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   filePath: string,
 *   mode: !chrome.fileSystemProvider.OpenFileMode
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-OpenFileRequestedOptions
 */
chrome.fileSystemProvider.OpenFileRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   openRequestId: number
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-CloseFileRequestedOptions
 */
chrome.fileSystemProvider.CloseFileRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   openRequestId: number,
 *   offset: number,
 *   length: number
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-ReadFileRequestedOptions
 */
chrome.fileSystemProvider.ReadFileRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   directoryPath: string,
 *   recursive: boolean
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-CreateDirectoryRequestedOptions
 */
chrome.fileSystemProvider.CreateDirectoryRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   entryPath: string,
 *   recursive: boolean
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-DeleteEntryRequestedOptions
 */
chrome.fileSystemProvider.DeleteEntryRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   filePath: string
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-CreateFileRequestedOptions
 */
chrome.fileSystemProvider.CreateFileRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   sourcePath: string,
 *   targetPath: string
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-CopyEntryRequestedOptions
 */
chrome.fileSystemProvider.CopyEntryRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   sourcePath: string,
 *   targetPath: string
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-MoveEntryRequestedOptions
 */
chrome.fileSystemProvider.MoveEntryRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   filePath: string,
 *   length: number
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-TruncateRequestedOptions
 */
chrome.fileSystemProvider.TruncateRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   openRequestId: number,
 *   offset: number,
 *   data: ArrayBuffer
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-WriteFileRequestedOptions
 */
chrome.fileSystemProvider.WriteFileRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   operationRequestId: number
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-AbortRequestedOptions
 */
chrome.fileSystemProvider.AbortRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   entryPath: string,
 *   recursive: boolean
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-AddWatcherRequestedOptions
 */
chrome.fileSystemProvider.AddWatcherRequestedOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   entryPath: string,
 *   recursive: boolean
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-RemoveWatcherRequestedOptions
 */
chrome.fileSystemProvider.RemoveWatcherRequestedOptions;

/**
 * @typedef {{
 *   id: string,
 *   title: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-Action
 */
chrome.fileSystemProvider.Action;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number,
 *   entryPaths: !Array<string>,
 *   actionId: string
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-ExecuteActionRequestedOptions
 */
chrome.fileSystemProvider.ExecuteActionRequestedOptions;

/**
 * @typedef {{
 *   entryPath: string,
 *   changeType: !chrome.fileSystemProvider.ChangeType,
 *   cloudFileInfo: (!chrome.fileSystemProvider.CloudFileInfo|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-Change
 */
chrome.fileSystemProvider.Change;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   observedPath: string,
 *   recursive: boolean,
 *   changeType: !chrome.fileSystemProvider.ChangeType,
 *   changes: (!Array<!chrome.fileSystemProvider.Change>|undefined),
 *   tag: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-NotifyOptions
 */
chrome.fileSystemProvider.NotifyOptions;

/**
 * @typedef {{
 *   fileSystemId: string,
 *   requestId: number
 * }}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#type-ConfigureRequestedOptions
 */
chrome.fileSystemProvider.ConfigureRequestedOptions;

/**
 * <p>Mounts a file system with the given <code>fileSystemId</code> and
 * <code>displayName</code>. <code>displayName</code> will be shown in the left
 * panel of the Files app. <code>displayName</code> can contain any characters
 * including '/', but cannot be an empty string. <code>displayName</code> must
 * be descriptive but doesn't have to be unique. The <code>fileSystemId</code>
 * must not be an empty string.</p><p>Depending on the type of the file system
 * being mounted, the <code>source</code> option must be set
 * appropriately.</p><p>In case of an error, $(ref:runtime.lastError) will be
 * set with a corresponding error code.</p>
 * @param {!chrome.fileSystemProvider.MountOptions} options
 * @param {function(): void=} callback A generic result callback to indicate
 *     success or failure.
 * @see https://developer.chrome.com/extensions/fileSystemProvider#method-mount
 */
chrome.fileSystemProvider.mount = function(options, callback) {};

/**
 * <p>Unmounts a file system with the given <code>fileSystemId</code>. It must
 * be called after $(ref:onUnmountRequested) is invoked. Also, the providing
 * extension can decide to perform unmounting if not requested (eg. in case of
 * lost connection, or a file error).</p><p>In case of an error,
 * $(ref:runtime.lastError) will be set with a corresponding error code.</p>
 * @param {!chrome.fileSystemProvider.UnmountOptions} options
 * @param {function(): void=} callback A generic result callback to indicate
 *     success or failure.
 * @see https://developer.chrome.com/extensions/fileSystemProvider#method-unmount
 */
chrome.fileSystemProvider.unmount = function(options, callback) {};

/**
 * Returns all file systems mounted by the extension.
 * @param {function(!Array<!chrome.fileSystemProvider.FileSystemInfo>): void}
 *     callback Callback to receive the result of $(ref:getAll) function.
 * @see https://developer.chrome.com/extensions/fileSystemProvider#method-getAll
 */
chrome.fileSystemProvider.getAll = function(callback) {};

/**
 * Returns information about a file system with the passed
 * <code>fileSystemId</code>.
 * @param {string} fileSystemId
 * @param {function(!chrome.fileSystemProvider.FileSystemInfo): void} callback
 *     Callback to receive the result of $(ref:get) function.
 * @see https://developer.chrome.com/extensions/fileSystemProvider#method-get
 */
chrome.fileSystemProvider.get = function(fileSystemId, callback) {};

/**
 * <p>Notifies about changes in the watched directory at
 * <code>observedPath</code> in <code>recursive</code> mode. If the file system
 * is mounted with <code>supportsNotifyTag</code>, then <code>tag</code> must be
 * provided, and all changes since the last notification always reported, even
 * if the system was shutdown. The last tag can be obtained with
 * $(ref:getAll).</p><p>To use, the <code>file_system_provider.notify</code>
 * manifest option must be set to true.</p><p>Value of <code>tag</code> can be
 * any string which is unique per call, so it's possible to identify the last
 * registered notification. Eg. if the providing extension starts after a
 * reboot, and the last registered notification's tag is equal to "123", then it
 * should call $(ref:notify) for all changes which happened since the change
 * tagged as "123". It cannot be an empty string.</p><p>Not all providers are
 * able to provide a tag, but if the file system has a changelog, then the tag
 * can be eg. a change number, or a revision number.</p><p>Note that if a parent
 * directory is removed, then all descendant entries are also removed, and if
 * they are watched, then the API must be notified about the fact. Also, if a
 * directory is renamed, then all descendant entries are in fact removed, as
 * there is no entry under their original paths anymore.</p><p>In case of an
 * error, $(ref:runtime.lastError) will be set will a corresponding error
 * code.</p>
 * @param {!chrome.fileSystemProvider.NotifyOptions} options
 * @param {function(): void=} callback A generic result callback to indicate
 *     success or failure.
 * @see https://developer.chrome.com/extensions/fileSystemProvider#method-notify
 */
chrome.fileSystemProvider.notify = function(options, callback) {};

/**
 * Raised when unmounting for the file system with the <code>fileSystemId</code>
 * identifier is requested. In the response, the $(ref:unmount) API method must
 * be called together with <code>successCallback</code>. If unmounting is not
 * possible (eg. due to a pending operation), then <code>errorCallback</code>
 * must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onUnmountRequested
 */
chrome.fileSystemProvider.onUnmountRequested;

/**
 * Raised when metadata of a file or a directory at <code>entryPath</code> is
 * requested. The metadata must be returned with the
 * <code>successCallback</code> call. In case of an error,
 * <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onGetMetadataRequested
 */
chrome.fileSystemProvider.onGetMetadataRequested;

/**
 * Raised when a list of actions for a set of files or directories at
 * <code>entryPaths</code> is requested. All of the returned actions must be
 * applicable to each entry. If there are no such actions, an empty array should
 * be returned. The actions must be returned with the
 * <code>successCallback</code> call. In case of an error,
 * <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onGetActionsRequested
 */
chrome.fileSystemProvider.onGetActionsRequested;

/**
 * Raised when contents of a directory at <code>directoryPath</code> are
 * requested. The results must be returned in chunks by calling the
 * <code>successCallback</code> several times. In case of an error,
 * <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onReadDirectoryRequested
 */
chrome.fileSystemProvider.onReadDirectoryRequested;

/**
 * Raised when opening a file at <code>filePath</code> is requested. If the file
 * does not exist, then the operation must fail. Maximum number of files opened
 * at once can be specified with <code>MountOptions</code>.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onOpenFileRequested
 */
chrome.fileSystemProvider.onOpenFileRequested;

/**
 * Raised when opening a file previously opened with <code>openRequestId</code>
 * is requested to be closed.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onCloseFileRequested
 */
chrome.fileSystemProvider.onCloseFileRequested;

/**
 * Raised when reading contents of a file opened previously with
 * <code>openRequestId</code> is requested. The results must be returned in
 * chunks by calling <code>successCallback</code> several times. In case of an
 * error, <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onReadFileRequested
 */
chrome.fileSystemProvider.onReadFileRequested;

/**
 * Raised when creating a directory is requested. The operation must fail with
 * the EXISTS error if the target directory already exists. If
 * <code>recursive</code> is true, then all of the missing directories on the
 * directory path must be created.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onCreateDirectoryRequested
 */
chrome.fileSystemProvider.onCreateDirectoryRequested;

/**
 * Raised when deleting an entry is requested. If <code>recursive</code> is
 * true, and the entry is a directory, then all of the entries inside must be
 * recursively deleted as well.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onDeleteEntryRequested
 */
chrome.fileSystemProvider.onDeleteEntryRequested;

/**
 * Raised when creating a file is requested. If the file already exists, then
 * <code>errorCallback</code> must be called with the <code>"EXISTS"</code>
 * error code.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onCreateFileRequested
 */
chrome.fileSystemProvider.onCreateFileRequested;

/**
 * Raised when copying an entry (recursively if a directory) is requested. If an
 * error occurs, then <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onCopyEntryRequested
 */
chrome.fileSystemProvider.onCopyEntryRequested;

/**
 * Raised when moving an entry (recursively if a directory) is requested. If an
 * error occurs, then <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onMoveEntryRequested
 */
chrome.fileSystemProvider.onMoveEntryRequested;

/**
 * Raised when truncating a file to a desired length is requested. If an error
 * occurs, then <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onTruncateRequested
 */
chrome.fileSystemProvider.onTruncateRequested;

/**
 * Raised when writing contents to a file opened previously with
 * <code>openRequestId</code> is requested.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onWriteFileRequested
 */
chrome.fileSystemProvider.onWriteFileRequested;

/**
 * Raised when aborting an operation with <code>operationRequestId</code> is
 * requested. The operation executed with <code>operationRequestId</code> must
 * be immediately stopped and <code>successCallback</code> of this abort request
 * executed. If aborting fails, then <code>errorCallback</code> must be called.
 * Note, that callbacks of the aborted operation must not be called, as they
 * will be ignored. Despite calling <code>errorCallback</code>, the request may
 * be forcibly aborted.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onAbortRequested
 */
chrome.fileSystemProvider.onAbortRequested;

/**
 * Raised when showing a configuration dialog for <code>fileSystemId</code> is
 * requested. If it's handled, the
 * <code>file_system_provider.configurable</code> manfiest option must be set to
 * true.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onConfigureRequested
 */
chrome.fileSystemProvider.onConfigureRequested;

/**
 * Raised when showing a dialog for mounting a new file system is requested. If
 * the extension/app is a file handler, then this event shouldn't be handled.
 * Instead <code>app.runtime.onLaunched</code> should be handled in order to
 * mount new file systems when a file is opened. For multiple mounts, the
 * <code>file_system_provider.multiple_mounts</code> manifest option must be set
 * to true.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onMountRequested
 */
chrome.fileSystemProvider.onMountRequested;

/**
 * Raised when setting a new directory watcher is requested. If an error occurs,
 * then <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onAddWatcherRequested
 */
chrome.fileSystemProvider.onAddWatcherRequested;

/**
 * Raised when the watcher should be removed. If an error occurs, then
 * <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onRemoveWatcherRequested
 */
chrome.fileSystemProvider.onRemoveWatcherRequested;

/**
 * Raised when executing an action for a set of files or directories is\
 * requested. After the action is completed, <code>successCallback</code> must
 * be called. On error, <code>errorCallback</code> must be called.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onExecuteActionRequested
 */
chrome.fileSystemProvider.onExecuteActionRequested;