blob: c37feac51b453779bb250610be8f1fa6cbe2ebf5 [file] [log] [blame]
// Copyright 2018 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.
module blink.mojom;
import "mojo/public/mojom/base/file_path.mojom";
import "mojo/public/mojom/base/string16.mojom";
import "mojo/public/mojom/base/time.mojom";
import "url/mojom/url.mojom";
// FileChooserParams stores arguments for an operation to open a file
// chooser dialog.
struct FileChooserParams {
enum Mode {
// Requires that the file exists before allowing the user to pick it.
kOpen,
// Like Open, but allows picking multiple files to open.
kOpenMultiple,
// Like Open, but selects a folder for upload. This mode returns multiple
// FileChooserFileInfo objects for descendant files, rather than a single
// FileChooserFileInfo for the selected directory.
kUploadFolder,
// Allows picking a nonexistent file, and prompts to overwrite if the file
// already exists. This is not for Blink but for PPAPI.
kSave,
};
Mode mode = kOpen;
// Title to be used for the dialog. This may be empty for the default title,
// which will be either "Open" or "Save" depending on the mode.
mojo_base.mojom.String16 title;
// Default file name to select in the dialog with kSave mode.
mojo_base.mojom.FilePath default_file_name;
// |selected_files| has filenames which a file upload control already
// selected. A FileChooser implementation may ask a user to select
// - removing a file from the selected files,
// - appending other files, or
// - replacing with other files
// before opening a file chooser dialog.
array<mojo_base.mojom.FilePath> selected_files;
// A list of valid lower-cased MIME types or file extensions specified
// in an |accept| attribute of an input element, such as "audio/*",
// "text/plain", ".mp3" ".txt". It is used to restrict selectable
// files to such types.
array<mojo_base.mojom.String16> accept_types;
// Whether the caller needs native file path or not.
// This may be false if the callsite can handle |file_system_url| field of
// resultant FileChooserFileInfo objects.
bool need_local_path = true;
// See http://www.w3.org/TR/html-media-capture for more information.
// If true, the data should be obtained using the device's camera/mic/etc.
bool use_media_capture = false;
// If non-empty, represents the URL of the requestor if the request was
// initiated by a document. Note that this value should be considered
// untrustworthy since it is specified by the sandbox and not validated.
url.mojom.Url requestor;
};
struct NativeFileInfo {
mojo_base.mojom.FilePath file_path;
// The display name of the file that is to be exposed as File.name in the
// DOM layer. If it is empty, the base part of the |file_path| is used.
mojo_base.mojom.String16 display_name;
};
struct FileSystemFileInfo {
url.mojom.Url url;
mojo_base.mojom.Time modification_time;
int64 length = 0;
};
// Represents a file selected by a user.
union FileChooserFileInfo {
NativeFileInfo native_file;
FileSystemFileInfo file_system;
};
// Represents the result of FileChooser::OpenFileChooser() or
// EnumerateChosenDirectory().
struct FileChooserResult {
// Selected files.
array<FileChooserFileInfo> files;
// Requested base directory.
// This is a user-chosen path in a case of OpenFileChooser() with
// mode=kUploadFolder.
// This is |directory_path| in a case of EnumerateChosenDirectory().
// Otherwise, it's an empty FilePath.
mojo_base.mojom.FilePath base_directory;
};
// An interface to receive file chooser requests.
interface FileChooser {
// Ask a user to choose files interactively. Null |result| is returned if the
// user canceled a dialog, or the request is not accepted.
OpenFileChooser(FileChooserParams params) => (FileChooserResult? result);
// Ask to enumerate files which are descendants of the specified directory.
// Null |result| is returned if the enumeration request is not accepted.
EnumerateChosenDirectory(mojo_base.mojom.FilePath directory_path)
=> (FileChooserResult? result);
};