Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 * vim: sw=4 ts=4 et :
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef dom_plugins_PluginInstanceParent_h
8 #define dom_plugins_PluginInstanceParent_h 1
10 #include "mozilla/plugins/PPluginInstanceParent.h"
11 #include "mozilla/plugins/PluginScriptableObjectParent.h"
12 #if defined(OS_WIN)
13 #include "mozilla/gfx/SharedDIBWin.h"
14 #include <d3d10_1.h>
15 #include "nsRefPtrHashtable.h"
16 #elif defined(MOZ_WIDGET_COCOA)
17 #include "mozilla/gfx/QuartzSupport.h"
18 #endif
20 #include "npfunctions.h"
21 #include "nsAutoPtr.h"
22 #include "nsDataHashtable.h"
23 #include "nsHashKeys.h"
24 #include "nsRect.h"
26 #ifdef MOZ_X11
27 class gfxXlibSurface;
28 #endif
29 #include "mozilla/unused.h"
31 class gfxASurface;
32 class gfxContext;
34 namespace mozilla {
35 namespace layers {
36 class ImageContainer;
37 class CompositionNotifySink;
38 }
39 namespace plugins {
41 class PBrowserStreamParent;
42 class PluginModuleParent;
44 class PluginInstanceParent : public PPluginInstanceParent
45 {
46 friend class PluginModuleParent;
47 friend class BrowserStreamParent;
48 friend class PluginStreamParent;
49 friend class StreamNotifyParent;
51 public:
52 PluginInstanceParent(PluginModuleParent* parent,
53 NPP npp,
54 const nsCString& mimeType,
55 const NPNetscapeFuncs* npniface);
57 virtual ~PluginInstanceParent();
59 bool Init();
60 NPError Destroy();
62 virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE;
64 virtual PPluginScriptableObjectParent*
65 AllocPPluginScriptableObjectParent() MOZ_OVERRIDE;
67 virtual bool
68 RecvPPluginScriptableObjectConstructor(PPluginScriptableObjectParent* aActor) MOZ_OVERRIDE;
70 virtual bool
71 DeallocPPluginScriptableObjectParent(PPluginScriptableObjectParent* aObject) MOZ_OVERRIDE;
72 virtual PBrowserStreamParent*
73 AllocPBrowserStreamParent(const nsCString& url,
74 const uint32_t& length,
75 const uint32_t& lastmodified,
76 PStreamNotifyParent* notifyData,
77 const nsCString& headers,
78 const nsCString& mimeType,
79 const bool& seekable,
80 NPError* rv,
81 uint16_t *stype) MOZ_OVERRIDE;
82 virtual bool
83 DeallocPBrowserStreamParent(PBrowserStreamParent* stream) MOZ_OVERRIDE;
85 virtual PPluginStreamParent*
86 AllocPPluginStreamParent(const nsCString& mimeType,
87 const nsCString& target,
88 NPError* result) MOZ_OVERRIDE;
89 virtual bool
90 DeallocPPluginStreamParent(PPluginStreamParent* stream) MOZ_OVERRIDE;
92 virtual bool
93 AnswerNPN_GetValue_NPNVnetscapeWindow(NativeWindowHandle* value,
94 NPError* result) MOZ_OVERRIDE;
95 virtual bool
96 AnswerNPN_GetValue_NPNVWindowNPObject(
97 PPluginScriptableObjectParent** value,
98 NPError* result) MOZ_OVERRIDE;
99 virtual bool
100 AnswerNPN_GetValue_NPNVPluginElementNPObject(
101 PPluginScriptableObjectParent** value,
102 NPError* result) MOZ_OVERRIDE;
103 virtual bool
104 AnswerNPN_GetValue_NPNVprivateModeBool(bool* value, NPError* result) MOZ_OVERRIDE;
106 virtual bool
107 AnswerNPN_GetValue_DrawingModelSupport(const NPNVariable& model, bool* value) MOZ_OVERRIDE;
109 virtual bool
110 AnswerNPN_GetValue_NPNVdocumentOrigin(nsCString* value, NPError* result) MOZ_OVERRIDE;
112 virtual bool
113 AnswerNPN_SetValue_NPPVpluginWindow(const bool& windowed, NPError* result) MOZ_OVERRIDE;
114 virtual bool
115 AnswerNPN_SetValue_NPPVpluginTransparent(const bool& transparent,
116 NPError* result) MOZ_OVERRIDE;
117 virtual bool
118 AnswerNPN_SetValue_NPPVpluginUsesDOMForCursor(const bool& useDOMForCursor,
119 NPError* result) MOZ_OVERRIDE;
120 virtual bool
121 AnswerNPN_SetValue_NPPVpluginDrawingModel(const int& drawingModel,
122 OptionalShmem *remoteImageData,
123 CrossProcessMutexHandle *mutex,
124 NPError* result) MOZ_OVERRIDE;
125 virtual bool
126 AnswerNPN_SetValue_NPPVpluginEventModel(const int& eventModel,
127 NPError* result) MOZ_OVERRIDE;
129 virtual bool
130 AnswerNPN_GetURL(const nsCString& url, const nsCString& target,
131 NPError *result) MOZ_OVERRIDE;
133 virtual bool
134 AnswerNPN_PostURL(const nsCString& url, const nsCString& target,
135 const nsCString& buffer, const bool& file,
136 NPError* result) MOZ_OVERRIDE;
138 virtual PStreamNotifyParent*
139 AllocPStreamNotifyParent(const nsCString& url, const nsCString& target,
140 const bool& post, const nsCString& buffer,
141 const bool& file,
142 NPError* result) MOZ_OVERRIDE;
144 virtual bool
145 AnswerPStreamNotifyConstructor(PStreamNotifyParent* actor,
146 const nsCString& url,
147 const nsCString& target,
148 const bool& post, const nsCString& buffer,
149 const bool& file,
150 NPError* result) MOZ_OVERRIDE;
152 virtual bool
153 DeallocPStreamNotifyParent(PStreamNotifyParent* notifyData) MOZ_OVERRIDE;
155 virtual bool
156 RecvNPN_InvalidateRect(const NPRect& rect) MOZ_OVERRIDE;
158 // Async rendering
159 virtual bool
160 RecvShow(const NPRect& updatedRect,
161 const SurfaceDescriptor& newSurface,
162 SurfaceDescriptor* prevSurface) MOZ_OVERRIDE;
164 virtual PPluginSurfaceParent*
165 AllocPPluginSurfaceParent(const WindowsSharedMemoryHandle& handle,
166 const gfxIntSize& size,
167 const bool& transparent) MOZ_OVERRIDE;
169 virtual bool
170 DeallocPPluginSurfaceParent(PPluginSurfaceParent* s) MOZ_OVERRIDE;
172 virtual bool
173 AnswerNPN_PushPopupsEnabledState(const bool& aState) MOZ_OVERRIDE;
175 virtual bool
176 AnswerNPN_PopPopupsEnabledState() MOZ_OVERRIDE;
178 virtual bool
179 AnswerNPN_GetValueForURL(const NPNURLVariable& variable,
180 const nsCString& url,
181 nsCString* value, NPError* result) MOZ_OVERRIDE;
183 virtual bool
184 AnswerNPN_SetValueForURL(const NPNURLVariable& variable,
185 const nsCString& url,
186 const nsCString& value, NPError* result) MOZ_OVERRIDE;
188 virtual bool
189 AnswerNPN_GetAuthenticationInfo(const nsCString& protocol,
190 const nsCString& host,
191 const int32_t& port,
192 const nsCString& scheme,
193 const nsCString& realm,
194 nsCString* username,
195 nsCString* password,
196 NPError* result) MOZ_OVERRIDE;
198 virtual bool
199 AnswerNPN_ConvertPoint(const double& sourceX,
200 const bool& ignoreDestX,
201 const double& sourceY,
202 const bool& ignoreDestY,
203 const NPCoordinateSpace& sourceSpace,
204 const NPCoordinateSpace& destSpace,
205 double *destX,
206 double *destY,
207 bool *result) MOZ_OVERRIDE;
209 virtual bool
210 AnswerNPN_InitAsyncSurface(const gfxIntSize& size,
211 const NPImageFormat& format,
212 NPRemoteAsyncSurface* surfData,
213 bool* result) MOZ_OVERRIDE;
215 virtual bool
216 RecvRedrawPlugin() MOZ_OVERRIDE;
218 virtual bool
219 RecvNegotiatedCarbon() MOZ_OVERRIDE;
221 virtual bool RecvReleaseDXGISharedSurface(const DXGISharedSurfaceHandle &aHandle) MOZ_OVERRIDE;
223 NPError NPP_SetWindow(const NPWindow* aWindow);
225 NPError NPP_GetValue(NPPVariable variable, void* retval);
226 NPError NPP_SetValue(NPNVariable variable, void* value);
228 void NPP_URLRedirectNotify(const char* url, int32_t status,
229 void* notifyData);
231 NPError NPP_NewStream(NPMIMEType type, NPStream* stream,
232 NPBool seekable, uint16_t* stype);
233 NPError NPP_DestroyStream(NPStream* stream, NPReason reason);
235 void NPP_Print(NPPrint* platformPrint);
237 int16_t NPP_HandleEvent(void* event);
239 void NPP_URLNotify(const char* url, NPReason reason, void* notifyData);
241 PluginModuleParent* Module()
242 {
243 return mParent;
244 }
246 const NPNetscapeFuncs* GetNPNIface()
247 {
248 return mNPNIface;
249 }
251 bool
252 RegisterNPObjectForActor(NPObject* aObject,
253 PluginScriptableObjectParent* aActor);
255 void
256 UnregisterNPObject(NPObject* aObject);
258 PluginScriptableObjectParent*
259 GetActorForNPObject(NPObject* aObject);
261 NPP
262 GetNPP()
263 {
264 return mNPP;
265 }
267 virtual bool
268 AnswerPluginFocusChange(const bool& gotFocus) MOZ_OVERRIDE;
270 nsresult AsyncSetWindow(NPWindow* window);
271 nsresult GetImageContainer(mozilla::layers::ImageContainer** aContainer);
272 nsresult GetImageSize(nsIntSize* aSize);
273 #ifdef XP_MACOSX
274 nsresult IsRemoteDrawingCoreAnimation(bool *aDrawing);
275 nsresult ContentsScaleFactorChanged(double aContentsScaleFactor);
276 #endif
277 nsresult SetBackgroundUnknown();
278 nsresult BeginUpdateBackground(const nsIntRect& aRect,
279 gfxContext** aCtx);
280 nsresult EndUpdateBackground(gfxContext* aCtx,
281 const nsIntRect& aRect);
282 void DidComposite() { unused << SendNPP_DidComposite(); }
284 private:
285 // Create an appropriate platform surface for a background of size
286 // |aSize|. Return true if successful.
287 bool CreateBackground(const nsIntSize& aSize);
288 void DestroyBackground();
289 SurfaceDescriptor BackgroundDescriptor() /*const*/;
291 typedef mozilla::layers::ImageContainer ImageContainer;
292 ImageContainer *GetImageContainer();
294 virtual PPluginBackgroundDestroyerParent*
295 AllocPPluginBackgroundDestroyerParent() MOZ_OVERRIDE;
297 virtual bool
298 DeallocPPluginBackgroundDestroyerParent(PPluginBackgroundDestroyerParent* aActor) MOZ_OVERRIDE;
300 bool InternalGetValueForNPObject(NPNVariable aVariable,
301 PPluginScriptableObjectParent** aValue,
302 NPError* aResult);
304 bool IsAsyncDrawing();
306 private:
307 PluginModuleParent* mParent;
308 NPP mNPP;
309 const NPNetscapeFuncs* mNPNIface;
310 NPWindowType mWindowType;
311 Shmem mRemoteImageDataShmem;
312 nsAutoPtr<CrossProcessMutex> mRemoteImageDataMutex;
313 int16_t mDrawingModel;
314 nsAutoPtr<mozilla::layers::CompositionNotifySink> mNotifySink;
316 nsDataHashtable<nsPtrHashKey<NPObject>, PluginScriptableObjectParent*> mScriptableObjects;
318 #if defined(OS_WIN)
319 private:
320 // Used in rendering windowless plugins in other processes.
321 bool SharedSurfaceSetWindow(const NPWindow* aWindow, NPRemoteWindow& aRemoteWindow);
322 void SharedSurfaceBeforePaint(RECT &rect, NPRemoteEvent& npremoteevent);
323 void SharedSurfaceAfterPaint(NPEvent* npevent);
324 void SharedSurfaceRelease();
325 // Used in handling parent/child forwarding of events.
326 static LRESULT CALLBACK PluginWindowHookProc(HWND hWnd, UINT message,
327 WPARAM wParam, LPARAM lParam);
328 void SubclassPluginWindow(HWND aWnd);
329 void UnsubclassPluginWindow();
331 private:
332 gfx::SharedDIBWin mSharedSurfaceDib;
333 nsIntRect mPluginPort;
334 nsIntRect mSharedSize;
335 HWND mPluginHWND;
336 WNDPROC mPluginWndProc;
337 bool mNestedEventState;
339 // This will automatically release the textures when this object goes away.
340 nsRefPtrHashtable<nsPtrHashKey<void>, ID3D10Texture2D> mTextureMap;
341 #endif // defined(XP_WIN)
342 #if defined(MOZ_WIDGET_COCOA)
343 private:
344 Shmem mShSurface;
345 uint16_t mShWidth;
346 uint16_t mShHeight;
347 CGColorSpaceRef mShColorSpace;
348 RefPtr<MacIOSurface> mIOSurface;
349 RefPtr<MacIOSurface> mFrontIOSurface;
350 #endif // definied(MOZ_WIDGET_COCOA)
352 // ObjectFrame layer wrapper
353 nsRefPtr<gfxASurface> mFrontSurface;
354 // For windowless+transparent instances, this surface contains a
355 // "pretty recent" copy of the pixels under its <object> frame.
356 // On the plugin side, we use this surface to avoid doing alpha
357 // recovery when possible. This surface is created and owned by
358 // the browser, but a "read-only" reference is sent to the plugin.
359 //
360 // We have explicitly chosen not to provide any guarantees about
361 // the consistency of the pixels in |mBackground|. A plugin may
362 // be able to observe partial updates to the background.
363 nsRefPtr<gfxASurface> mBackground;
365 nsRefPtr<ImageContainer> mImageContainer;
366 };
369 } // namespace plugins
370 } // namespace mozilla
372 #endif // ifndef dom_plugins_PluginInstanceParent_h