// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module crosapi.mojom;
import "mojo/public/mojom/base/file_path.mojom";
import "url/mojom/url.mojom";
// A struct representing a removable storage device.
[Stable]
struct RemovableStorageDevice {
// Identifier for the storage unit.
string storage_unit_id@0;
// Capacity of the device in bytes.
double capacity@1;
// Vendor of the device.
string vendor@2;
// Model of the device.
string model@3;
// True if the device is removable.
bool removable@4;
};
// The different stages of a write call.
[Stable, Extensible]
enum Stage {
[Default] kUnknown = 0,
kConfirmation = 1, /* prompting the user for confirmation */
kDownload = 2, /* downloading image if a remote image was requested */
kVerifyDownload = 3, /* verifying download matches image hash, if provided */
kUnzip = 4, /* extracting image from the downloaded zip file */
kWrite = 5, /* writing image to disk */
kVerifyWrite = 6, /* verifying written image matches the downloaded one */
};
// Interface for image writer client. Implemented by lacros-chrome. Used by
// ash-chrome to dispatch the extension events about the progress of writing
// to the Lacros extension that initiates the remote writing in ash.
[Stable, Uuid="18f14c56-9dea-480a-a7d1-9ef94c223f2e"]
interface ImageWriterClient {
// Dispatches OnWriteProgress event to the Lacros extension which initiates
// the write request.
DispatchOnWriteProgressEvent@0(
Stage stage, uint32 percent_complete);
// Dispatches OnWriteComplete event to the Lacros extension which initiates
// the write request.
DispatchOnWriteCompleteEvent@1();
// Dispatches OnWriteError event to the Lacros extension which initiates
// the write request. This reports the error occurred during the writing
// operation to the removable device.
DispatchOnWriteErrorEvent@2(
Stage stage, uint32 percent_complete, string error);
};
// Interface for image writer. Implemented by ash-chrome. Used by lacros-chrome
// to forward the removable disk operations to ash to support the image writer
// private extension API in Lacros.
[Stable, Uuid="13df62d0-b72c-46ed-9024-e8ee4a30590c"]
interface ImageWriter {
// Lists all the removable storage devices currently attached to the system.
// Returns removable devices if the operation succeeds.
ListRemovableStorageDevices@0()
=> (array<RemovableStorageDevice>? devices);
// Destroys the partition table of a removable disk specified by
// |storage_unit_id| from the request of a remote extension running in Lacros.
// |remote_client| will be used to dispatch writing progress events back
// to the remote extension which initiates DestroyPartitions.
// Returns an error defined by extensions::image_writer::error
// (see chrome/browser/extensions/api/image_writer_private/error_messages.cc)
// such as error::kOperationAlreadyInProgress or error::kDeviceWriteError,
// which are caught before performing writing operation on the removable
// device.
// |error| should be returned to the caller of the extension API
// imageWriterPrivate.destroyPartitions.
// Errors that occur while writing to the removable device are reported by
// ImageWriterClient::DispatchOnWriteErrorEvent api.
DestroyPartitions@1(string storage_unit_id,
pending_remote<ImageWriterClient> remote_client)
=> (string? error);
// Write an image downloaded from |image_url| to the disk specified by
// |storage_unit_id|. Compare the download with |image_hash| if the optional
// parameter is provided.
// |remote_client| will be used to dispatch writing progress events back
// to the remote extension which initiates WriteFromUrl.
// Returns an error defined by extensions::image_writer::error
// (see chrome/browser/extensions/api/image_writer_private/error_messages.cc)
// such as error::kOperationAlreadyInProgress or error::kDeviceWriteError,
// which are caught before performing writing operation on the removable
// device.
// |error| should be returned to the caller of the extension API
// imageWriterPrivate.writeFromUrl.
// Errors that occur while writing to the removable device are reported by
// ImageWriterClient::DispatchOnWriteErrorEvent api.
[MinVersion=1]
WriteFromUrl@2(string storage_unit_id, url.mojom.Url image_url,
string? image_hash, pending_remote<ImageWriterClient> remote_client)
=> (string? error);
// Write an image supplied by a local file with |image_path| to the
// disk specified by |storage_unit_id|.
// |remote_client| will be used to dispatch writing progress events back
// to the remote extension which initiates WriteFromFile.
// Returns an error defined by extensions::image_writer::error
// (see chrome/browser/extensions/api/image_writer_private/error_messages.cc)
// such as error::kOperationAlreadyInProgress or error::kDeviceWriteError,
// which are caught before performing writing operation on the removable
// device.
// |error| should be returned to the caller of the extension API
// imageWriterPrivate.writeFromFile.
// Errors that occur while writing to the removable device are reported by
// ImageWriterClient::DispatchOnWriteErrorEvent api.
[MinVersion=1]
WriteFromFile@3(string storage_unit_id, mojo_base.mojom.FilePath image_path,
pending_remote<ImageWriterClient> remote_client)
=> (string? error);
};