blob: f7a8d1f65759d51e14fa1b60e6dc4514c2aa7a17 [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 chrome.mojom;
import "components/remote_cocoa/common/application.mojom";
import "mojo/public/mojom/base/file_path.mojom";
import "mojo/public/mojom/base/string16.mojom";
import "ui/gfx/image/mojom/image.mojom";
import "url/mojom/url.mojom";
enum AppShimLaunchType {
// Process the app shim's LaunchAppmessage and associate the shim with the
// given profile and app id.
kRegisterOnly,
// Do the above and launch the app.
kNormal,
};
enum AppShimLaunchResult {
// App launched successfully.
kSuccess,
// The app launched successfully, but is not using a host (e.g, is an
// open-in-a-tab bookmark app), or the host has closed.
kNoHost,
// There is already a host registered for this app.
kDuplicateHost,
// The profile was not found.
kProfileNotFound,
// The app was not found.
kAppNotFound,
// The profile was locked.
kProfileLocked,
// The app shim did not pass code signing validation.
kFailedValidation,
};
enum AppShimFocusType {
// Just focus the app.
kNormal,
// Focus the app or launch it if it has no windows open.
kReopen,
// Open the given file in the app.
kOpenFiles,
};
enum AppShimAttentionType {
// Removes any active attention request.
kCancel,
// Bounces the shim in the dock continuously.
kCritical,
};
// An entry in the profiles NSMenu.
struct ProfileMenuItem {
// The name to display.
mojo_base.mojom.String16 name;
// The icon to display next to the name.
gfx.mojom.ImageSkia? icon;
// The index used to look up this item when selected.
uint32 menu_index;
// Whether or not this menu item is listed as selected.
bool active;
// The profile path to associate with this item.
mojo_base.mojom.FilePath profile_path;
};
// Interface through which the browser communicates to a shim process.
interface AppShim {
// Create the interface to the NSApplication (through which NSViews and
// NSWindows may be created).
CreateRemoteCocoaApplication(
pending_associated_receiver<remote_cocoa.mojom.Application> application);
// Initialize the command handler for the specified BridgedNativeWidget. This
// method exists at this scope (as opposed to in remote_cocoa) because it
// creates chrome-scoped objects that implement remote_cocoa interfaces.
CreateCommandDispatcherForWidget(uint64 widget_id);
// Instructs the shim to request or cancel user attention.
SetUserAttention(AppShimAttentionType attention_type);
// Instructs the shim to set its badge label.
SetBadgeLabel(string badge_label);
// Called to update the state of the profiles NSMenu.
UpdateProfileMenu(array<ProfileMenuItem> profile_menu_items);
};
// Interface through which the a process communicates to the browser process.
interface AppShimHost {
// Sent when the user has indicated a desire to focus the app, either by
// clicking on the app's icon in the dock or by selecting it with Cmd+Tab. In
// response, Chrome brings the app's windows to the foreground, or relaunches
// if the focus type indicates a reopen and there are no open windows.
FocusApp(AppShimFocusType focus_type,
array<mojo_base.mojom.FilePath> files);
// Called when a profile is selected from the profiles menu.
ProfileSelectedFromMenu(mojo_base.mojom.FilePath profile_path);
};
// Properties of an app shim that are specified when it connects to the browser
// process for the first time.
struct AppShimInfo {
// The path of the profile to use with this app.
mojo_base.mojom.FilePath profile_path;
// The shim's app id.
string app_id;
// The shortcut URL for this app (if this is a shortcut app or a PWA).
url.mojom.Url app_url;
// How or if the browser should launch the associated app in response to this
// shim process connecting.
AppShimLaunchType launch_type;
// The files that were dragged on to this app when launching it.
array<mojo_base.mojom.FilePath> files;
};
// The initial interface provided by the browser process. Used to bootstrap to
// the AppShim and AppShimHost interfaces.
interface AppShimHostBootstrap {
// Signals to the main Chrome process that a shim has started. The app shim
// process is requesting to be associated with the given profile and app_id.
// Once the profile and app_id are stored, and all future messages from the
// app shim relate to this app.
OnShimConnected(pending_receiver<AppShimHost> host_receiver,
AppShimInfo app_shim_info) =>
(AppShimLaunchResult launch_result,
pending_receiver<AppShim> app_shim_receiver);
};