blob: 11954a3adfb6d517b6dc8e780a4a9aba8a0bf98a [file] [log] [blame]
// Copyright 2018 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 "components/remote_cocoa/common/select_file_dialog.mojom";
import "components/remote_cocoa/common/menu.mojom";
import "mojo/public/mojom/base/string16.mojom";
import "services/network/public/mojom/network_param.mojom";
import "ui/base/cursor/mojom/cursor.mojom";
import "ui/base/mojom/color_mode.mojom";
import "ui/base/mojom/ui_base_types.mojom";
import "ui/events/mojom/event_constants.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";
import "ui/gfx/mojom/ca_layer_params.mojom";
// The window class (subclass of kNativeWidgetMacNSWindow) to use for a given
// window.
enum WindowClass {
// NativeWidgetMacNSWindow
kDefault,
// BrowserNativeWidgetWindow
kBrowser,
// NativeWidgetMacFramelessNSWindow
kFrameless,
// NativeWidgetMacOverlayNSWindow
kOverlay,
};
// Parameters used to described creation of an NSWindow.
struct CreateWindowParams {
// The subclass of NativeWidgetMacNSWindow to use for this window.
WindowClass window_class;
// The NSWindowStyleMask for the window.
uint64 style_mask;
// Whether or not the titlebar should be forced to be transparent. If so, then
// the window is responsible for drawing its own titlebar. Note that the
// traffic lights will be drawn independent of this setting.
bool titlebar_appears_transparent;
// Whether or not to hide the default title drawn by the window. If so, then
// the window is responsible for drawing its own title.
bool window_title_hidden;
// Whether or not window animations should be initially enabled.
bool animation_enabled;
};
// Ways of changing the visibility of the bridged NSWindow.
enum WindowVisibilityState {
// Hides with -[NSWindow orderOut:].
kHideWindow,
// Shows with -[NSWindow makeKeyAndOrderFront:].
kShowAndActivateWindow,
// Shows with -[NSWindow orderWindow:..]. Orders the window above its parent
// if it has one.
kShowInactive,
// Miniaturizes with -[NSWindow miniaturize:].
kMiniaturizeWindow
};
// Window transitions to animate, mirrors views::Widget::VisibilityTransition.
enum VisibilityTransition {
kShow = 1,
kHide = 2,
kBoth = 3,
kNone = 4,
};
struct NativeWidgetNSWindowInitParams {
ui.mojom.ModalType modal_type;
// If true, the underlying window potentially be seen through.
bool is_translucent;
// If true, then the NSWindow is set to have a shadow using
// -[NSWindow setHasShadow:YES].
bool has_window_server_shadow;
// If true, the NSWindow's collection behavior is set to include
// NSWindowCollectionBehaviorParticipatesInCycle (this is not the
// default for NSWindows with NSWindowStyleMaskBorderless).
bool force_into_collection_cycle;
// An opaque blob of AppKit data which includes, among other things, a
// window's workspace and fullscreen state, and can be retrieved from or
// applied to a window.
array<uint8> state_restoration_data;
// If true, this window is functionally a tooltip, and shouldn't be presented
// as a new window to the accessibility system.
bool is_tooltip;
};
// The visibility style of the toolbar in immersive fullscreen.
enum ToolbarVisibilityStyle {
// No toolbar. Used for content fullscreen.
kNone,
// The toolbar is always shown.
kAlways,
// The toolbar will autohide. It can be revealed by placing the mouse at the
// top of the screen.
kAutohide,
};
// The interface through which a NativeWidgetMac may interact with an NSWindow
// (possibly in a process separate from the browser process).
interface NativeWidgetNSWindow {
// Create and set the NSWindow for the bridge.
CreateWindow(CreateWindowParams params);
// Set the NativeWidgetNSWindow indicated by |parent_id| to be the parent of
// this NativeWidgetNSWindow.
SetParent(uint64 parent_id);
// Open a panel for file selection or creation.
CreateSelectFileDialog(pending_receiver<SelectFileDialog> dialog);
// Open a panel to display the specified certificate.
ShowCertificateViewer(network.mojom.X509Certificate certificate);
// Places this NativeWidgetNSWindow in front of the NativeWidgetNSWindow
// indicated by |sibling_id| in z-order.
StackAbove(uint64 sibling_id);
StackAtTop();
// Show the emoji panel for the NSWindow's process.
ShowEmojiPanel();
// Initialize the window's style.
InitWindow(NativeWidgetNSWindowInitParams params);
// Initialize the view to display compositor output. This will send the
// current visibility and dimensions (and any future updates) to the
// NativeWidgetNSWindowHost. Returns the CGWindowID to associate with
// the compositor's FrameSinkId.
InitCompositorView() => (uint32 cg_window_id);
// Create the NSView to be the content view for the window. Use |ns_view_id|
// to look up this NSView in other functions (e.g, to specify a parent view).
// If `corner_radius` is set, the content view clips sublayers to a rounded
// corner mask of the given radius.
CreateContentView(uint64 ns_view_id,
gfx.mojom.Rect bounds,
int32? corner_radius);
// Destroy the content NSView for this window. Note that the window will
// become blank once this has been called.
DestroyContentView();
// Initiate the closing of the window (the closing may be animated or posted
// to be run later).
CloseWindow();
// Immediately close the window (which will have the consequence of deleting
// |this| and its host).
CloseWindowNow();
// Specify initial bounds for the window via |new_bounds| in screen
// coordinates. It is invalid for |new_bounds| to have an empty size and
// non-zero position. The size of the window will be expanded so that the
// content size will be at least |minimum_content_size|.
SetInitialBounds(gfx.mojom.Rect new_bounds,
gfx.mojom.Size minimum_content_size);
// Specify new bounds for the window via |new_bounds| in screen coordinates.
// The size of the window will be expanded so that the content size will be
// at least |minimum_content_size| and at most |maximum_content_size| (if
// provided).
SetBounds(gfx.mojom.Rect new_bounds,
gfx.mojom.Size minimum_content_size,
gfx.mojom.Size? maximum_content_size);
// Specify new size for the window via |new_size|. The top-left corner of the
// window will be kept in place. The size of the window will be expanded so
// that the content size will be at least |minimum_content_size|.
SetSize(gfx.mojom.Size new_size,
gfx.mojom.Size minimum_content_size);
// Centers the window and sets its content size to |content_size|. The size of
// the window will be expanded so that the content size will be at least
// |minimum_content_size|.
SetSizeAndCenter(gfx.mojom.Size content_size,
gfx.mojom.Size minimum_content_size);
// Sets the desired visibility of the window and updates the visibility of
// descendant windows where necessary.
SetVisibilityState(WindowVisibilityState new_state);
// Enables or disables all window animations.
SetAnimationEnabled(bool animation_enabled);
// Sets which transitions will animate. Currently this only affects non-native
// animations.
SetTransitionsToAnimate(VisibilityTransition transitions);
// Sets the collection behavior so that the window will or will not be visible
// on all spaces.
SetVisibleOnAllSpaces(bool always_visible);
// Initiate a transition to fullscreen on the specified display. If
// `target_display_id` is invalid, then fullscreen should be entered on the
// current display.
EnterFullscreen(int64 target_display_id);
// Initiate a transition out of fullscreen.
ExitFullscreen();
// Called by NativeWidgetMac; sets whether the window can share fullscreen
// windows' spaces by changing the NSWindow's collectionBehavior.
SetCanAppearInExistingFullscreenSpaces(
bool can_appear_in_existing_fullscreen_spaces);
// Miniaturize or deminiaturize the window.
SetMiniaturized(bool miniaturized);
// Zoom or un-zoom the window.
SetZoomed(bool zoomed);
// Called by NativeWidgetMac when the window size constraints change.
SetSizeConstraints(gfx.mojom.Size min_size,
gfx.mojom.Size max_size,
bool is_resizable,
bool is_maximizable);
// Set the opacity of the NSWindow.
SetOpacity(float opacity);
// Set the window level of the NSWindow.
SetWindowLevel(int32 level);
// Set or un-set the NSWindow as being "activation independent". This sets
// two properties:
//
// - If Chromium is hidden (from the Dock menu or programmatically), the
// NSWindow is not forced to be hidden as well.
// - The NSWindow can be interacted with without causing Chromium to be
// activated.
//
// To accomplish this, the activation independence state of all ancestor
// NSWindows is set as well.
SetActivationIndependence(bool independence);
// Set the aspect ratio of the NSWindow. `aspect_ratio` must not be empty.
// The aspect ratio refers to the client area only; system-drawn window
// decorations like a title bar are not considered in the aspect ratio.
//
// `excluded_margin` is the amount of client area to ignore when computing
// the aspect ratio. This allows for client-drawn window decorations to be
// excluded from the aspect-ratio-constrained size, similar to how system-
// drawn decorations are excluded. If no adjustment is needed, such as if
// there are no client-drawn window decorations, then set `excluded_margin`
// to (0, 0).
//
// For example, `aspect_ratio` == 1.f, and `excluded_margin` == (10, 15)
// would allow a client area size of (40, 45), since (40-10)/(45-15) == 1.
// Presumably, (10, 15) of this area would be used to draw client-drawn
// decorations, while the remaining (30, 30) would be used for whatever
// content is supposed to have a 1.f aspect-ratio.
SetAspectRatio(gfx.mojom.SizeF aspect_ratio, gfx.mojom.Size excluded_margin);
// Specify the content to draw in the NSView.
SetCALayerParams(gfx.mojom.CALayerParams ca_layer_params);
// Set the NSWindow's title text.
SetWindowTitle(mojo_base.mojom.String16 title);
// Ignore or accept mouse events on the NSWindow.
SetIgnoresMouseEvents(bool ignores_mouse_events);
// Make the content view be the first responder for the NSWindow.
MakeFirstResponder();
// Sort the subviews of the content view of this window. The sorted ids of
// the NSViews attached by NativeViewHost::Attach are listed in
// |attached_subview_ids|.
SortSubviews(array<uint64> attached_subview_ids);
// Clear the touchbar.
ClearTouchBar();
// Update the tooltip text at the current mouse location.
UpdateTooltip();
// Acquiring mouse capture first steals capture from any existing
// CocoaMouseCaptureDelegate, then captures all mouse events until released.
AcquireCapture();
ReleaseCapture();
// Redispatch a keyboard event using the widget's window's CommandDispatcher.
RedispatchKeyEvent(array<uint8> native_event_data);
// Enable or disable this widget's local event monitor.
SetLocalEventMonitorEnabled(bool enabled);
// Set the cursor type to display.
SetCursor(ui.mojom.Cursor cursor);
// Enables immersive fullscreen. |fullscreen_overlay_widget_id| is the id of
// the overlay widget which is hosting top chrome.
// |tab_widget_id| holds the id of the tab hosting widget.
EnableImmersiveFullscreen(uint64 fullscreen_overlay_widget_id,
uint64 tab_widget_id);
// Rollback the immersive transition. The top chrome NSView is reparented into
// the overlay widget.
DisableImmersiveFullscreen();
// Update the visibility of the toolbar (top chrome) while in immersive
// fullscreen. Typically this is used in response to the
// View -> "Always Show Toolbar in Full Screen" menu changing or content
// going fullscreen.
UpdateToolbarVisibility(ToolbarVisibilityStyle style);
// Also used during immersive fullscreen. Update the bounds of the AppKit
// NSWindow hosting top chrome.
OnTopContainerViewBoundsChanged(gfx.mojom.Rect bounds);
// Reveal top chrome leaving it visible until all outstanding calls to
// ImmersiveFullscreenRevealLock() are balanced with
// ImmersiveFullscreenRevealUnlock(). Top chrome will hover over content.
ImmersiveFullscreenRevealLock();
// Balances calls to ImmersiveFullscreenRevealLock().
ImmersiveFullscreenRevealUnlock();
// Set whether can go back to the previous page.
SetCanGoBack(bool can_go_back);
// Set whether can go forward to the following page.
SetCanGoForward(bool can_go_forward);
// Displayed a context menu, anchored to this window.
DisplayContextMenu(ContextMenu menu,
pending_remote<MenuHost> host,
pending_receiver<Menu> receiver);
// Set whether the window should be included in screenshots or not.
SetAllowScreenshots(bool allow);
// Set the color mode of the window.
SetColorMode(ui.mojom.ColorMode color_mode);
};