chromium/components/remote_cocoa/common/select_file_dialog.mojom

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

module remote_cocoa.mojom;

import "mojo/public/mojom/base/file_path.mojom";
import "mojo/public/mojom/base/string16.mojom";

// The type of dialog to open. This corresponds to the subset of
// ui::SelectFileDialog::Type that is used on macOS.
enum SelectFileDialogType {
  kFolder,
  kUploadFolder,
  kExistingFolder,
  kOpenFile,
  kOpenMultiFile,
  kSaveAsFile
};

// Information about the file extensions to be shown in the dialog.
struct SelectFileTypeInfo {
  // The list of allowed extensions.
  array<array<string>> extensions;

  // Override of system descriptions of specified extensions.
  array<mojo_base.mojom.String16> extension_description_overrides;

  // Specifies whether or not there is be a filter added for all files.
  bool include_all_files;

  // Specifies whether the (save) file dialog should keep the extension visible.
  bool keep_extension_visible;
};

// The interface to a file selection (Save As, Upload, etc) dialog.
interface SelectFileDialog {
  // Show the dialog, and issue a callback when it has completed.
  //
  // Sent parameters:
  //   `type`: The type of dialog to use.
  //   `title`: The title presented at the top of the file selection dialog.
  //   `file_path`: The default path for use when opening the dialog.
  //   `file_types`: The file types allowed for saving a file.
  //   `file_type_index`: The index within the `file_types` array to use for the
  //                      initial selection. NOTE: This is 1-based.
  //   `default_extension`: The default extension to use.
  //
  // Returned parameters:
  //   `was_cancelled`: Whether or not the user canceled the dialog.
  //   `files`: The files that the user selected. If this was not a
  //            multiple-selection dialog, this will have at most one item.
  //   `index`: The index within the `file_types` array that the user selected.
  //            NOTE: This is 1-based.
  //   `file_tags`: The file tags that the user selected to apply to the file
  //                once the file is saved.
  Show(SelectFileDialogType type,
       mojo_base.mojom.String16 title,
       mojo_base.mojom.FilePath file_path,
       SelectFileTypeInfo? file_types,
       int32 file_type_index,
       string default_extension) => (bool was_cancelled,
                                     array<mojo_base.mojom.FilePath> files,
                                     int32 index,
                                     array<string> file_tags);
};