// 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 "ui/gfx/image/mojom/image.mojom";
// These interfaces let Lacros-chrome handle ARC's right click and smart
// selection.
// TODO(crbug.com/40204801): It should be migrated to AppService in the future.
// The status in ash-chrome side. Return with the result.
[Stable, Extensible]
enum RequestActivityIconsStatus {
// Connection established successfully in ash-chrome.
kSuccess,
// Ended with error to connect to ARC in ash-chrome.
[Default] kArcNotAvailable,
};
[Stable, Extensible]
enum RequestTextSelectionActionsStatus {
// Connection established successfully in ash-chrome.
kSuccess,
// Ended with error to connect to ARC in ash-chrome.
[Default] kArcNotAvailable,
};
[Stable, Extensible]
enum RequestUrlHandlerListStatus {
// Connection established successfully in ash-chrome.
kSuccess,
// Ended with error to connect to ARC in ash-chrome.
[Default]kArcNotAvailable,
};
[Stable, Extensible]
enum IsInstallableResult {
// The app is available for installation in ARC.
kInstallable,
// The app is not available for installation in ARC or is already installed.
kNotInstallable,
// ARC is not running (e.g. disabled).
kArcIsNotRunning,
// ARC mojo API version is too low.
kArcIsTooOld,
};
// This struct reflects components/arc/mojom/intent_common.mojom.
// Describes an activity.
[Stable]
struct ActivityName {
string package_name@0;
// may be null to indicate any activity within package
string? activity_name@1;
};
// This struct reflects components/arc/mojom/app.mojom
// Describes the raw icon png data published by an Android application.
[Stable]
struct RawIconPngData {
// True if the icon is an adaptive icon, or false otherwise.
bool is_adaptive_icon@0;
// The raw icon for the non-adaptive icon, or the generated standard icon done
// by the ARC side for the adaptive icon.
array<uint8>? icon_png_data@1;
// The foreground image for the adaptive icon.
array<uint8>? foreground_icon_png_data@2;
// The background image for the adaptive icon.
array<uint8>? background_icon_png_data@3;
};
// This struct reflects components/arc/mojom/scale_factor.mojom.
// Duplicates ui::ResourceScaleFactor enum in order to be accessible on
// Lacros side.
[Stable, Extensible]
enum ScaleFactor {
// Some numbers are missing because we removed deprecated values.
SCALE_FACTOR_NONE = 0,
SCALE_FACTOR_100P = 1,
SCALE_FACTOR_200P = 7,
SCALE_FACTOR_300P = 9,
};
// This struct reflects components/arc/mojom/intent_helper.mojom
// Describes an icon for the activity.
[Stable]
struct ActivityIcon {
ActivityName activity@0;
uint32 width@1; // in px
uint32 height@2; // in px
array<uint8> icon@3; // in BGRA8888 format
RawIconPngData? icon_png_data@4;
};
// Describes a package that can handle an intent.
// Removed unnecessary perameters for Lacros from IntentHandlerInfo declared in
// components/arc/mojom/intent_helper.mojom.
// Next version: 2
[Stable]
struct IntentHandlerInfo {
string name@0;
string package_name@1;
string activity_name@2; // A hint for retrieving the package's icon.
[MinVersion=1] bool is_preferred@3;
[MinVersion=1] string? fallback_url@4;
};
// Describes an action that can handle an intent.
// Removed unnecessary parameters: |clip_data_uri| and |uri_components| for
// Lacros from IntentInfo declared in components/arc/mojom/intent_helper.mojom.
[Stable]
struct IntentInfo {
string action@0;
array<string>? categories@1;
string? data@2; // URI
string? type@3; // explicit MIME type for data
bool ui_bypassed@4; // Whether or not the user saw the UI.
// Optional string extras. These are the key-value pairs stored in android
// intents to carry additional data. See:
// https://developer.android.com/reference/android/content/Intent#putExtra(java.lang.String,%20java.lang.String)
map<string, string>? extras@5;
};
// Describe an action given by the android text selection delegate (e.g. open
// maps).
[Stable]
struct TextSelectionAction {
// App ID of the package.
// This parameter is not set in arc::mojom::TextSelectionAction, but required
// in Lacros since Lacros cannot get app id from ActivityName.
string app_id@0;
// Icon of the package.
// This parameter is different from arc::mojom::TextSelectionAction.icon.
// Generate ImageSkia icon from RawIconPngData in ash-chrome, and send it to
// lacros-chrome as a ImageSkia.
gfx.mojom.ImageSkia icon@1;
// The activity and package name of the component that handle the intent.
ActivityName activity@2;
// The title of the action that will be shown in the UI, e.g. "Map", "Call",
// "Open".
string title@3;
// The intent to launch when the action is clicked.
IntentInfo action_intent@4;
};
// Observe ARC.
// Next version: 1
// Next method id: 1
[Stable, Uuid="e0993657-e667-408c-9950-e08480fd8013"]
interface ArcObserver {
// Notified when ARC does so via arc::mojom::IntentHelperHost.
OnIconInvalidated@0(string package_name);
};
// Interacts with ARC.
// Next version: 5
// Next method id: 8
[Stable, Uuid="a39a22dd-2f5c-4c99-b0ea-d83d5b1c987f"]
interface Arc {
// Registers ArcObserver in Lacros-chrome to Ash-chrome
AddObserver@0(pending_remote<ArcObserver> observer);
// Requests 48dp * 48dp icons for the |activities| suitable for the
// |scale_factor| from Lacros-chrome to Ash-chrome. Ash-chrome will request
// icons to ARC and send back the result attained from ARC.
// An array of icon data and ARC connection status will be returned.
// If ash-chrome succeeded to access to ARC, return icon array with kSuccess.
// If not, return empty array with other status.
RequestActivityIcons@1(array<ActivityName> activities,
ScaleFactor scale_factor)
=> (array<ActivityIcon> icons,
[MinVersion=2] RequestActivityIconsStatus status);
// Requests a list of packages that can handle the URL from Lacros-chrome to
// Ash-chrome. Ash-chrome will request a handler list to ARC and send back
// the result attained from ARC.
// An array of IntentHandlerInfo will be returned.
// If ash-chrome succeeded to access to ARC, return handler list with
// kSuccess. If not, return empty list with other status.
RequestUrlHandlerList@2(string url)
=> (array<IntentHandlerInfo> handlers,
[MinVersion=2] RequestUrlHandlerListStatus status);
// Request generated actions that can handle |text| from Lacros-chrome to
// Ash-chrome. Ash-chrome will request acions to ARC and send back the result
// attained from ARC with generating Skia icons.
// An arrya of TextSelectionAction will be returned.
[MinVersion=2] RequestTextSelectionActions@4(string text,
ScaleFactor scale_factor)
=> (RequestTextSelectionActionsStatus status,
array<TextSelectionAction> actionos);
// Handles the URL by sending an ACTION_VIEW intent to the package. The
// most suitable activity for the URL within the package will be started.
[MinVersion=1] HandleUrl@3(string url, string package_name);
// Passes an intent to an activity and launch app.
[MinVersion=3] HandleIntent@5(IntentInfo intent, ActivityName activity);
// Sets the given package as a preferred package. The next time an ACTION_VIEW
// intent is sent with a URL that requires disambiguation, instead of opening
// the ResolverActivity, this package will be picked if it is on the list.
// When multiple packages are set as preferred, the most recent setting wins.
[MinVersion=3] AddPreferredPackage@6(string package_name);
// Checks if the |package_name| is available for installation.
// See |arc.mojom.AppInstance.IsInstallable|.
[MinVersion=4] IsInstallable@7(string package_name) =>
(IsInstallableResult result);
};