blob: 16925c892af7ed3e643069d843cde3746992aba4 [file] [log] [blame]
Grace Klobafbe47c02009-05-14 17:31:45 -07001/*
2 IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -04003 consideration of your agreement to the following terms, and your use, installation,
4 modification or redistribution of this Apple software constitutes acceptance of these
5 terms. If you do not agree with these terms, please do not use, install, modify or
Grace Klobafbe47c02009-05-14 17:31:45 -07006 redistribute this Apple software.
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -04007
8 In consideration of your agreement to abide by the following terms, and subject to these
Derek Sollenbergerd53b56d2010-01-11 12:31:49 -05009 terms, Apple grants you a personal, non-exclusive license, under Appleƕs copyrights in
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -040010 this original Apple software (the "Apple Software"), to use, reproduce, modify and
11 redistribute the Apple Software, with or without modifications, in source and/or binary
12 forms; provided that if you redistribute the Apple Software in its entirety and without
13 modifications, you must retain this notice and the following text and disclaimers in all
14 such redistributions of the Apple Software. Neither the name, trademarks, service marks
15 or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
Grace Klobafbe47c02009-05-14 17:31:45 -070016 the Apple Software without specific prior written permission from Apple. Except as expressly
17 stated in this notice, no other rights or licenses, express or implied, are granted by Apple
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -040018 herein, including but not limited to any patent rights that may be infringed by your
Grace Klobafbe47c02009-05-14 17:31:45 -070019 derivative works or by other works in which the Apple Software may be incorporated.
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -040020
21 The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES,
22 EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
23 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
Grace Klobafbe47c02009-05-14 17:31:45 -070024 USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -040025
26 IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
27 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28 OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
29 REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
30 WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
Grace Klobafbe47c02009-05-14 17:31:45 -070031 OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#include <stdlib.h>
35#include "main.h"
36#include "PluginObject.h"
37
Derek Sollenbergerbb660dd2009-10-13 11:43:48 -040038int SubPlugin::getPluginWidth() {
39 PluginObject *obj = (PluginObject*) inst()->pdata;
40 return obj->window->width;
41}
42
43int SubPlugin::getPluginHeight() {
44 PluginObject *obj = (PluginObject*) inst()->pdata;
45 return obj->window->height;
46}
47
Derek Sollenberger349bc372011-01-04 16:14:34 -050048SurfaceSubPlugin::~SurfaceSubPlugin() {
49 setContext(NULL);
50}
51
Derek Sollenbergerd53b56d2010-01-11 12:31:49 -050052bool SurfaceSubPlugin::supportsDrawingModel(ANPDrawingModel model) {
53 return (model == kSurface_ANPDrawingModel);
54}
Derek Sollenberger51cce582009-12-01 08:26:20 -050055
Derek Sollenbergerd53b56d2010-01-11 12:31:49 -050056void SurfaceSubPlugin::setContext(jobject context) {
Derek Sollenberger51cce582009-12-01 08:26:20 -050057 JNIEnv* env = NULL;
Derek Sollenbergerd53b56d2010-01-11 12:31:49 -050058 if (gVM->GetEnv((void**) &env, JNI_VERSION_1_4) == JNI_OK) {
Derek Sollenberger51cce582009-12-01 08:26:20 -050059
Derek Sollenbergerd53b56d2010-01-11 12:31:49 -050060 // if one exists then free its global reference
61 if (m_context) {
62 env->DeleteGlobalRef(m_context);
63 m_context = NULL;
64 }
Derek Sollenberger51cce582009-12-01 08:26:20 -050065
Derek Sollenbergerd53b56d2010-01-11 12:31:49 -050066 // create a new global ref
67 if (context) {
68 context = env->NewGlobalRef(context);
69 }
70
71 // set the value
72 m_context = context;
Derek Sollenberger51cce582009-12-01 08:26:20 -050073 }
Derek Sollenberger51cce582009-12-01 08:26:20 -050074}
75
Grace Klobafbe47c02009-05-14 17:31:45 -070076static void pluginInvalidate(NPObject *obj);
77static bool pluginHasProperty(NPObject *obj, NPIdentifier name);
78static bool pluginHasMethod(NPObject *obj, NPIdentifier name);
79static bool pluginGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant);
80static bool pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant);
81static bool pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result);
82static bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
83static NPObject *pluginAllocate(NPP npp, NPClass *theClass);
84static void pluginDeallocate(NPObject *obj);
85static bool pluginRemoveProperty(NPObject *npobj, NPIdentifier name);
86static bool pluginEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count);
87
88
89
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -040090static NPClass pluginClass = {
Grace Klobafbe47c02009-05-14 17:31:45 -070091 NP_CLASS_STRUCT_VERSION,
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -040092 pluginAllocate,
93 pluginDeallocate,
Grace Klobafbe47c02009-05-14 17:31:45 -070094 pluginInvalidate,
95 pluginHasMethod,
96 pluginInvoke,
97 pluginInvokeDefault,
98 pluginHasProperty,
99 pluginGetProperty,
100 pluginSetProperty,
101 pluginRemoveProperty,
102 pluginEnumerate
103};
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -0400104
Grace Klobafbe47c02009-05-14 17:31:45 -0700105NPClass *getPluginClass(void)
106{
107 return &pluginClass;
108}
109
110static bool identifiersInitialized = false;
111
112#define ID_TESTFILE_PROPERTY 0
113#define NUM_PROPERTY_IDENTIFIERS 1
114
115static NPIdentifier pluginPropertyIdentifiers[NUM_PROPERTY_IDENTIFIERS];
116static const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
117 "testfile"
118};
119
120#define ID_GETTESTFILE_METHOD 0
121#define NUM_METHOD_IDENTIFIERS 1
122
123static NPIdentifier pluginMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
124static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
125 "getTestFile"
126};
127
128static void initializeIdentifiers(void)
129{
130 browser->getstringidentifiers(pluginPropertyIdentifierNames, NUM_PROPERTY_IDENTIFIERS, pluginPropertyIdentifiers);
131 browser->getstringidentifiers(pluginMethodIdentifierNames, NUM_METHOD_IDENTIFIERS, pluginMethodIdentifiers);
132}
133
134static bool pluginHasProperty(NPObject *obj, NPIdentifier name)
135{
136 int i;
137 for (i = 0; i < NUM_PROPERTY_IDENTIFIERS; i++)
138 if (name == pluginPropertyIdentifiers[i])
139 return true;
140 return false;
141}
142
143static bool pluginHasMethod(NPObject *obj, NPIdentifier name)
144{
145 int i;
146 for (i = 0; i < NUM_METHOD_IDENTIFIERS; i++)
147 if (name == pluginMethodIdentifiers[i])
148 return true;
149 return false;
150}
151
152static bool pluginGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant)
153{
154 PluginObject *plugin = (PluginObject *)obj;
155 if (name == pluginPropertyIdentifiers[ID_TESTFILE_PROPERTY]) {
156 BOOLEAN_TO_NPVARIANT(true, *variant);
157 return true;
158 }
159 return false;
160}
161
162static bool pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant)
163{
164 return false;
165}
166
167static bool pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result)
168{
169 PluginObject *plugin = (PluginObject *)obj;
170 if (name == pluginMethodIdentifiers[ID_GETTESTFILE_METHOD]) {
171 return true;
172 }
173 return false;
174}
175
176static bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result)
177{
178 return false;
179}
180
181static void pluginInvalidate(NPObject *obj)
182{
183 // Release any remaining references to JavaScript objects.
184}
185
186static NPObject *pluginAllocate(NPP npp, NPClass *theClass)
187{
188 PluginObject *newInstance = (PluginObject*) malloc(sizeof(PluginObject));
189 newInstance->header._class = theClass;
190 newInstance->header.referenceCount = 1;
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -0400191
Grace Klobafbe47c02009-05-14 17:31:45 -0700192 if (!identifiersInitialized) {
193 identifiersInitialized = true;
194 initializeIdentifiers();
195 }
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -0400196
Grace Klobafbe47c02009-05-14 17:31:45 -0700197 newInstance->npp = npp;
198
199 return &newInstance->header;
200}
201
Derek Sollenbergerd7ebf272009-06-18 11:19:41 -0400202static void pluginDeallocate(NPObject *obj)
Grace Klobafbe47c02009-05-14 17:31:45 -0700203{
204 free(obj);
205}
206
207static bool pluginRemoveProperty(NPObject *npobj, NPIdentifier name)
208{
209 return false;
210}
211
212static bool pluginEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count)
213{
214 return false;
215}