| // 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 remote_cocoa.mojom; |
| |
| import "mojo/public/mojom/base/string16.mojom"; |
| import "third_party/blink/public/mojom/input/input_handler.mojom"; |
| import "third_party/blink/public/mojom/webshare/share_error.mojom"; |
| import "ui/base/mojom/attributed_string.mojom"; |
| import "ui/base/cursor/mojom/cursor.mojom"; |
| import "ui/base/ime/mojom/ime_types.mojom"; |
| import "ui/display/mojom/screen_infos.mojom"; |
| import "ui/events/mojom/event.mojom"; |
| import "ui/gfx/geometry/mojom/geometry.mojom"; |
| import "ui/gfx/mojom/ca_layer_params.mojom"; |
| import "ui/gfx/range/mojom/range.mojom"; |
| |
| // The interface through which code in the browser process, in |
| // RenderWidgetHostViewMac, sends messages to the app shim process, targeting |
| // the RenderWidgetHostViewCocoa NSView. No synchronous communication is allowed |
| // in this direction. |
| interface RenderWidgetHostNSView { |
| // Specify that the NSView will a popup (e.g, date/time picker) that will |
| // create its own NSWindow. |
| InitAsPopup(gfx.mojom.Rect content_rect, uint64 popup_parent_ns_view_id); |
| |
| // Set this to be a child NSView of the NSView mapped to by |
| // |parent_ns_view_id|. |
| SetParentWebContentsNSView(uint64 parent_ns_view_id); |
| |
| // Disable displaying any content (including the background color). This is |
| // to be called on views that are to be displayed via a parent ui::Compositor. |
| DisableDisplay(); |
| |
| // Make the NSView be the first responder of its NSWindow. |
| MakeFirstResponder(); |
| |
| // Set the bounds of the NSView or its enclosing NSWindow (depending on the |
| // window type). |
| SetBounds(gfx.mojom.Rect rect); |
| |
| // Set the contents to display in the NSView. |
| SetCALayerParams(gfx.mojom.CALayerParams ca_layer_params); |
| |
| // Set the background SkColor color of the hosted CALayer. |
| SetBackgroundColor(uint32 color); |
| |
| // Call the -[NSView setHidden:] method. |
| SetVisible(bool visible); |
| |
| // Call the -[NSView setToolTipAtMousePoint] method. |
| SetTooltipText(mojo_base.mojom.String16 display_text); |
| |
| // Forward changes in content::TextInputState. |
| SetTextInputState(ui.mojom.TextInputType text_input_type, uint32 flags); |
| |
| // Forward the TextInputManager::TextSelection from the renderer. |
| SetTextSelection(mojo_base.mojom.String16 text, |
| uint64 offset, |
| gfx.mojom.Range range); |
| |
| // Forward the TextInputManager::CompositionRangeInfo from the renderer. |
| SetCompositionRangeInfo(gfx.mojom.Range range); |
| |
| // Clear the marked range. |
| CancelComposition(); |
| |
| // Indicate if the WebContext is showing a context menu or not. |
| SetShowingContextMenu(bool showing); |
| |
| // Set the cursor type to display. |
| DisplayCursor(ui.mojom.Cursor cursor); |
| |
| // Lock or unlock the cursor. |
| SetCursorLocked(bool locked); |
| |
| // Set whether unaccelerated (unadjusted) mouse move events are |
| // generated while the cursor is locked. |
| SetCursorLockedUnacceleratedMovement(bool unaccelerated_movement); |
| |
| // Open the dictionary overlay for the currently selected string. This |
| // will roundtrip to the NSView to determine the selected range. |
| ShowDictionaryOverlayForSelection(); |
| |
| // Open the dictionary overlay for the specified string at the specified |
| // point. |
| ShowDictionaryOverlay(ui.mojom.AttributedString attributed_string, |
| gfx.mojom.Point baseline_point); |
| |
| // Start intercepting keyboard events for the specified codes. |
| LockKeyboard(array<uint32>? dom_codes); |
| |
| // Stop intercepting keyboard events. |
| UnlockKeyboard(); |
| |
| // Show the NSSharingServicePicker using the requested data that is passed and |
| // returning the result of that action. |
| ShowSharingServicePicker(string title, |
| string text, |
| string url, |
| array<string> file_paths) |
| => (blink.mojom.ShareError error); |
| }; |
| |
| // The interface through which the RenderWidgetHostViewCocoa NSView in the app |
| // shim process communicates to the RenderWidgetHostViewMac in the browser |
| // process. Synchronous calls are allowed to be made through this interface. |
| // TODO(ccameron): This corresponds almost one-to-one with the |
| // content::RenderWidgetHostNSViewHost interface. It may be possible to merge |
| // these two interfaces, though that may come at the cost of extra work (e.g, |
| // de-serializing and re-serializing all events). |
| // https://crbug.com/821651 |
| interface RenderWidgetHostNSViewHost { |
| // Synchronously query if the RenderWidgetHostView is for a main frame, and |
| // return the result as |is_for_main_frame|. |
| [Sync] |
| SyncIsWidgetForMainFrame() => (bool is_for_main_frame); |
| |
| // Request that the RenderWidgetHost be shut down (e.g, when a date/time |
| // picker window is closed). |
| RequestShutdown(); |
| |
| // Indicates whether or not the NSView is its NSWindow's first responder. |
| OnFirstResponderChanged(bool is_first_responder); |
| |
| // Indicates whether or not the NSView is its NSWindow's first responder. |
| OnWindowIsKeyChanged(bool is_key); |
| |
| // Indicates whether or not the NSView's NSWindow is key. |
| OnBoundsInWindowChanged( |
| gfx.mojom.Rect view_bounds_in_window_dip, |
| bool attached_to_window); |
| |
| // Indicates the NSView's bounds in its NSWindow's DIP coordinate system (with |
| // the origin at the upper-left corner), and indicate if the the NSView is |
| // attached to an NSWindow (if it is not, then |view_bounds_in_window_dip|'s |
| // origin is meaningless, but its size is still relevant). |
| OnWindowFrameInScreenChanged( |
| gfx.mojom.Rect window_frame_in_screen_dip); |
| |
| // Indicate changes to the NSScreen hosting the NSView, or other NSScreens. |
| OnScreenInfosChanged(display.mojom.ScreenInfos screen_infos); |
| |
| // Indicate the begin and end block of a keyboard event. The beginning of this |
| // block will record the active RenderWidgetHost, and will forward all |
| // remaining keyboard and Ime messages to that RenderWidgetHost. |
| BeginKeyboardEvent(); |
| EndKeyboardEvent(); |
| |
| // Forward a keyboard event to the RenderWidgetHost that is currently handling |
| // the key-down event. |
| ForwardKeyboardEventWithCommands( |
| blink.mojom.Event event, |
| array<uint8> native_event_data, |
| bool skip_in_browser, |
| array<blink.mojom.EditCommand> commands); |
| |
| // Forward events to the renderer or the input router, as appropriate. |
| RouteOrProcessMouseEvent(blink.mojom.Event event); |
| RouteOrProcessTouchEvent(blink.mojom.Event event); |
| RouteOrProcessWheelEvent(blink.mojom.Event event); |
| |
| // Special case forwarding of synthetic events to the renderer. |
| ForwardMouseEvent(blink.mojom.Event event); |
| ForwardWheelEvent(blink.mojom.Event event); |
| |
| // Handling pinch gesture events. Note that for GestureBegin, the type of the |
| // event is ignored, and is inferred from subsequent GestureUpdate calls. |
| GestureBegin(blink.mojom.Event event, bool is_synthetically_injected); |
| GestureUpdate(blink.mojom.Event event); |
| GestureEnd(blink.mojom.Event event); |
| |
| // Handle a double-tap magnify event. |
| SmartMagnify(blink.mojom.Event event); |
| |
| // Forward the corresponding Ime commands to the appropriate RenderWidgetHost. |
| // Appropriate, has two meanings here. If this is during a key-down event, |
| // then the target is the RWH that is handling that key-down event. Otherwise, |
| // it is the result of GetActiveWidget. |
| ImeSetComposition( |
| mojo_base.mojom.String16 text, |
| array<ui.mojom.ImeTextSpan> ime_text_spans, |
| gfx.mojom.Range replacement_range, |
| int32 selection_start, |
| int32 selection_end); |
| ImeCommitText(mojo_base.mojom.String16 text, |
| gfx.mojom.Range replacement_range); |
| ImeFinishComposingText(); |
| // Note that the function name ImeCancelComposition would conflict with a |
| // method in RenderWidgetHostViewBase. |
| ImeCancelCompositionFromCocoa(); |
| |
| // Request an overlay dictionary be displayed for the text at the specified |
| // point. |
| LookUpDictionaryOverlayAtPoint(gfx.mojom.PointF root_point); |
| |
| // Request an overlay dictionary be displayed for the text in the the |
| // specified character range. |
| LookUpDictionaryOverlayFromRange(gfx.mojom.Range range); |
| |
| // Synchronously query the character index for |root_point|. Return UINT32_MAX |
| // if the request fails or is not completed. |
| [Sync] |
| SyncGetCharacterIndexAtPoint( |
| gfx.mojom.PointF root_point) => (uint32 index); |
| |
| // Synchronously query the composition character boundary rectangle and return |
| // it as |out_rect|. Return |out_actual_range| as the range actually used for |
| // the returned rectangle. If there was no focused RenderWidgetHost to query, |
| // then return |success| as false. |
| [Sync] |
| SyncGetFirstRectForRange( |
| gfx.mojom.Range requested_range) => |
| (gfx.mojom.Rect out_rect, |
| gfx.mojom.Range out_actual_range, |
| bool success); |
| |
| // Forward the corresponding edit menu command to the RenderWidgetHost's |
| // delegate. |
| ExecuteEditCommand(string command); |
| Undo(); |
| Redo(); |
| Cut(); |
| Copy(); |
| CopyToFindPboard(); |
| Paste(); |
| PasteAndMatchStyle(); |
| SelectAll(); |
| |
| // Speak the selected text of the appropriate RenderWidgetHostView using |
| // TextServicesContextMenu. |
| StartSpeaking(); |
| |
| // Stop speaking using TextServicesContextMenu. |
| StopSpeaking(); |
| |
| // Synchronously query if TextServicesContextMenu is currently speaking and |
| // return the result as |is_speaking|. |
| [Sync] |
| SyncIsSpeaking() => (bool is_speaking); |
| |
| // Send the token for the NSWindow in which this NSView is being displayed. |
| SetRemoteAccessibilityWindowToken(array<uint8> window_token); |
| }; |
| |