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/. */
6 
7 #ifndef PluginPRLibrary_h
8 #define PluginPRLibrary_h 1
9 
10 #include "mozilla/PluginLibrary.h"
11 #include "nsNPAPIPlugin.h"
12 #include "npfunctions.h"
13 
14 namespace mozilla {
15 
16 class PluginPRLibrary : public PluginLibrary
17 {
18 public:
PluginPRLibrary(const char * aFilePath,PRLibrary * aLibrary)19     PluginPRLibrary(const char* aFilePath, PRLibrary* aLibrary) :
20 #if defined(XP_UNIX) && !defined(XP_MACOSX)
21         mNP_Initialize(nullptr),
22 #else
23         mNP_Initialize(nullptr),
24 #endif
25         mNP_Shutdown(nullptr),
26         mNP_GetMIMEDescription(nullptr),
27 #if defined(XP_UNIX) && !defined(XP_MACOSX)
28         mNP_GetValue(nullptr),
29 #endif
30 #if defined(XP_WIN) || defined(XP_MACOSX)
31         mNP_GetEntryPoints(nullptr),
32 #endif
33         mNPP_New(nullptr),
34         mNPP_ClearSiteData(nullptr),
35         mNPP_GetSitesWithData(nullptr),
36         mLibrary(aLibrary),
37         mFilePath(aFilePath)
38     {
39         NS_ASSERTION(mLibrary, "need non-null lib");
40         // addref here??
41     }
42 
~PluginPRLibrary()43     virtual ~PluginPRLibrary()
44     {
45         // unref here??
46     }
47 
SetPlugin(nsNPAPIPlugin *)48     virtual void SetPlugin(nsNPAPIPlugin*) override { }
49 
HasRequiredFunctions()50     virtual bool HasRequiredFunctions() override {
51         mNP_Initialize = (NP_InitializeFunc)
52             PR_FindFunctionSymbol(mLibrary, "NP_Initialize");
53         if (!mNP_Initialize)
54             return false;
55 
56         mNP_Shutdown = (NP_ShutdownFunc)
57             PR_FindFunctionSymbol(mLibrary, "NP_Shutdown");
58         if (!mNP_Shutdown)
59             return false;
60 
61         mNP_GetMIMEDescription = (NP_GetMIMEDescriptionFunc)
62             PR_FindFunctionSymbol(mLibrary, "NP_GetMIMEDescription");
63 #ifndef XP_MACOSX
64         if (!mNP_GetMIMEDescription)
65             return false;
66 #endif
67 
68 #if defined(XP_UNIX) && !defined(XP_MACOSX)
69         mNP_GetValue = (NP_GetValueFunc)
70             PR_FindFunctionSymbol(mLibrary, "NP_GetValue");
71         if (!mNP_GetValue)
72             return false;
73 #endif
74 
75 #if defined(XP_WIN) || defined(XP_MACOSX)
76         mNP_GetEntryPoints = (NP_GetEntryPointsFunc)
77             PR_FindFunctionSymbol(mLibrary, "NP_GetEntryPoints");
78         if (!mNP_GetEntryPoints)
79             return false;
80 #endif
81         return true;
82     }
83 
84 #if defined(XP_UNIX) && !defined(XP_MACOSX) && !defined(MOZ_WIDGET_GONK)
85     virtual nsresult NP_Initialize(NPNetscapeFuncs* aNetscapeFuncs,
86                                    NPPluginFuncs* aFuncs, NPError* aError) override;
87 #else
88     virtual nsresult NP_Initialize(NPNetscapeFuncs* aNetscapeFuncs,
89                                    NPError* aError) override;
90 #endif
91 
92     virtual nsresult NP_Shutdown(NPError* aError) override;
93     virtual nsresult NP_GetMIMEDescription(const char** aMimeDesc) override;
94 
95     virtual nsresult NP_GetValue(void* aFuture, NPPVariable aVariable,
96                                  void* aValue, NPError* aError) override;
97 
98 #if defined(XP_WIN) || defined(XP_MACOSX)
99     virtual nsresult NP_GetEntryPoints(NPPluginFuncs* aFuncs, NPError* aError) override;
100 #endif
101 
102     virtual nsresult NPP_New(NPMIMEType aPluginType, NPP aInstance,
103                              uint16_t aMode, int16_t aArgc, char* aArgn[],
104                              char* aArgv[], NPSavedData* aSaved,
105                              NPError* aError) override;
106 
107     virtual nsresult NPP_ClearSiteData(const char* aSite, uint64_t aFlags,
108                                        uint64_t aMaxAge, nsCOMPtr<nsIClearSiteDataCallback> callback) override;
109     virtual nsresult NPP_GetSitesWithData(nsCOMPtr<nsIGetSitesWithDataCallback> callback) override;
110 
111     virtual nsresult AsyncSetWindow(NPP aInstance, NPWindow* aWindow) override;
112     virtual nsresult GetImageContainer(NPP aInstance, mozilla::layers::ImageContainer** aContainer) override;
113     virtual nsresult GetImageSize(NPP aInstance, nsIntSize* aSize) override;
IsOOP()114     virtual bool IsOOP() override { return false; }
115 #if defined(XP_MACOSX)
116     virtual nsresult IsRemoteDrawingCoreAnimation(NPP aInstance, bool* aDrawing) override;
117 #endif
118 #if defined(XP_MACOSX) || defined(XP_WIN)
119     virtual nsresult ContentsScaleFactorChanged(NPP aInstance, double aContentsScaleFactor) override;
120 #endif
121     virtual nsresult SetBackgroundUnknown(NPP instance) override;
122     virtual nsresult BeginUpdateBackground(NPP instance, const nsIntRect&,
123                                            DrawTarget** aDrawTarget) override;
124     virtual nsresult EndUpdateBackground(NPP instance,
125                                          const nsIntRect&) override;
DidComposite(NPP aInstance)126     virtual void DidComposite(NPP aInstance) override { }
GetLibraryPath(nsACString & aPath)127     virtual void GetLibraryPath(nsACString& aPath) { aPath.Assign(mFilePath); }
GetRunID(uint32_t * aRunID)128     virtual nsresult GetRunID(uint32_t* aRunID) override { return NS_ERROR_NOT_IMPLEMENTED; }
SetHasLocalInstance()129     virtual void SetHasLocalInstance() override { }
130 #if defined(XP_WIN)
131     virtual nsresult GetScrollCaptureContainer(NPP aInstance, mozilla::layers::ImageContainer** aContainer) override;
132 #endif
133     virtual nsresult HandledWindowedPluginKeyEvent(
134                        NPP aInstance,
135                        const mozilla::NativeEventData& aNativeKeyData,
136                        bool aIsCOnsumed) override;
137 
138 private:
139     NP_InitializeFunc mNP_Initialize;
140     NP_ShutdownFunc mNP_Shutdown;
141     NP_GetMIMEDescriptionFunc mNP_GetMIMEDescription;
142 #if defined(XP_UNIX) && !defined(XP_MACOSX)
143     NP_GetValueFunc mNP_GetValue;
144 #endif
145 #if defined(XP_WIN) || defined(XP_MACOSX)
146     NP_GetEntryPointsFunc mNP_GetEntryPoints;
147 #endif
148     NPP_NewProcPtr mNPP_New;
149     NPP_ClearSiteDataPtr mNPP_ClearSiteData;
150     NPP_GetSitesWithDataPtr mNPP_GetSitesWithData;
151     PRLibrary* mLibrary;
152     nsCString mFilePath;
153 };
154 
155 
156 } // namespace mozilla
157 
158 #endif  // ifndef PluginPRLibrary_h
159