// 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); // 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? 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 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 native_event_data, bool skip_in_browser, array 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 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 window_token); };