| Index: components/arc/common/arc_bridge.mojom
|
| diff --git a/components/arc/common/arc_bridge.mojom b/components/arc/common/arc_bridge.mojom
|
| index af98bb1bee3a629026111de63436e2cca84febde..b2e00606e7ea1ca5ad7636ac5d63bec4541f91c9 100644
|
| --- a/components/arc/common/arc_bridge.mojom
|
| +++ b/components/arc/common/arc_bridge.mojom
|
| @@ -4,40 +4,274 @@
|
|
|
| module arc;
|
|
|
| -import "app.mojom";
|
| -import "input.mojom";
|
| -import "notifications.mojom";
|
| -import "power.mojom";
|
| -import "process.mojom";
|
| -import "settings.mojom";
|
| -
|
| +// Describes the boot phase of the ARC instance, as defined by AOSP in
|
| +// com.android.server.SystemService
|
| +enum InstanceBootPhase {
|
| + // Boot phase indicating that the instance is not running
|
| + NOT_RUNNING = 0,
|
| +
|
| + // After receiving this boot phase the ARC bridge is ready to receive
|
| + // IPC messages. This phase is ARC-specific.
|
| + BRIDGE_READY,
|
| +
|
| + // After receiving this boot phase, services can safely call into core
|
| + // system services such as the PowerManager or PackageManager.
|
| + SYSTEM_SERVICES_READY,
|
| +
|
| + // After receiving this boot phase, services can broadcast Intents.
|
| + ACTIVITY_MANAGER_READY,
|
| +
|
| + // After receiving this boot phase, services can start/bind to third party
|
| + // apps. Apps will be able to make Binder calls into services at this point.
|
| + THIRD_PARTY_APPS_CAN_START,
|
| +
|
| + // After receiving this boot phase, services can allow user interaction
|
| + // with the device. This phase occurs when boot has completed and the home
|
| + // application has started.
|
| + BOOT_COMPLETED
|
| +};
|
| +
|
| +// Duplicates ui::ScaleFactor enum in order to be accessible on Android side.
|
| +enum ScaleFactor {
|
| + SCALE_FACTOR_NONE = 0,
|
| + SCALE_FACTOR_100P,
|
| + SCALE_FACTOR_125P,
|
| + SCALE_FACTOR_133P,
|
| + SCALE_FACTOR_140P,
|
| + SCALE_FACTOR_150P,
|
| + SCALE_FACTOR_180P,
|
| + SCALE_FACTOR_200P,
|
| + SCALE_FACTOR_250P,
|
| + SCALE_FACTOR_300P,
|
| +
|
| + NUM_SCALE_FACTORS
|
| +};
|
| +
|
| +// Describes ARC app.
|
| +struct AppInfo {
|
| + string name;
|
| + string package;
|
| + string activity;
|
| +};
|
| +
|
| +// These values must be matched with the NOTIFICATION_EVENT_* constants in
|
| +// com.android.server.ArcNotificationListenerService.
|
| +enum ArcNotificationEvent {
|
| + BODY_CLICKED = 0,
|
| + CLOSED = 1,
|
| + // Five buttons at maximum (message_center::kNotificationMaximumItems = 5).
|
| + BUTTON1_CLICKED = 2,
|
| + BUTTON2_CLICKED = 3,
|
| + BUTTON3_CLICKED = 4,
|
| + BUTTON4_CLICKED = 5,
|
| + BUTTON5_CLICKED = 6,
|
| +};
|
| +
|
| +// These values must be matched with the NOTIFICATION_TYPE_* constants in
|
| +// com.android.server.ArcNotificationListenerService.
|
| +enum ArcNotificationType {
|
| + BASIC = 0,
|
| + IMAGE = 1,
|
| + PROGRESS = 2,
|
| +};
|
| +
|
| +// Enumerates the types of wake lock the ARC instance can request from the
|
| +// host.
|
| +enum DisplayWakeLockType {
|
| + // Does not allow the screen to dim, turn off, or lock; prevents
|
| + // idle suspend.
|
| + BRIGHT = 0,
|
| +
|
| + // Allows dimming the screen, but prevents it from turning off or locking.
|
| + // Also prevents idle suspend.
|
| + DIM = 1
|
| +};
|
| +
|
| +// Describes the current process state, as defined by AOSP in
|
| +// android.app.ActivityManager.
|
| +enum ProcessState {
|
| + // Process does not exist.
|
| + NONEXISTENT = -1,
|
| +
|
| + // Process is a persistent system process.
|
| + PERSISTENT = 0,
|
| +
|
| + // Process is a persistent system process and is doing UI.
|
| + PERSISTENT_UI = 1,
|
| +
|
| + // Process is hosting the current top activities. Note that this covers
|
| + // all activities that are visible to the user.
|
| + TOP = 2,
|
| +
|
| + // Process is hosting a foreground service due to a system binding.
|
| + BOUND_FOREGROUND_SERVICE = 3,
|
| +
|
| + // Process is hosting a foreground service.
|
| + FOREGROUND_SERVICE = 4,
|
| +
|
| + // Same as PROCESS_STATE_TOP but while device is sleeping.
|
| + TOP_SLEEPING = 5,
|
| +
|
| + // Process is important to the user, and something they are aware of.
|
| + IMPORTANT_FOREGROUND = 6,
|
| +
|
| + // Process is important to the user, but not something they are aware of.
|
| + IMPORTANT_BACKGROUND = 7,
|
| +
|
| + // Process is in the background running a backup/restore operation.
|
| + BACKUP = 8,
|
| +
|
| + // Process is in the background, but it can't restore its state so we want
|
| + // to try to avoid killing it.
|
| + HEAVY_WEIGHT = 9,
|
| +
|
| + // Process is in the background running a service. Unlike oom_adj, this level
|
| + // is used for both the normal running in background state and the executing
|
| + // operations state.
|
| + SERVICE = 10,
|
| +
|
| + // Process is in the background running a receiver. Note that from the
|
| + // perspective of oom_adj receivers run at a higher foreground level, but for
|
| + // our prioritization here that is not necessary and putting them below
|
| + // services means many fewer changes in some process states as they receive
|
| + // broadcasts.
|
| + RECEIVER = 11,
|
| +
|
| + // Process is in the background but hosts the home activity.
|
| + HOME = 12,
|
| +
|
| + // Process is in the background but hosts the last shown activity.
|
| + LAST_ACTIVITY = 13,
|
| +
|
| + // Process is being cached for later use and contains activities.
|
| + CACHED_ACTIVITY = 14,
|
| +
|
| + // Process is being cached for later use and is a client of another cached
|
| + // process that contains activities.
|
| + CACHED_ACTIVITY_CLIENT = 15,
|
| +
|
| + // Process is being cached for later use and is empty.
|
| + CACHED_EMPTY = 16,
|
| +};
|
| +
|
| +struct ArcNotificationData {
|
| + // Identifier of notification
|
| + string key;
|
| + // Type of notification
|
| + ArcNotificationType type;
|
| + // Body message of notification
|
| + string message;
|
| + // Title of notification
|
| + string title;
|
| + // Mimetype of |icon_data|
|
| + string icon_mimetype;
|
| + // Binary data of the icon
|
| + array<uint8> icon_data;
|
| + // Priority of notification, must be [2,-2]
|
| + int32 priority;
|
| + // Timestamp related to the notification
|
| + int64 time;
|
| + // The current value of progress, must be [0, progress_max].
|
| + int32 progress_current;
|
| + // The maximum value of progress.
|
| + int32 progress_max;
|
| +};
|
| +
|
| +// Describes a running ARC process.
|
| +// This struct is a subset of android.app.ActivityManager.RunningAppProcessInfo.
|
| +struct RunningAppProcessInfo {
|
| + // Name of the process.
|
| + string process_name;
|
| +
|
| + // PID (within ARC's PID namespace) of the process.
|
| + uint32 pid;
|
| +
|
| + // Current process state.
|
| + ProcessState process_state;
|
| +};
|
| +
|
| +// TODO(lhchavez): Migrate all request/response messages to Mojo.
|
| interface ArcBridgeHost {
|
| - // Keep the entries alphabetical. In order to do so without breaking
|
| - // compatibility with the ARC instance, explicitly assign each interface a
|
| - // unique ordinal.
|
| -
|
| - // Notifies Chrome that the AppInstance interface is ready.
|
| - OnAppInstanceReady@100(AppInstance instance_ptr);
|
| -
|
| - // Notifies Chrome that the InputInstnace interface is ready.
|
| - OnInputInstanceReady@101(InputInstance instance_ptr);
|
| -
|
| - // Notifies Chrome that the NotificationsInstance interface is ready.
|
| - OnNotificationsInstanceReady@102(NotificationsInstance instance_ptr);
|
| -
|
| - // Notifies Chrome that the PowerInstance interface is ready.
|
| - OnPowerInstanceReady@103(PowerInstance instance_ptr);
|
| -
|
| - // Notifies Chrome that the ProcessInstance interface is ready.
|
| - OnProcessInstanceReady@104(ProcessInstance instance_ptr);
|
| -
|
| - // Notifies Chrome that the SettingsInstance interface is ready.
|
| - OnSettingsInstanceReady@105(SettingsInstance instance_ptr);
|
| + OnInstanceBootPhase(InstanceBootPhase phase);
|
| +
|
| + // Sends a list of available ARC apps to Chrome. Members of AppInfo must
|
| + // contain non-empty string. This message is sent in response to
|
| + // ArcInstanceMsg_RefreshApps message from Chrome to ARC and when ARC
|
| + // receives boot completed notification.
|
| + OnAppListRefreshed(array<AppInfo> apps);
|
| +
|
| + // Sends an icon of required |scale_factor| for specific ARC app. The app is
|
| + // defined by |package| and |activity|. The icon content cannot be empty and
|
| + // must match to |scale_factor| assuming 48x48 for SCALE_FACTOR_100P.
|
| + // |scale_factor| is an enum defined at ui/base/layout.h. This message is
|
| + // sent in response to ArcInstanceMsg_RequestIcon from Chrome to ARC.
|
| + OnAppIcon(string package, string activity, ScaleFactor scale_factor,
|
| + array<uint8> icon_png_data);
|
| +
|
| + // Tells the Chrome that a notification is posted (created or updated) on
|
| + // Android.
|
| + // |notification_data| is the data of notification (id, texts, icon and ...).
|
| + OnNotificationPosted(ArcNotificationData notification_data);
|
| +
|
| + // Notifies that a notification is removed on Android.
|
| + // |key| is the identifier of the notification.
|
| + OnNotificationRemoved(string key);
|
| +
|
| + // Acquire and release wake locks on the host side.
|
| + OnAcquireDisplayWakeLock(DisplayWakeLockType type);
|
| + OnReleaseDisplayWakeLock(DisplayWakeLockType type);
|
| +
|
| + // Notifies Chrome that the ARC process list has been updated.
|
| + OnUpdateProcessList(array<RunningAppProcessInfo> processes);
|
| };
|
|
|
| interface ArcBridgeInstance {
|
| // Establishes full-duplex communication with the host.
|
| - // |host_ptr| is the MessagePipe endpoint that is bound to the
|
| - // ArcBridgeHostPtr binding.
|
| - Init@0(ArcBridgeHost host_ptr);
|
| -};
|
| + // |pipe| is the MessagePipe endpoint that is bound to the ArcBridgeHostPtr
|
| + // binding.
|
| + Init(ArcBridgeHost host_ptr);
|
| +
|
| + // Registers a virtual input device on the container side.
|
| + // |name| is the device name, like "Chrome OS Keyboard".
|
| + // |device_type| is the device type, like "keyboard".
|
| + // The virtual device will be reading 'struct input_event's from |fd|. The
|
| + // ownership of |fd| will be transferred to the receiver, so the sender must
|
| + // not close it.
|
| + RegisterInputDevice(string name,
|
| + string device_type,
|
| + handle fd);
|
| +
|
| + // Sends a request to ARC to refresh a list of ARC apps.
|
| + // OnRefreshAppsList is expected in response to this message. However,
|
| + // response may not be sent if ARC is not ready yet (boot completed event is
|
| + // not received).
|
| + RefreshAppList();
|
| +
|
| + // Sends a request to ARC to launch an ARC app defined by |package| and
|
| + // |activity|, which cannot be empty.
|
| + LaunchApp(string package, string activity);
|
| +
|
| + // Sends a request to ARC for the ARC app icon of a required scale factor.
|
| + // Scale factor is an enum defined at ui/base/layout.h. App is defined by
|
| + // package and activity, which cannot be empty.
|
| + RequestAppIcon(string package, string activity,
|
| + ScaleFactor scale_factor);
|
| +
|
| + // Sends an event from Chrome notification UI to Android.
|
| + // |event| is a type of occured event.
|
| + SendNotificationEventToAndroid(string key, ArcNotificationEvent event);
|
| +
|
| + // Requests ARC instance to return the current process list.
|
| + RequestProcessList();
|
| +
|
| + // Send an Android broadcast message to the Android package and class
|
| + // specified. Data can be sent as extras by including a JSON map string which
|
| + // will be automatically converted to a bundle accessible by the receiver.
|
| + //
|
| + // Note: Broadcasts can only be sent to whitelisted packages. Packages can be
|
| + // added to the whitelist in ArcBridgeService.java in the Android source.
|
| + SendBroadcast(string action,
|
| + string package,
|
| + string cls,
|
| + string extras);
|
| +};
|
|
|