summaryrefslogtreecommitdiff
path: root/chromium/ui/views_bridge_mac/mojo/bridged_native_widget_host.mojom
blob: bf9391ce1c700deba729e4f19c4feddd108c19e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
// 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 views_bridge_mac.mojom;

import "mojo/public/mojom/base/string16.mojom";
import "ui/base/accelerators/mojo/accelerator.mojom";
import "ui/base/mojo/ui_base_types.mojom";
import "ui/base/mojo/window_open_disposition.mojom";
import "ui/display/mojo/display.mojom";
import "ui/events/mojo/event.mojom";
import "ui/gfx/geometry/mojo/geometry.mojom";
import "ui/gfx/mojo/ca_layer_params.mojom";

struct ValidateUserInterfaceItemResult {
  // Whether or not the specified sender should be enabled.
  bool enable;

  // If true, then the item should be disabled if there exists no key equivalent
  // for the item.
  bool disable_if_has_no_key_equivalent;

  // The new title to set for the item (unset if the title is not to be
  // changed).
  mojo_base.mojom.String16? new_title;

  // Whether or not to change the hidden state for the item, and the new hidden
  // state to set.
  bool set_hidden_state;
  bool new_hidden_state;

  // Whether or not to change the toggled state for the item, and the new toggle
  // state to set.
  bool set_toggle_state;
  bool new_toggle_state;
};

// The interface through which an NSWindow (possibly in a process separate from
// the browser process) may interact with a NativeWidgetMac.
interface BridgedNativeWidgetHost {
  // Update the views::Widget, ui::Compositor and ui::Layer's visibility.
  OnVisibilityChanged(bool visible);

  // Called when the window's native theme changes.
  OnWindowNativeThemeChanged();

  // Resize the underlying views::View to |new_size| in response to the NSView's
  // frame changing size. Note that this will not necessarily match the content
  // bounds from OnWindowGeometryChanged.
  OnViewSizeChanged(gfx.mojom.Size new_size);

  // The vertical position from which sheets should be anchored, from the top
  // of the content view.
  [Sync]
  GetSheetOffsetY() => (int32 offset_y);

  // Indicate if full keyboard accessibility is needed and update focus if
  // needed.
  SetKeyboardAccessible(bool enabled);

  // Indicate if the NSView for this widget is the first responder for the
  // NSWindow for this widget.
  OnIsFirstResponderChanged(bool is_first_responder);

  // Indicate if mouse capture is active.
  OnMouseCaptureActiveChanged(bool capture_is_active);

  // Handle events. Note that whether or not the event is actually handled is
  // not returned.
  OnScrollEvent(ui.mojom.Event event);
  OnMouseEvent(ui.mojom.Event event);
  OnGestureEvent(ui.mojom.Event event);

  // Synchronously dispatch a key event and return in |event_handled| whether
  // or not the event was handled. This method is to be used only via the
  // BridgedNativeWidgetHostHelper interface.
  [Sync]
  DispatchKeyEventRemote(ui.mojom.Event event) => (bool event_handled);

  // Synchronously dispatch a key event to the current menu controller (if one
  // exists and is owned by the widget for this). Return in |event_swallowed|
  // whether or not the event was swallowed (that is, if the menu's dispatch
  // returned POST_DISPATCH_NONE). Return in |event_handled| whether or not the
  // event was handled (that is, if the event in the caller's scope should be
  // marked as handled). This method is to be used only via the
  // BridgedNativeWidgetHostHelper interface.
  [Sync]
  DispatchKeyEventToMenuControllerRemote(ui.mojom.Event event) =>
      (bool event_swallowed, bool event_handled);

  // Synchronously return in  |has_menu_controller| whether or not a menu
  // controller exists for this widget.
  [Sync]
  GetHasMenuController() => (bool has_menu_controller);

  // Synchronously query if |location_in_content| is a draggable background.
  [Sync]
  GetIsDraggableBackgroundAt(gfx.mojom.Point location_in_content) =>
      (bool is_draggable_background);

  // Synchronously query the tooltip text for |location_in_content|.
  [Sync]
  GetTooltipTextAt(gfx.mojom.Point location_in_content) =>
      (mojo_base.mojom.String16 new_tooltip_text);

  // Synchronously query the value of IsModal for this widget and store it in
  // |widget_is_modal|.
  [Sync]
  GetWidgetIsModal() => (bool widget_is_modal);

  // Synchronously return in |is_textual| whether or not the focused view
  // contains text that can be selected and copied.
  [Sync]
  GetIsFocusedViewTextual() => (bool is_textual);

  // Called whenever the NSWindow's size or position changes.
  OnWindowGeometryChanged(
      gfx.mojom.Rect window_bounds_in_screen_dips,
      gfx.mojom.Rect content_bounds_in_screen_dips);

  // Called when the window begins transitioning to or from being fullscreen.
  OnWindowFullscreenTransitionStart(
      bool target_fullscreen_state);

  // Called when the window has completed its transition to or from being
  // fullscreen. Note that if there are multiple consecutive transitions
  // (because a new transition was initiated before the previous one completed)
  // then this will only be called when all transitions have competed.
  OnWindowFullscreenTransitionComplete(bool is_fullscreen);

  // Called when the window is miniaturized or deminiaturized.
  OnWindowMiniaturizedChanged(bool miniaturized);

  // Called when the current display or the properties of the current display
  // change.
  OnWindowDisplayChanged(display.mojom.Display display);

  // Called before the NSWindow is closed and destroyed.
  OnWindowWillClose();

  // Called after the NSWindow has been closed and destroyed.
  OnWindowHasClosed();

  // Called when the NSWindow becomes key or resigns from being key. Additional
  // state required for the transition include whether or not the content NSView
  // is the first responder for the NSWindow in |is_content_first_responder| and
  // whether or not the NSApp's full keyboard access is enabled in
  // |full_keyboard_access_enabled|.
  OnWindowKeyStatusChanged(bool is_key,
                           bool is_content_first_responder,
                           bool full_keyboard_access_enabled);

  // Accept or cancel the current dialog window (depending on the value of
  // |button|), if a current dialog exists.
  DoDialogButtonAction(ui.mojom.DialogButton button);

  // Synchronously determine if the specified button exists in the current
  // dialog (if any), along with its label, whether or not it is enabled, and
  // whether or not it is the default button..
  [Sync]
  GetDialogButtonInfo(ui.mojom.DialogButton button) => (bool button_exists,
                      mojo_base.mojom.String16 title,
                      bool is_button_enabled,
                      bool is_button_default);

  // Synchronously return in |buttons_exist| whether or not any buttons exist
  // for the current dialog.
  [Sync]
  GetDoDialogButtonsExist() => (bool buttons_exist);

  // Synchronously query if the NSWindow should display its title.
  [Sync]
  GetShouldShowWindowTitle() => (bool should_show_window_title);

  // Synchronously query if the NSWindow can become key (activate, in views
  // terminology).
  [Sync]
  GetCanWindowBecomeKey() => (bool can_window_become_key);

  // Synchronously query if the NSWindow should always render as if it is
  // the key window (is active, in views terminology).
  [Sync]
  GetAlwaysRenderWindowAsKey() => (bool always_render_as_key);

  // Synchronously query if the NSWindow should always render as if it is
  // the key window (is active, in views terminology).
  [Sync]
  GetCanWindowClose() => (bool can_window_close);

  // Synchronously query if the NSWindow's theme frame overrides the titlebar
  // height, and, if so, what the overridden height is.
  [Sync]
  GetWindowFrameTitlebarHeight() => (bool override_titlebar_height,
                                     float titlebar_height);

  // Handle "Move focus to the window toolbar" shortcut.
  OnFocusWindowToolbar();

  // Send the token for the NSWindow and NSView for this widget.
  SetRemoteAccessibilityTokens(
      array<uint8> window_token, array<uint8> view_token);

  // Return in |element_token| the token for the root views AX node for this
  // view and in |host_pid| the pid for the host process.
  [Sync]
  GetRootViewAccessibilityToken() =>
      (int64 host_pid, array<uint8> element_token);

  // Return the result for -[NSUserInterfaceValidations
  // validateUserInterfaceItem] for a given command, along with any state for
  // that item that should be updated.
  [Sync]
  ValidateUserInterfaceItem(int32 command) =>
      (ValidateUserInterfaceItemResult result);

  // Execute the chrome command |command| with |window_open_disposition|. If
  // |is_before_first_responder| then only call ExecuteCommand if the command
  // is reserved and extension shortcut handling is not suspended. Returns in
  // |was_executed| whether or not ExecuteCommand was called (regardless of what
  // the return value for ExecuteCommand was).
  [Sync]
  ExecuteCommand(int32 command,
                 ui.mojom.WindowOpenDisposition window_open_disposition,
                 bool is_before_first_responder) => (bool was_executed);

  // Give the widget's FocusManager a chance to to handle the specified
  // accelerator. If |require_priority_handler| is true, the only send the
  // accelerator to the FocusManager if the FocusManager has a priority handler
  // for the specified accelerator.
  [Sync]
  HandleAccelerator(ui.mojom.Accelerator accelerator,
                    bool require_priority_handler) =>
      (bool was_handled);
};