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
|
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 8 -*- */
/* vim: set sw=4 ts=8 et tw=80 ft=cpp : */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
include protocol PBrowser;
#ifdef ACCESSIBILITY
include protocol PDocAccessible;
#endif
include DOMTypes;
include "mozilla/LayoutMessageUtils.h";
include "mozilla/dom/BindingIPCUtils.h";
include "mozilla/dom/DocShellMessageUtils.h";
include "mozilla/dom/TabMessageUtils.h";
using mozilla::layers::LayersObserverEpoch from "mozilla/layers/LayersTypes.h";
using class mozilla::WidgetMouseEvent from "ipc/nsGUIEventIPC.h";
using mozilla::a11y::IDispatchHolder from "mozilla/a11y/IPCTypes.h";
using mozilla::dom::EffectsInfo from "mozilla/dom/EffectsInfo.h";
using mozilla::ScrollAxis from "mozilla/PresShellForwards.h";
using mozilla::ScrollFlags from "mozilla/PresShellForwards.h";
using struct nsRect from "nsRect.h";
using CallerType from "mozilla/dom/BindingDeclarations.h";
using nsIntRect from "nsRect.h";
using mozilla::dom::EmbedderElementEventType from "mozilla/dom/TabMessageTypes.h";
using refcounted class nsDocShellLoadState from "nsDocShellLoadState.h";
using mozilla::IntrinsicSize from "nsIFrame.h";
using mozilla::AspectRatio from "mozilla/AspectRatio.h";
namespace mozilla {
namespace dom {
/**
* A PBrowserBridge connects an iframe/browser in a content process to the
* PBrowser that manages the embedded content.
*
* See `dom/docs/Fission-IPC-Diagram.svg` for an overview of the DOM IPC
* actors.
*/
async refcounted protocol PBrowserBridge {
manager PBrowser;
child:
/**
* Request that the IPC child / Web parent process move focus to the
* browser's frame. If canRaise is true, the window can be raised if
* it is inactive.
*/
async RequestFocus(bool canRaise, CallerType aCallerType);
/**
* When IPC parent / Web child sends this message, the IPC child / Web parent
* should move focus to the next or previous focusable element or document.
*/
async MoveFocus(bool forward, bool forDocumentNavigation);
/**
* Send the child the COM proxy for the embedded document accessible.
*/
async SetEmbeddedDocAccessibleCOMProxy(IDispatchHolder aCOMProxy);
/**
* Called once this PBrowserBridge's OOP subdoc no longer blocks its
* embedding element's and embedding doc's 'load' events.
*/
async MaybeFireEmbedderLoadEvents(EmbedderElementEventType aFireEventAtEmbeddingElement);
async ScrollRectIntoView(nsRect aRect, ScrollAxis aVertical,
ScrollAxis aHorizontal, ScrollFlags aScrollFlags,
int32_t aAppUnitsPerDevPixel);
async SubFrameCrashed();
async IntrinsicSizeOrRatioChanged(IntrinsicSize? aIntrinsicSize,
AspectRatio? aIntrinsicRatio);
parent:
// Destroy the remote web browser due to the nsFrameLoader going away.
async __delete__();
// DocShell messaging.
async LoadURL(nsDocShellLoadState aLoadState);
async ResumeLoad(uint64_t aPendingSwitchID);
// Out of process rendering.
async Show(OwnerShowInfo info);
async ScrollbarPreferenceChanged(ScrollbarPreference pref);
async UpdateDimensions(nsIntRect rect, ScreenIntSize size) compressall;
async RenderLayers(bool aEnabled, LayersObserverEpoch aEpoch);
async UpdateEffects(EffectsInfo aEffects);
/**
* Navigate by key (Tab/Shift+Tab/F6/Shift+f6).
*/
async NavigateByKey(bool aForward, bool aForDocumentNavigation);
/**
* Dispatch the given synthesized mousemove event to the child.
*/
async DispatchSynthesizedMouseEvent(WidgetMouseEvent event);
/**
* Sending an activate message moves focus to the iframe.
*/
async Activate(uint64_t aActionId);
async Deactivate(bool aWindowLowering, uint64_t aActionId);
async SetIsUnderHiddenEmbedderElement(bool aIsUnderHiddenEmbedderElement);
async WillChangeProcess();
#ifdef ACCESSIBILITY
/**
* Tell the parent the accessible for this iframe's embedder
* OuterDocAccessible.
* aDoc is the actor for the containing document.
* aID is the unique id of the embedder accessible within that document.
*/
async SetEmbedderAccessible(PDocAccessible aDoc, uint64_t aID);
#endif
};
} // namespace dom
} // namespace mozilla
|