| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Ap
ple") in | |
| 3 consideration of your agreement to the following terms, and your use, installat
ion, | |
| 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, modif
y or | |
| 6 redistribute this Apple software. | |
| 7 | |
| 8 In consideration of your agreement to abide by the following terms, and subject
to these | |
| 9 terms, Apple grants you a personal, non-exclusive license, under Apple's copyri
ghts in | |
| 10 this original Apple software (the "Apple Software"), to use, reproduce, modify
and | |
| 11 redistribute the Apple Software, with or without modifications, in source and/o
r 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 disclaime
rs in all | |
| 14 such redistributions of the Apple Software. Neither the name, trademarks, serv
ice marks | |
| 15 or logos of Apple Computer, Inc. may be used to endorse or promote products der
ived from | |
| 16 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 gra
nted by Apple | |
| 18 herein, including but not limited to any patent rights that may be infringed by
your | |
| 19 derivative works or by other works in which the Apple Software may be incorpora
ted. | |
| 20 | |
| 21 The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WA
RRANTIES, | |
| 22 EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-
INFRINGEMENT, | |
| 23 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTW
ARE OR ITS | |
| 24 USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. | |
| 25 | |
| 26 IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONS
EQUENTIAL | |
| 27 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERV
ICES; 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 C
AUSED AND | |
| 30 WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY
OR | |
| 31 OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 32 */ | |
| 33 | |
| 34 #import <WebKit/npapi.h> | |
| 35 #import <WebKit/npfunctions.h> | |
| 36 #import <WebKit/npruntime.h> | |
| 37 | |
| 38 NPNetscapeFuncs *browser; | |
| 39 | |
| 40 NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc
, char* argn[], char* argv[], NPSavedData* saved); | |
| 41 NPError NPP_Destroy(NPP instance, NPSavedData** save); | |
| 42 NPError NPP_SetWindow(NPP instance, NPWindow* window); | |
| 43 NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool se
ekable, uint16_t* stype); | |
| 44 NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason); | |
| 45 int32_t NPP_WriteReady(NPP instance, NPStream* stream); | |
| 46 int32_t NPP_Write(NPP instance, NPStream* stream, int32_t offset, int32_t len, v
oid* buffer); | |
| 47 void NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname); | |
| 48 void NPP_Print(NPP instance, NPPrint* platformPrint); | |
| 49 int16_t NPP_HandleEvent(NPP instance, void* event); | |
| 50 void NPP_URLNotify(NPP instance, const char* URL, NPReason reason, void* notifyD
ata); | |
| 51 NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value); | |
| 52 NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value); | |
| 53 | |
| 54 #pragma export on | |
| 55 // Mach-o entry points | |
| 56 NPError NP_Initialize(NPNetscapeFuncs *browserFuncs); | |
| 57 NPError NP_GetEntryPoints(NPPluginFuncs *pluginFuncs); | |
| 58 void NP_Shutdown(void); | |
| 59 // For compatibility with CFM browsers. | |
| 60 int main(NPNetscapeFuncs *browserFuncs, NPPluginFuncs *pluginFuncs, NPP_Shutdown
ProcPtr *shutdown); | |
| 61 #pragma export off | |
| 62 | |
| 63 | |
| 64 typedef void (* FunctionPointer) (void); | |
| 65 typedef void (* TransitionVector) (void); | |
| 66 static FunctionPointer functionPointerForTVector(TransitionVector); | |
| 67 static TransitionVector tVectorForFunctionPointer(FunctionPointer); | |
| 68 | |
| 69 // Mach-o entry points | |
| 70 NPError NP_Initialize(NPNetscapeFuncs* browserFuncs) | |
| 71 { | |
| 72 browser = browserFuncs; | |
| 73 return NPERR_NO_ERROR; | |
| 74 } | |
| 75 | |
| 76 NPError NP_GetEntryPoints(NPPluginFuncs* pluginFuncs) | |
| 77 { | |
| 78 pluginFuncs->version = 11; | |
| 79 pluginFuncs->size = sizeof(pluginFuncs); | |
| 80 pluginFuncs->newp = NPP_New; | |
| 81 pluginFuncs->destroy = NPP_Destroy; | |
| 82 pluginFuncs->setwindow = NPP_SetWindow; | |
| 83 pluginFuncs->newstream = NPP_NewStream; | |
| 84 pluginFuncs->destroystream = NPP_DestroyStream; | |
| 85 pluginFuncs->asfile = NPP_StreamAsFile; | |
| 86 pluginFuncs->writeready = NPP_WriteReady; | |
| 87 pluginFuncs->write = (NPP_WriteProcPtr)NPP_Write; | |
| 88 pluginFuncs->print = NPP_Print; | |
| 89 pluginFuncs->event = NPP_HandleEvent; | |
| 90 pluginFuncs->urlnotify = NPP_URLNotify; | |
| 91 pluginFuncs->getvalue = NPP_GetValue; | |
| 92 pluginFuncs->setvalue = NPP_SetValue; | |
| 93 | |
| 94 return NPERR_NO_ERROR; | |
| 95 } | |
| 96 | |
| 97 void NP_Shutdown(void) | |
| 98 { | |
| 99 | |
| 100 } | |
| 101 | |
| 102 // For compatibility with CFM browsers. | |
| 103 int main(NPNetscapeFuncs *browserFuncs, NPPluginFuncs *pluginFuncs, NPP_Shutdown
ProcPtr *shutdown) | |
| 104 { | |
| 105 browser = malloc(sizeof(NPNetscapeFuncs)); | |
| 106 bzero(browser, sizeof(NPNetscapeFuncs)); | |
| 107 | |
| 108 browser->size = browserFuncs->size; | |
| 109 browser->version = browserFuncs->version; | |
| 110 | |
| 111 // Since this is a mach-o plugin and the browser is CFM because it is callin
g main, translate | |
| 112 // our function points into TVectors so the browser can call them. | |
| 113 browser->geturl = (NPN_GetURLProcPtr)functionPointerForTVector((TransitionVe
ctor)browserFuncs->geturl); | |
| 114 browser->posturl = (NPN_PostURLProcPtr)functionPointerForTVector((Transition
Vector)browserFuncs->posturl); | |
| 115 browser->requestread = (NPN_RequestReadProcPtr)functionPointerForTVector((Tr
ansitionVector)browserFuncs->requestread); | |
| 116 browser->newstream = (NPN_NewStreamProcPtr)functionPointerForTVector((Transi
tionVector)browserFuncs->newstream); | |
| 117 browser->write = (NPN_WriteProcPtr)functionPointerForTVector((TransitionVect
or)browserFuncs->write); | |
| 118 browser->destroystream = (NPN_DestroyStreamProcPtr)functionPointerForTVector
((TransitionVector)browserFuncs->destroystream); | |
| 119 browser->status = (NPN_StatusProcPtr)functionPointerForTVector((TransitionVe
ctor)browserFuncs->status); | |
| 120 browser->uagent = (NPN_UserAgentProcPtr)functionPointerForTVector((Transitio
nVector)browserFuncs->uagent); | |
| 121 browser->memalloc = (NPN_MemAllocProcPtr)functionPointerForTVector((Transiti
onVector)browserFuncs->memalloc); | |
| 122 browser->memfree = (NPN_MemFreeProcPtr)functionPointerForTVector((Transition
Vector)browserFuncs->memfree); | |
| 123 browser->memflush = (NPN_MemFlushProcPtr)functionPointerForTVector((Transiti
onVector)browserFuncs->memflush); | |
| 124 browser->reloadplugins = (NPN_ReloadPluginsProcPtr)functionPointerForTVector
((TransitionVector)browserFuncs->reloadplugins); | |
| 125 browser->geturlnotify = (NPN_GetURLNotifyProcPtr)functionPointerForTVector((
TransitionVector)browserFuncs->geturlnotify); | |
| 126 browser->posturlnotify = (NPN_PostURLNotifyProcPtr)functionPointerForTVector
((TransitionVector)browserFuncs->posturlnotify); | |
| 127 browser->getvalue = (NPN_GetValueProcPtr)functionPointerForTVector((Transiti
onVector)browserFuncs->getvalue); | |
| 128 browser->setvalue = (NPN_SetValueProcPtr)functionPointerForTVector((Transiti
onVector)browserFuncs->setvalue); | |
| 129 browser->invalidaterect = (NPN_InvalidateRectProcPtr)functionPointerForTVect
or((TransitionVector)browserFuncs->invalidaterect); | |
| 130 browser->invalidateregion = (NPN_InvalidateRegionProcPtr)functionPointerForT
Vector((TransitionVector)browserFuncs->invalidateregion); | |
| 131 browser->forceredraw = (NPN_ForceRedrawProcPtr)functionPointerForTVector((Tr
ansitionVector)browserFuncs->forceredraw); | |
| 132 browser->getJavaEnv = (NPN_GetJavaEnvProcPtr)functionPointerForTVector((Tran
sitionVector)browserFuncs->getJavaEnv); | |
| 133 browser->getJavaPeer = (NPN_GetJavaPeerProcPtr)functionPointerForTVector((Tr
ansitionVector)browserFuncs->getJavaPeer); | |
| 134 | |
| 135 pluginFuncs->version = 11; | |
| 136 pluginFuncs->size = sizeof(pluginFuncs); | |
| 137 pluginFuncs->newp = (NPP_NewProcPtr)tVectorForFunctionPointer((FunctionPoint
er)NPP_New); | |
| 138 pluginFuncs->destroy = (NPP_DestroyProcPtr)tVectorForFunctionPointer((Functi
onPointer)NPP_Destroy); | |
| 139 pluginFuncs->setwindow = (NPP_SetWindowProcPtr)tVectorForFunctionPointer((Fu
nctionPointer)NPP_SetWindow); | |
| 140 pluginFuncs->newstream = (NPP_NewStreamProcPtr)tVectorForFunctionPointer((Fu
nctionPointer)NPP_NewStream); | |
| 141 pluginFuncs->destroystream = (NPP_DestroyStreamProcPtr)tVectorForFunctionPoi
nter((FunctionPointer)NPP_DestroyStream); | |
| 142 pluginFuncs->asfile = (NPP_StreamAsFileProcPtr)tVectorForFunctionPointer((Fu
nctionPointer)NPP_StreamAsFile); | |
| 143 pluginFuncs->writeready = (NPP_WriteReadyProcPtr)tVectorForFunctionPointer((
FunctionPointer)NPP_WriteReady); | |
| 144 pluginFuncs->write = (NPP_WriteProcPtr)tVectorForFunctionPointer((FunctionPo
inter)NPP_Write); | |
| 145 pluginFuncs->print = (NPP_PrintProcPtr)tVectorForFunctionPointer((FunctionPo
inter)NPP_Print); | |
| 146 pluginFuncs->event = (NPP_HandleEventProcPtr)tVectorForFunctionPointer((Func
tionPointer)NPP_HandleEvent); | |
| 147 pluginFuncs->urlnotify = (NPP_URLNotifyProcPtr)tVectorForFunctionPointer((Fu
nctionPointer)NPP_URLNotify); | |
| 148 pluginFuncs->getvalue = (NPP_GetValueProcPtr)tVectorForFunctionPointer((Func
tionPointer)NPP_GetValue); | |
| 149 pluginFuncs->setvalue = (NPP_SetValueProcPtr)tVectorForFunctionPointer((Func
tionPointer)NPP_SetValue); | |
| 150 | |
| 151 *shutdown = (NPP_ShutdownProcPtr)tVectorForFunctionPointer((FunctionPointer)
NP_Shutdown); | |
| 152 | |
| 153 return NPERR_NO_ERROR; | |
| 154 } | |
| 155 | |
| 156 NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc
, char* argn[], char* argv[], NPSavedData* saved) | |
| 157 { | |
| 158 // Call window.alert("Success!") | |
| 159 NPError error; | |
| 160 NPObject *windowObject = NULL; | |
| 161 error = browser->getvalue(instance, NPNVWindowNPObject, &windowObject); | |
| 162 if (error == NPERR_NO_ERROR) { | |
| 163 NPVariant alertMessage; | |
| 164 STRINGZ_TO_NPVARIANT("Success!", alertMessage); | |
| 165 NPVariant result; | |
| 166 browser->invoke(instance, windowObject, browser->getstringidentifier("al
ert"), &alertMessage, 1, &result); | |
| 167 browser->releaseobject(windowObject); | |
| 168 } | |
| 169 | |
| 170 return NPERR_NO_ERROR; | |
| 171 } | |
| 172 | |
| 173 NPError NPP_Destroy(NPP instance, NPSavedData** save) | |
| 174 { | |
| 175 return NPERR_NO_ERROR; | |
| 176 } | |
| 177 | |
| 178 NPError NPP_SetWindow(NPP instance, NPWindow* window) | |
| 179 { | |
| 180 return NPERR_NO_ERROR; | |
| 181 } | |
| 182 | |
| 183 NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool se
ekable, uint16_t* stype) | |
| 184 { | |
| 185 *stype = NP_ASFILEONLY; | |
| 186 return NPERR_NO_ERROR; | |
| 187 } | |
| 188 | |
| 189 NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason) | |
| 190 { | |
| 191 return NPERR_NO_ERROR; | |
| 192 } | |
| 193 | |
| 194 int32_t NPP_WriteReady(NPP instance, NPStream* stream) | |
| 195 { | |
| 196 return 0; | |
| 197 } | |
| 198 | |
| 199 int32_t NPP_Write(NPP instance, NPStream* stream, int32_t offset, int32_t len, v
oid* buffer) | |
| 200 { | |
| 201 return 0; | |
| 202 } | |
| 203 | |
| 204 void NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname) | |
| 205 { | |
| 206 } | |
| 207 | |
| 208 void NPP_Print(NPP instance, NPPrint* platformPrint) | |
| 209 { | |
| 210 | |
| 211 } | |
| 212 | |
| 213 int16_t NPP_HandleEvent(NPP instance, void* event) | |
| 214 { | |
| 215 return 1; | |
| 216 } | |
| 217 | |
| 218 void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyD
ata) | |
| 219 { | |
| 220 | |
| 221 } | |
| 222 | |
| 223 NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value) | |
| 224 { | |
| 225 return NPERR_GENERIC_ERROR; | |
| 226 } | |
| 227 | |
| 228 NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value) | |
| 229 { | |
| 230 return NPERR_GENERIC_ERROR; | |
| 231 } | |
| 232 | |
| 233 // function pointer converters | |
| 234 | |
| 235 FunctionPointer functionPointerForTVector(TransitionVector tvp) | |
| 236 { | |
| 237 const uint32_t temp[6] = {0x3D800000, 0x618C0000, 0x800C0000, 0x804C0004, 0x
7C0903A6, 0x4E800420}; | |
| 238 uint32_t *newGlue = NULL; | |
| 239 | |
| 240 if (tvp != NULL) { | |
| 241 newGlue = (uint32_t *)malloc(sizeof(temp)); | |
| 242 if (newGlue != NULL) { | |
| 243 unsigned i; | |
| 244 for (i = 0; i < 6; i++) newGlue[i] = temp[i]; | |
| 245 newGlue[0] |= ((UInt32)tvp >> 16); | |
| 246 newGlue[1] |= ((UInt32)tvp & 0xFFFF); | |
| 247 MakeDataExecutable(newGlue, sizeof(temp)); | |
| 248 } | |
| 249 } | |
| 250 | |
| 251 return (FunctionPointer)newGlue; | |
| 252 } | |
| 253 | |
| 254 TransitionVector tVectorForFunctionPointer(FunctionPointer fp) | |
| 255 { | |
| 256 FunctionPointer *newGlue = NULL; | |
| 257 if (fp != NULL) { | |
| 258 newGlue = (FunctionPointer *)malloc(2 * sizeof(FunctionPointer)); | |
| 259 if (newGlue != NULL) { | |
| 260 newGlue[0] = fp; | |
| 261 newGlue[1] = NULL; | |
| 262 } | |
| 263 } | |
| 264 return (TransitionVector)newGlue; | |
| 265 } | |
| OLD | NEW |