dom/ipc/PBrowser.ipdl

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:29df68b52fac
1 /* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8 -*- */
2 /* vim: set sw=4 ts=8 et tw=80 ft=cpp : */
3
4 /* This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7
8 include protocol PBlob;
9 include protocol PColorPicker;
10 include protocol PContent;
11 include protocol PDocumentRenderer;
12 include protocol PContentPermissionRequest;
13 include protocol PFilePicker;
14 include protocol PRenderFrame;
15 include protocol POfflineCacheUpdate;
16 include protocol PIndexedDB;
17 include DOMTypes;
18 include JavaScriptTypes;
19 include URIParams;
20 include PContentPermission;
21
22
23 using class IPC::Principal from "mozilla/dom/PermissionMessageUtils.h";
24 using struct mozilla::gfx::Matrix from "mozilla/gfx/Matrix.h";
25 using struct gfxSize from "gfxPoint.h";
26 using CSSRect from "Units.h";
27 using struct mozilla::layers::FrameMetrics from "FrameMetrics.h";
28 using struct mozilla::layers::ScrollableLayerGuid from "FrameMetrics.h";
29 using struct mozilla::layers::ZoomConstraints from "FrameMetrics.h";
30 using FrameMetrics::ViewID from "FrameMetrics.h";
31 using mozilla::layout::ScrollingBehavior from "mozilla/layout/RenderFrameUtils.h";
32 using struct mozilla::void_t from "ipc/IPCMessageUtils.h";
33 using mozilla::WindowsHandle from "ipc/IPCMessageUtils.h";
34 using nscolor from "nsColor.h";
35 using class mozilla::WidgetCompositionEvent from "ipc/nsGUIEventIPC.h";
36 using struct nsIMEUpdatePreference from "nsIWidget.h";
37 using struct nsIntPoint from "nsPoint.h";
38 using struct nsIntRect from "nsRect.h";
39 using struct nsIntSize from "nsSize.h";
40 using class mozilla::WidgetKeyboardEvent from "ipc/nsGUIEventIPC.h";
41 using class mozilla::WidgetMouseEvent from "ipc/nsGUIEventIPC.h";
42 using class mozilla::WidgetWheelEvent from "ipc/nsGUIEventIPC.h";
43 using struct nsRect from "nsRect.h";
44 using class mozilla::WidgetSelectionEvent from "ipc/nsGUIEventIPC.h";
45 using class mozilla::WidgetTextEvent from "ipc/nsGUIEventIPC.h";
46 using class mozilla::WidgetTouchEvent from "ipc/nsGUIEventIPC.h";
47 using struct mozilla::dom::RemoteDOMEvent from "mozilla/dom/TabMessageUtils.h";
48 using mozilla::dom::ScreenOrientation from "mozilla/dom/ScreenOrientation.h";
49 using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h";
50 using mozilla::CSSPoint from "Units.h";
51 using mozilla::CSSToScreenScale from "Units.h";
52 using mozilla::CommandInt from "mozilla/EventForwards.h";
53 using mozilla::layers::GeckoContentController::APZStateChange from "mozilla/layers/GeckoContentController.h";
54
55 namespace mozilla {
56 namespace dom {
57
58 struct NativeKeyBinding
59 {
60 CommandInt[] singleLineCommands;
61 CommandInt[] multiLineCommands;
62 CommandInt[] richTextCommands;
63 };
64
65 union MaybeNativeKeyBinding
66 {
67 NativeKeyBinding;
68 void_t;
69 };
70
71 intr protocol PBrowser
72 {
73 manager PContent;
74
75 manages PColorPicker;
76 manages PDocumentRenderer;
77 manages PContentPermissionRequest;
78 manages PFilePicker;
79 manages PRenderFrame;
80 manages POfflineCacheUpdate;
81 manages PIndexedDB;
82
83 both:
84 AsyncMessage(nsString aMessage, ClonedMessageData aData, CpowEntry[] aCpows,
85 Principal aPrincipal);
86
87 parent:
88 /**
89 * When child sends this message, parent should move focus to
90 * the next or previous focusable element.
91 */
92 MoveFocus(bool forward);
93
94 Event(RemoteDOMEvent aEvent);
95
96 intr CreateWindow() returns (PBrowser window);
97
98 sync SyncMessage(nsString aMessage, ClonedMessageData aData,
99 CpowEntry[] aCpows, Principal aPrincipal)
100 returns (nsString[] retval);
101
102 rpc RpcMessage(nsString aMessage, ClonedMessageData aData,
103 CpowEntry[] aCpows, Principal aPrincipal)
104 returns (nsString[] retval);
105
106 /**
107 * The IME sequence number (seqno) parameter is used to make sure
108 * that a notification is discarded if it arrives at the chrome process
109 * too late. If the notification is late and we accept it, we will have
110 * an out-of-date view of the content process, which means events that we
111 * dispatch based on this out-of-date view will be wrong also.
112 * (see Bug 599550 and Bug 591047 comments 44, 50, and 54)
113 *
114 * Chrome increments seqno and includes it in each IME event sent to
115 * content, and content sends its current seqno back to chrome with each
116 * notification. A notification is up-to-date only if the content
117 * seqno is the same as the current chrome seqno, meaning no additional
118 * event was sent to content before the notification was received
119 *
120 * On blur, chrome returns the current seqno to content, and content
121 * uses it to discard subsequent events until the content seqno and
122 * chrome seqno-on-blur match again. These events, meant for the blurred
123 * textfield, are discarded to prevent events going to the wrong target
124 */
125
126 /**
127 * Notifies chrome that there is a focus change involving an editable
128 * object (input, textarea, document, contentEditable. etc.)
129 *
130 * focus PR_TRUE if editable object is receiving focus
131 * PR_FALSE if losing focus
132 * preference Native widget preference for IME updates
133 * seqno Current seqno value on the chrome side
134 */
135 sync NotifyIMEFocus(bool focus)
136 returns (nsIMEUpdatePreference preference, uint32_t seqno);
137
138 /**
139 * Notifies chrome that there has been a change in text content
140 * One call can encompass both a delete and an insert operation
141 * Only called when NotifyIMEFocus returns PR_TRUE for mWantUpdates
142 *
143 * offset Starting offset of the change
144 * end Ending offset of the range deleted
145 * newEnd New ending offset after insertion
146 * causedByComposition true if the change is caused by composition
147 *
148 * for insertion, offset == end
149 * for deletion, offset == newEnd
150 */
151 NotifyIMETextChange(uint32_t offset, uint32_t end, uint32_t newEnd,
152 bool causedByComposition);
153
154 /**
155 * Notifies chrome that there is a IME compostion rect updated
156 *
157 * offset The starting offset of this rect
158 * rect The rect of first character of selected IME composition
159 * caretRect The rect of IME caret
160 */
161 NotifyIMESelectedCompositionRect(uint32_t offset, nsIntRect rect, nsIntRect caretRect);
162
163 /**
164 * Notifies chrome that there has been a change in selection
165 * Only called when NotifyIMEFocus returns PR_TRUE for mWantUpdates
166 *
167 * seqno Current seqno value on the content side
168 * anchor Offset where the selection started
169 * focus Offset where the caret is
170 * causedByComposition true if the change is caused by composition
171 */
172 NotifyIMESelection(uint32_t seqno, uint32_t anchor, uint32_t focus,
173 bool causedByComposition);
174
175 /**
176 * Notifies chrome to refresh its text cache
177 *
178 * text The entire content of the text field
179 */
180 NotifyIMETextHint(nsString text);
181
182 /**
183 * Instructs chrome to end any pending composition
184 *
185 * cancel PR_TRUE if composition should be cancelled
186 * composition Text to commit before ending the composition
187 *
188 * if cancel is PR_TRUE,
189 * widget should return empty string for composition
190 * if cancel is PR_FALSE,
191 * widget should return the current composition text
192 */
193 sync EndIMEComposition(bool cancel) returns (nsString composition);
194
195 /**
196 * Request that the parent process move focus to the browser's frame. If
197 * canRaise is true, the window can be raised if it is inactive.
198 */
199 RequestFocus(bool canRaise);
200
201 sync GetInputContext() returns (int32_t IMEEnabled, int32_t IMEOpen,
202 intptr_t NativeIMEContext);
203
204 SetInputContext(int32_t IMEEnabled,
205 int32_t IMEOpen,
206 nsString type,
207 nsString inputmode,
208 nsString actionHint,
209 int32_t cause,
210 int32_t focusChange);
211
212 sync IsParentWindowMainWidgetVisible() returns (bool visible);
213
214 /**
215 * Gets the DPI of the screen corresponding to this browser.
216 */
217 sync GetDPI() returns (float value);
218
219 /**
220 * Gets the default scaling factor of the screen corresponding to this browser.
221 */
222 sync GetDefaultScale() returns (double value);
223
224 /**
225 * Return native data of root widget
226 */
227 sync GetWidgetNativeData() returns (WindowsHandle value);
228
229 SetCursor(uint32_t value);
230 SetBackgroundColor(nscolor color);
231
232 /**
233 * Used to set the current text of the status tooltip.
234 * Nowadays this is mainly used for link locations on hover.
235 */
236 SetStatus(uint32_t type, nsString status);
237
238 /**
239 * Show/hide a tooltip when the mouse hovers over an element in the content
240 * document.
241 */
242 ShowTooltip(uint32_t x, uint32_t y, nsString tooltip);
243 HideTooltip();
244
245 /**
246 * Create an asynchronous color picker on the parent side,
247 * but don't open it yet.
248 */
249 PColorPicker(nsString title, nsString initialColor);
250
251 /**
252 * Initiates an asynchronous request for permission for the
253 * provided principal.
254 *
255 * @param aRequests
256 * The array of permissions to request.
257 * @param aPrincipal
258 * The principal of the request.
259 *
260 * NOTE: The principal is untrusted in the parent process. Only
261 * principals that can live in the content process should
262 * provided.
263 */
264 PContentPermissionRequest(PermissionRequest[] aRequests, Principal aPrincipal);
265
266 PFilePicker(nsString aTitle, int16_t aMode);
267
268 /**
269 * Create a layout frame (encapsulating a remote layer tree) for
270 * the page that is currently loaded in the <browser>.
271 */
272 sync PRenderFrame();
273
274 sync InitRenderFrame(PRenderFrame aFrame)
275 returns (ScrollingBehavior scrolling,
276 TextureFactoryIdentifier textureFactoryIdentifier, uint64_t layersId,
277 bool success);
278
279 /**
280 * Starts an offline application cache update.
281 * @param manifestURI
282 * URI of the manifest to fetch, the application cache group ID
283 * @param documentURI
284 * URI of the document that referred the manifest
285 * @param stickDocument
286 * True if the update was initiated by a document load that referred
287 * a manifest.
288 * False if the update was initiated by applicationCache.update() call.
289 *
290 * Tells the update to carry the documentURI to a potential separate
291 * update of implicit (master) items.
292 *
293 * Why this argument? If the document was not found in an offline cache
294 * before load and refers a manifest and this manifest itself has not
295 * been changed since the last fetch, we will not do the application
296 * cache group update. But we must cache the document (identified by the
297 * documentURI). This argument will ensure that a previously uncached
298 * document will get cached and that we don't re-cache a document that
299 * has already been cached (stickDocument=false).
300 */
301 POfflineCacheUpdate(URIParams manifestURI, URIParams documentURI,
302 bool stickDocument);
303
304 /**
305 * Sets "offline-app" permission for the principal. Called when we hit
306 * a web app with the manifest attribute in <html> and
307 * offline-apps.allow_by_default is set to true.
308 */
309 SetOfflinePermission(Principal principal);
310
311 sync PIndexedDB(nsCString group, nsCString asciiOrigin)
312 returns (bool allowed);
313
314 /**
315 * window.open from inside <iframe mozbrowser> is special. When the child
316 * process calls window.open, it creates a new PBrowser (in its own
317 * process), then calls BrowserFrameOpenWindow on it.
318 *
319 * The parent process gets a chance to accept or reject the window.open
320 * call, and windowOpened is set to true if we ended up going through with
321 * the window.open.
322 *
323 * @param opener the PBrowser whose content called window.open.
324 */
325 sync BrowserFrameOpenWindow(PBrowser opener, nsString aURL,
326 nsString aName, nsString aFeatures)
327 returns (bool windowOpened);
328
329 /**
330 * Instructs the TabParent to forward a request to zoom to a rect given in
331 * CSS pixels. This rect is relative to the document.
332 */
333 ZoomToRect(uint32_t aPresShellId, ViewID aViewId, CSSRect aRect);
334
335 /**
336 * We know for sure that content has either preventDefaulted or not
337 * preventDefaulted. This applies to an entire batch of touch events. It is
338 * expected that, if there are any DOM touch listeners, touch events will be
339 * batched and only processed for panning and zooming if content does not
340 * preventDefault.
341 */
342 ContentReceivedTouch(ScrollableLayerGuid aGuid, bool aPreventDefault);
343
344 /**
345 * Updates the zoom constraints for a scrollable frame in this tab.
346 * The zoom controller code lives on the parent side and so this allows it to
347 * have up-to-date zoom constraints.
348 */
349 UpdateZoomConstraints(uint32_t aPresShellId, ViewID aViewId, bool aIsRoot,
350 ZoomConstraints aConstraints);
351
352 __delete__();
353
354 ReplyKeyEvent(WidgetKeyboardEvent event);
355
356 sync RequestNativeKeyBindings(WidgetKeyboardEvent event)
357 returns (MaybeNativeKeyBinding bindings);
358
359 child:
360 /**
361 * Notify the remote browser that it has been Show()n on this
362 * side, with the given |visibleRect|. This message is expected
363 * to trigger creation of the remote browser's "widget".
364 *
365 * |Show()| and |Move()| take IntSizes rather than Rects because
366 * content processes always render to a virtual <0, 0> top-left
367 * point.
368 */
369 Show(nsIntSize size);
370
371 LoadURL(nsCString uri);
372
373 CacheFileDescriptor(nsString path, FileDescriptor fd);
374
375 UpdateDimensions(nsRect rect, nsIntSize size, ScreenOrientation orientation) compress;
376
377 UpdateFrame(FrameMetrics frame);
378
379 /**
380 * Acknowledge the receipt of a scroll offset update from the content
381 * process. This is used to manage concurrent scroll updates from many
382 * sources.
383 */
384 AcknowledgeScrollUpdate(ViewID aScrollId, uint32_t aScrollGeneration);
385
386 /**
387 * Requests handling of a double tap. |point| is in CSS pixels, relative to
388 * the scroll offset. This message is expected to round-trip back to
389 * ZoomToRect() with a rect indicating where we should zoom to.
390 */
391 HandleDoubleTap(CSSPoint point, ScrollableLayerGuid aGuid);
392
393 /**
394 * Requests handling of a single tap. |point| is in CSS pixels, relative to
395 * the scroll offset. This message is expected to send a "mousedown" and
396 * "mouseup" series of events at this point.
397 */
398 HandleSingleTap(CSSPoint point, ScrollableLayerGuid aGuid);
399
400 /**
401 * Requests handling of a long tap. |point| is in CSS pixels, relative to
402 * the scroll offset. This message is expected to send a "contextmenu"
403 * events at this point.
404 */
405 HandleLongTap(CSSPoint point, ScrollableLayerGuid aGuid);
406
407 /**
408 * Requests handling of releasing a long tap. |aPoint| is in CSS pixels,
409 * relative to the current scroll offset. In the case the "contextmenu"
410 * event generated by the preceding HandleLongTap call was not handled,
411 * this message is expected to generate a "mousedown" and "mouseup"
412 * series of events
413 */
414 HandleLongTapUp(CSSPoint point, ScrollableLayerGuid aGuid);
415
416 /**
417 * Notifies the child about various APZ state changes.
418 * See GeckoContentController::NotifyAPZStateChange() for details.
419 */
420 NotifyAPZStateChange(ViewID aViewId, APZStateChange aChange, int aArg);
421
422 /**
423 * Sending an activate message moves focus to the child.
424 */
425 Activate();
426
427 Deactivate();
428
429 /**
430 * @see nsIDOMWindowUtils sendMouseEvent.
431 */
432 MouseEvent(nsString aType,
433 float aX,
434 float aY,
435 int32_t aButton,
436 int32_t aClickCount,
437 int32_t aModifiers,
438 bool aIgnoreRootScrollFrame);
439
440 RealMouseEvent(WidgetMouseEvent event);
441 RealKeyEvent(WidgetKeyboardEvent event, MaybeNativeKeyBinding keyBinding);
442 MouseWheelEvent(WidgetWheelEvent event);
443 RealTouchEvent(WidgetTouchEvent aEvent, ScrollableLayerGuid aGuid);
444 // We use a separate message for touchmove events only to apply
445 // compression to them.
446 RealTouchMoveEvent(WidgetTouchEvent aEvent, ScrollableLayerGuid aGuid) compress;
447
448 /**
449 * @see nsIDOMWindowUtils sendKeyEvent.
450 */
451 KeyEvent(nsString aType,
452 int32_t aKeyCode,
453 int32_t aCharCode,
454 int32_t aModifiers,
455 bool aPreventDefault);
456
457 CompositionEvent(WidgetCompositionEvent event);
458
459 TextEvent(WidgetTextEvent event);
460
461 SelectionEvent(WidgetSelectionEvent event);
462
463 /**
464 * Activate event forwarding from client to parent.
465 */
466 ActivateFrameEvent(nsString aType, bool capture);
467
468 LoadRemoteScript(nsString aURL, bool aRunInGlobalScope);
469
470 /**
471 * Create a asynchronous request to render whatever document is
472 * loaded in the child when this message arrives. When the
473 * request finishes, PDocumentRenderer:__delete__ is sent back to
474 * this side to notify completion.
475 *
476 * |documentRect| is the area of the remote document to draw,
477 * transformed by |transform|. The rendered area will have the
478 * default background color |bgcolor|. |renderFlags| are the
479 * nsIPresShell::RenderDocument() flags to use on the remote side,
480 * and if true, |flushLayout| will do just that before rendering
481 * the document. The rendered image will be of size |renderSize|.
482 */
483 PDocumentRenderer(nsRect documentRect, Matrix transform,
484 nsString bgcolor,
485 uint32_t renderFlags, bool flushLayout,
486 nsIntSize renderSize);
487
488 /**
489 * Sent by the chrome process when it no longer wants this remote
490 * <browser>. The child side cleans up in response, then
491 * finalizing its death by sending back __delete__() to the
492 * parent.
493 */
494 Destroy();
495
496
497 /**
498 * Tell the child side if it has to update it's touchable region
499 * to the parent.
500 */
501 SetUpdateHitRegion(bool aEnabled);
502
503 /**
504 * Tell the child to update its docShell's active state.
505 */
506 SetIsDocShellActive(bool aIsActive);
507
508 /*
509 * FIXME: write protocol!
510
511 state LIVE:
512 send LoadURL goto LIVE;
513 //etc.
514 send Destroy goto DYING;
515
516 state DYING:
517 discard send blah;
518 // etc.
519 recv __delete__;
520 */
521 };
522
523 }
524 }

mercurial