|
1 /* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 include protocol PPluginBackgroundDestroyer; |
|
7 include protocol PPluginModule; |
|
8 include protocol PPluginScriptableObject; |
|
9 include protocol PBrowserStream; |
|
10 include protocol PPluginStream; |
|
11 include protocol PStreamNotify; |
|
12 include protocol PPluginSurface; |
|
13 |
|
14 include "mozilla/GfxMessageUtils.h"; |
|
15 |
|
16 using NPError from "npapi.h"; |
|
17 using struct mozilla::plugins::NPRemoteWindow from "mozilla/plugins/PluginMessageUtils.h"; |
|
18 using struct mozilla::plugins::NPRemoteEvent from "mozilla/plugins/PluginMessageUtils.h"; |
|
19 using NPRect from "npapi.h"; |
|
20 using NPImageFormat from "npapi.h"; |
|
21 using NPNURLVariable from "npapi.h"; |
|
22 using NPCoordinateSpace from "npapi.h"; |
|
23 using NPNVariable from "npapi.h"; |
|
24 using mozilla::plugins::NativeWindowHandle from "mozilla/plugins/PluginMessageUtils.h"; |
|
25 using gfxSurfaceType from "gfxTypes.h"; |
|
26 using gfxIntSize from "nsSize.h"; |
|
27 using struct mozilla::null_t from "ipc/IPCMessageUtils.h"; |
|
28 using mozilla::plugins::WindowsSharedMemoryHandle from "mozilla/plugins/PluginMessageUtils.h"; |
|
29 using mozilla::plugins::DXGISharedSurfaceHandle from "mozilla/plugins/PluginMessageUtils.h"; |
|
30 using mozilla::CrossProcessMutexHandle from "mozilla/ipc/CrossProcessMutex.h"; |
|
31 using struct SurfaceDescriptorX11 from "gfxipc/ShadowLayerUtils.h"; |
|
32 using struct nsIntRect from "nsRect.h"; |
|
33 |
|
34 namespace mozilla { |
|
35 namespace plugins { |
|
36 |
|
37 struct IOSurfaceDescriptor { |
|
38 uint32_t surfaceId; |
|
39 double contentsScaleFactor; |
|
40 }; |
|
41 |
|
42 union SurfaceDescriptor { |
|
43 Shmem; |
|
44 SurfaceDescriptorX11; |
|
45 PPluginSurface; // used on Windows |
|
46 IOSurfaceDescriptor; // used on OSX 10.5+ |
|
47 // Descriptor can be null here in case |
|
48 // 1) of first Show call (prevSurface is null) |
|
49 // 2) when child is going to destroy |
|
50 // and it just want to grab prevSurface |
|
51 // back without giving new surface |
|
52 null_t; |
|
53 }; |
|
54 |
|
55 union OptionalShmem { |
|
56 Shmem; |
|
57 null_t; |
|
58 }; |
|
59 |
|
60 union AsyncSurfaceDescriptor { |
|
61 Shmem; |
|
62 DXGISharedSurfaceHandle; |
|
63 }; |
|
64 |
|
65 struct NPRemoteAsyncSurface |
|
66 { |
|
67 uint32_t version; |
|
68 gfxIntSize size; |
|
69 NPImageFormat format; |
|
70 uint32_t stride; |
|
71 AsyncSurfaceDescriptor data; |
|
72 uintptr_t hostPtr; |
|
73 }; |
|
74 |
|
75 intr protocol PPluginInstance |
|
76 { |
|
77 manager PPluginModule; |
|
78 |
|
79 manages PPluginBackgroundDestroyer; |
|
80 manages PPluginScriptableObject; |
|
81 manages PBrowserStream; |
|
82 manages PPluginStream; |
|
83 manages PStreamNotify; |
|
84 manages PPluginSurface; |
|
85 |
|
86 child: |
|
87 intr __delete__(); |
|
88 |
|
89 intr NPP_SetWindow(NPRemoteWindow window); |
|
90 |
|
91 intr NPP_GetValue_NPPVpluginWantsAllNetworkStreams() |
|
92 returns (bool value, NPError result); |
|
93 |
|
94 // this message is not used on non-X platforms |
|
95 intr NPP_GetValue_NPPVpluginNeedsXEmbed() |
|
96 returns (bool value, NPError result); |
|
97 |
|
98 intr NPP_GetValue_NPPVpluginScriptableNPObject() |
|
99 returns (nullable PPluginScriptableObject value, NPError result); |
|
100 |
|
101 intr NPP_SetValue_NPNVprivateModeBool(bool value) returns (NPError result); |
|
102 intr NPP_GetValue_NPPVpluginNativeAccessibleAtkPlugId() |
|
103 returns (nsCString plug_id, NPError result); |
|
104 |
|
105 intr NPP_HandleEvent(NPRemoteEvent event) |
|
106 returns (int16_t handled); |
|
107 // special cases where we need to a shared memory buffer |
|
108 intr NPP_HandleEvent_Shmem(NPRemoteEvent event, Shmem buffer) |
|
109 returns (int16_t handled, Shmem rtnbuffer); |
|
110 // special cases where we need an iosurface |
|
111 intr NPP_HandleEvent_IOSurface(NPRemoteEvent event, uint32_t surfaceid) |
|
112 returns (int16_t handled); |
|
113 // special cases of HandleEvent to make mediating races simpler |
|
114 intr Paint(NPRemoteEvent event) |
|
115 returns (int16_t handled); |
|
116 // this is only used on windows to forward WM_WINDOWPOSCHANGE |
|
117 async WindowPosChanged(NPRemoteEvent event); |
|
118 // used on OS X to tell the child the contents scale factor |
|
119 // of its parent has changed |
|
120 async ContentsScaleFactorChanged(double aContentsScaleFactor); |
|
121 |
|
122 // ********************** Async plugins rendering |
|
123 // see https://wiki.mozilla.org/Gecko:AsyncPluginPainting |
|
124 // ********************** |
|
125 |
|
126 // Async version of SetWindow call |
|
127 // @param surfaceType - gfxASurface::gfxSurfaceType |
|
128 // plugin child must create offscreen buffer |
|
129 // with type equals to surfaceType |
|
130 async AsyncSetWindow(gfxSurfaceType surfaceType, NPRemoteWindow window); |
|
131 |
|
132 // There is now an opaque background behind this instance (or the |
|
133 // background was updated). The changed area is |rect|. The |
|
134 // browser owns the background surface, and it's read-only from |
|
135 // within the plugin process. |background| is either null_t to |
|
136 // refer to the existing background or a fresh descriptor. |
|
137 async UpdateBackground(SurfaceDescriptor background, nsIntRect rect); |
|
138 |
|
139 async NPP_DidComposite(); |
|
140 |
|
141 intr NPP_Destroy() |
|
142 returns (NPError rv); |
|
143 |
|
144 parent: |
|
145 intr NPN_GetValue_NPNVWindowNPObject() |
|
146 returns (nullable PPluginScriptableObject value, NPError result); |
|
147 intr NPN_GetValue_NPNVPluginElementNPObject() |
|
148 returns (nullable PPluginScriptableObject value, NPError result); |
|
149 intr NPN_GetValue_NPNVprivateModeBool() |
|
150 returns (bool value, NPError result); |
|
151 intr NPN_GetValue_NPNVnetscapeWindow() |
|
152 returns (NativeWindowHandle value, NPError result); |
|
153 intr NPN_GetValue_NPNVdocumentOrigin() |
|
154 returns (nsCString value, NPError result); |
|
155 intr NPN_GetValue_DrawingModelSupport(NPNVariable model) |
|
156 returns (bool value); |
|
157 |
|
158 intr NPN_SetValue_NPPVpluginWindow(bool windowed) |
|
159 returns (NPError result); |
|
160 intr NPN_SetValue_NPPVpluginTransparent(bool transparent) |
|
161 returns (NPError result); |
|
162 intr NPN_SetValue_NPPVpluginUsesDOMForCursor(bool useDOMForCursor) |
|
163 returns (NPError result); |
|
164 intr NPN_SetValue_NPPVpluginDrawingModel(int drawingModel) |
|
165 returns (OptionalShmem remoteImageData, CrossProcessMutexHandle mutex, NPError result); |
|
166 intr NPN_SetValue_NPPVpluginEventModel(int eventModel) |
|
167 returns (NPError result); |
|
168 |
|
169 intr NPN_GetURL(nsCString url, nsCString target) |
|
170 returns (NPError result); |
|
171 intr NPN_PostURL(nsCString url, nsCString target, nsCString buffer, bool file) |
|
172 returns (NPError result); |
|
173 |
|
174 /** |
|
175 * Covers both NPN_GetURLNotify and NPN_PostURLNotify. |
|
176 * @TODO This would be more readable as an overloaded method, |
|
177 * but IPDL doesn't allow that for constructors. |
|
178 */ |
|
179 intr PStreamNotify(nsCString url, nsCString target, bool post, |
|
180 nsCString buffer, bool file) |
|
181 returns (NPError result); |
|
182 |
|
183 async NPN_InvalidateRect(NPRect rect); |
|
184 |
|
185 // Give |newSurface|, containing this instance's updated pixels, to |
|
186 // the browser for compositing. When this method returns, any surface |
|
187 // previously passed to Show may be destroyed. |
|
188 // |
|
189 // @param rect - actually updated rectangle, comparing to prevSurface content |
|
190 // could be used for partial render of layer to topLevel context |
|
191 // @param newSurface - remotable surface |
|
192 // @param prevSurface - if the previous surface was shared-memory, returns |
|
193 // the shmem for reuse |
|
194 sync Show(NPRect updatedRect, SurfaceDescriptor newSurface) |
|
195 returns (SurfaceDescriptor prevSurface); |
|
196 |
|
197 async PPluginSurface(WindowsSharedMemoryHandle handle, |
|
198 gfxIntSize size, |
|
199 bool transparent); |
|
200 |
|
201 intr NPN_PushPopupsEnabledState(bool aState); |
|
202 |
|
203 intr NPN_PopPopupsEnabledState(); |
|
204 |
|
205 intr NPN_GetValueForURL(NPNURLVariable variable, nsCString url) |
|
206 returns (nsCString value, NPError result); |
|
207 |
|
208 intr NPN_SetValueForURL(NPNURLVariable variable, nsCString url, |
|
209 nsCString value) |
|
210 returns (NPError result); |
|
211 |
|
212 intr NPN_GetAuthenticationInfo(nsCString protocol_, nsCString host, |
|
213 int32_t port, nsCString scheme, |
|
214 nsCString realm) |
|
215 returns (nsCString username, nsCString password, NPError result); |
|
216 |
|
217 intr NPN_ConvertPoint(double sourceX, bool ignoreDestX, double sourceY, bool ignoreDestY, NPCoordinateSpace sourceSpace, |
|
218 NPCoordinateSpace destSpace) |
|
219 returns (double destX, double destY, bool result); |
|
220 |
|
221 async RedrawPlugin(); |
|
222 |
|
223 intr NPN_InitAsyncSurface(gfxIntSize size, NPImageFormat format) |
|
224 returns (NPRemoteAsyncSurface surfData, bool result); |
|
225 |
|
226 // Send notification that a plugin tried to negotiate Carbon NPAPI so that |
|
227 // users can be notified that restarting the browser in i386 mode may allow |
|
228 // them to use the plugin. |
|
229 sync NegotiatedCarbon(); |
|
230 |
|
231 // Notifies us we can release a Async Surface DXGI texture. |
|
232 async ReleaseDXGISharedSurface(DXGISharedSurfaceHandle handle); |
|
233 |
|
234 both: |
|
235 async PPluginScriptableObject(); |
|
236 |
|
237 child: |
|
238 /* NPP_NewStream */ |
|
239 intr PBrowserStream(nsCString url, |
|
240 uint32_t length, |
|
241 uint32_t lastmodified, |
|
242 nullable PStreamNotify notifyData, |
|
243 nsCString headers, |
|
244 nsCString mimeType, |
|
245 bool seekable) |
|
246 returns (NPError rv, |
|
247 uint16_t stype); |
|
248 |
|
249 parent: |
|
250 /* NPN_NewStream */ |
|
251 intr PPluginStream(nsCString mimeType, |
|
252 nsCString target) |
|
253 returns (NPError result); |
|
254 |
|
255 parent: |
|
256 intr PluginFocusChange(bool gotFocus); |
|
257 |
|
258 child: |
|
259 intr SetPluginFocus(); |
|
260 intr UpdateWindow(); |
|
261 |
|
262 async PPluginBackgroundDestroyer(); |
|
263 }; |
|
264 |
|
265 } // namespace plugins |
|
266 } // namespace mozilla |