| OLD | NEW |
| (Empty) |
| 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | |
| 2 /* ***** BEGIN LICENSE BLOCK ***** | |
| 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | |
| 4 * | |
| 5 * The contents of this file are subject to the Mozilla Public License Version | |
| 6 * 1.1 (the "License"); you may not use this file except in compliance with | |
| 7 * the License. You may obtain a copy of the License at | |
| 8 * http://www.mozilla.org/MPL/ | |
| 9 * | |
| 10 * Software distributed under the License is distributed on an "AS IS" basis, | |
| 11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |
| 12 * for the specific language governing rights and limitations under the | |
| 13 * License. | |
| 14 * | |
| 15 * The Original Code is mozilla.org code. | |
| 16 * | |
| 17 * The Initial Developer of the Original Code is | |
| 18 * Netscape Communications Corporation. | |
| 19 * Portions created by the Initial Developer are Copyright (C) 1998 | |
| 20 * the Initial Developer. All Rights Reserved. | |
| 21 * | |
| 22 * Contributor(s): | |
| 23 * | |
| 24 * Alternatively, the contents of this file may be used under the terms of | |
| 25 * either the GNU General Public License Version 2 or later (the "GPL"), or | |
| 26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | |
| 27 * in which case the provisions of the GPL or the LGPL are applicable instead | |
| 28 * of those above. If you wish to allow use of your version of this file only | |
| 29 * under the terms of either the GPL or the LGPL, and not to allow others to | |
| 30 * use your version of this file under the terms of the MPL, indicate your | |
| 31 * decision by deleting the provisions above and replace them with the notice | |
| 32 * and other provisions required by the GPL or the LGPL. If you do not delete | |
| 33 * the provisions above, a recipient may use your version of this file under | |
| 34 * the terms of any one of the MPL, the GPL or the LGPL. | |
| 35 * | |
| 36 * ***** END LICENSE BLOCK ***** */ | |
| 37 | |
| 38 #include "xp.h" | |
| 39 | |
| 40 #include "epmanager.h" | |
| 41 #include "plugload.h" | |
| 42 #include "logger.h" | |
| 43 | |
| 44 extern NPNetscapeFuncs NPNFuncs; | |
| 45 extern Logger * logger; | |
| 46 | |
| 47 NPNetscapeFuncs fakeNPNFuncs; | |
| 48 | |
| 49 extern NPPEntryPointManager * epManager; | |
| 50 | |
| 51 jref NPP_GetJavaClass (void) | |
| 52 { | |
| 53 if(logger) | |
| 54 logger->logCall(action_npp_get_java_class); | |
| 55 | |
| 56 if(logger) | |
| 57 logger->logReturn(action_npp_get_java_class); | |
| 58 return NULL; | |
| 59 } | |
| 60 | |
| 61 NPError NPP_New(NPMIMEType pluginType, | |
| 62 NPP instance, | |
| 63 uint16 mode, | |
| 64 int16 argc, | |
| 65 char* argn[], | |
| 66 char* argv[], | |
| 67 NPSavedData* saved) | |
| 68 { | |
| 69 if(epManager == NULL) | |
| 70 return NPERR_GENERIC_ERROR; | |
| 71 | |
| 72 if(instance == NULL) | |
| 73 return NPERR_INVALID_INSTANCE_ERROR; | |
| 74 | |
| 75 if(logger) | |
| 76 logger->logCall(action_npp_new, (DWORD)pluginType, (DWORD)instance, (DWORD)m
ode, (DWORD)argc, (DWORD)argn, (DWORD)argv, (DWORD)saved); | |
| 77 | |
| 78 /* now action begins */ | |
| 79 | |
| 80 if(NULL == epManager->findEntryPointsForPlugin(pluginType)) | |
| 81 { | |
| 82 // if it is first time in, we don't have it yet | |
| 83 // scan plugins dir for available plugins to see if we have anything | |
| 84 // for the given mimetype | |
| 85 XP_HLIB hLib = LoadRealPlugin(pluginType); | |
| 86 if(!hLib) | |
| 87 { | |
| 88 // what do we do if we don't? | |
| 89 return NPERR_GENERIC_ERROR; | |
| 90 } | |
| 91 | |
| 92 NP_GETENTRYPOINTS real_NP_GetEntryPoints = (NP_GETENTRYPOINTS)XP_GetSymbol(h
Lib, "NP_GetEntryPoints"); | |
| 93 if(!real_NP_GetEntryPoints) | |
| 94 return NPERR_GENERIC_ERROR; | |
| 95 | |
| 96 NP_INITIALIZE real_NP_Initialize = (NP_INITIALIZE)XP_GetSymbol(hLib, "NP_Ini
tialize"); | |
| 97 if(!real_NP_Initialize) | |
| 98 return NPERR_GENERIC_ERROR; | |
| 99 | |
| 100 NP_SHUTDOWN real_NP_Shutdown = (NP_SHUTDOWN)XP_GetSymbol(hLib, "NP_Shutdown"
); | |
| 101 if(!real_NP_Shutdown) | |
| 102 return NPERR_GENERIC_ERROR; | |
| 103 | |
| 104 // fill callbacks structs | |
| 105 NPPluginFuncs realNPPFuncs; | |
| 106 memset(&realNPPFuncs, 0, sizeof(NPPluginFuncs)); | |
| 107 realNPPFuncs.size = sizeof(NPPluginFuncs); | |
| 108 | |
| 109 real_NP_GetEntryPoints(&realNPPFuncs); | |
| 110 | |
| 111 if(logger) | |
| 112 logger->logSPY_NP_GetEntryPoints(&realNPPFuncs); | |
| 113 | |
| 114 // store the table with the entry point manager | |
| 115 epManager->createEntryPointsForPlugin(pluginType, &realNPPFuncs, real_NP_Shu
tdown, hLib); | |
| 116 | |
| 117 // inform the plugin about our entry point it should call | |
| 118 memset((void *)&fakeNPNFuncs, 0, sizeof(fakeNPNFuncs)); | |
| 119 | |
| 120 fakeNPNFuncs.size = sizeof(fakeNPNFuncs); | |
| 121 fakeNPNFuncs.version = NPNFuncs.version; | |
| 122 fakeNPNFuncs.geturlnotify = NPN_GetURLNotify; | |
| 123 fakeNPNFuncs.geturl = NPN_GetURL; | |
| 124 fakeNPNFuncs.posturlnotify = NPN_PostURLNotify; | |
| 125 fakeNPNFuncs.posturl = NPN_PostURL; | |
| 126 fakeNPNFuncs.requestread = NPN_RequestRead; | |
| 127 fakeNPNFuncs.newstream = NPN_NewStream; | |
| 128 fakeNPNFuncs.write = NPN_Write; | |
| 129 fakeNPNFuncs.destroystream = NPN_DestroyStream; | |
| 130 fakeNPNFuncs.status = NPN_Status; | |
| 131 fakeNPNFuncs.uagent = NPN_UserAgent; | |
| 132 fakeNPNFuncs.memalloc = NPN_MemAlloc; | |
| 133 fakeNPNFuncs.memfree = NPN_MemFree; | |
| 134 fakeNPNFuncs.memflush = NPN_MemFlush; | |
| 135 fakeNPNFuncs.reloadplugins = NPN_ReloadPlugins; | |
| 136 fakeNPNFuncs.getJavaEnv = NPN_GetJavaEnv; | |
| 137 fakeNPNFuncs.getJavaPeer = NPN_GetJavaPeer; | |
| 138 fakeNPNFuncs.getvalue = NPN_GetValue; | |
| 139 fakeNPNFuncs.setvalue = NPN_SetValue; | |
| 140 fakeNPNFuncs.invalidaterect = NPN_InvalidateRect; | |
| 141 fakeNPNFuncs.invalidateregion = NPN_InvalidateRegion; | |
| 142 fakeNPNFuncs.forceredraw = NPN_ForceRedraw; | |
| 143 fakeNPNFuncs.getstringidentifier = NPN_GetStringIdentifier; | |
| 144 fakeNPNFuncs.getstringidentifiers = NPN_GetStringIdentifiers; | |
| 145 fakeNPNFuncs.getintidentifier = NPN_GetIntIdentifier; | |
| 146 fakeNPNFuncs.identifierisstring = NPN_IdentifierIsString; | |
| 147 fakeNPNFuncs.utf8fromidentifier = NPN_UTF8FromIdentifier; | |
| 148 fakeNPNFuncs.intfromidentifier = NPN_IntFromIdentifier; | |
| 149 fakeNPNFuncs.createobject = NPN_CreateObject; | |
| 150 fakeNPNFuncs.retainobject = NPN_RetainObject; | |
| 151 fakeNPNFuncs.releaseobject = NPN_ReleaseObject; | |
| 152 fakeNPNFuncs.invoke = NPN_Invoke; | |
| 153 fakeNPNFuncs.invokeDefault = NPN_InvokeDefault; | |
| 154 fakeNPNFuncs.evaluate = NPN_Evaluate; | |
| 155 fakeNPNFuncs.getproperty = NPN_GetProperty; | |
| 156 fakeNPNFuncs.setproperty = NPN_SetProperty; | |
| 157 fakeNPNFuncs.removeproperty = NPN_RemoveProperty; | |
| 158 fakeNPNFuncs.hasproperty = NPN_HasProperty; | |
| 159 fakeNPNFuncs.hasmethod = NPN_HasMethod; | |
| 160 fakeNPNFuncs.releasevariantvalue = NPN_ReleaseVariantValue; | |
| 161 fakeNPNFuncs.setexception = NPN_SetException; | |
| 162 fakeNPNFuncs.pushpopupsenabledstate = NPN_PushPopupsEnabledState; | |
| 163 fakeNPNFuncs.poppopupsenabledstate = NPN_PopPopupsEnabledState; | |
| 164 fakeNPNFuncs.enumerate = NPN_Enumerate; | |
| 165 | |
| 166 if(logger) | |
| 167 logger->logSPY_NP_Initialize(); | |
| 168 | |
| 169 real_NP_Initialize(&fakeNPNFuncs); | |
| 170 } | |
| 171 | |
| 172 NPError rv = epManager->callNPP_New(pluginType, instance, mode, argc, argn, ar
gv, saved); | |
| 173 | |
| 174 if(logger) | |
| 175 logger->logReturn(action_npp_new); | |
| 176 | |
| 177 return rv; | |
| 178 } | |
| 179 | |
| 180 NPError NPP_Destroy (NPP instance, NPSavedData** save) | |
| 181 { | |
| 182 if(epManager == NULL) | |
| 183 return NPERR_GENERIC_ERROR; | |
| 184 | |
| 185 if(instance == NULL) | |
| 186 return NPERR_INVALID_INSTANCE_ERROR; | |
| 187 | |
| 188 BOOL last = FALSE; | |
| 189 | |
| 190 if(logger) | |
| 191 logger->logCall(action_npp_destroy, (DWORD)instance, (DWORD)save); | |
| 192 | |
| 193 NPError rv = epManager->callNPP_Destroy(instance, save, &last); | |
| 194 | |
| 195 if(logger) | |
| 196 logger->logReturn(action_npp_destroy, rv); | |
| 197 | |
| 198 if(last && logger->bSPALID) | |
| 199 { | |
| 200 // this will log it | |
| 201 epManager->callNP_Shutdown(instance); | |
| 202 | |
| 203 XP_HLIB hLib = NULL; | |
| 204 | |
| 205 epManager->removeEntryPointsForPlugin(instance, &hLib); | |
| 206 | |
| 207 UnloadRealPlugin(hLib); | |
| 208 } | |
| 209 return rv; | |
| 210 } | |
| 211 | |
| 212 NPError NPP_SetWindow (NPP instance, NPWindow* pNPWindow) | |
| 213 { | |
| 214 if(epManager == NULL) | |
| 215 return NPERR_GENERIC_ERROR; | |
| 216 | |
| 217 if(instance == NULL) | |
| 218 return NPERR_INVALID_INSTANCE_ERROR; | |
| 219 | |
| 220 if(logger) | |
| 221 logger->logCall(action_npp_set_window, (DWORD)instance, (DWORD)pNPWindow); | |
| 222 | |
| 223 NPError rv = epManager->callNPP_SetWindow(instance, pNPWindow); | |
| 224 | |
| 225 if(logger) | |
| 226 logger->logReturn(action_npp_set_window, rv); | |
| 227 | |
| 228 return rv; | |
| 229 } | |
| 230 | |
| 231 NPError NPP_NewStream(NPP instance, | |
| 232 NPMIMEType type, | |
| 233 NPStream* stream, | |
| 234 NPBool seekable, | |
| 235 uint16* stype) | |
| 236 { | |
| 237 if(epManager == NULL) | |
| 238 return NPERR_GENERIC_ERROR; | |
| 239 | |
| 240 if(instance == NULL) | |
| 241 return NPERR_INVALID_INSTANCE_ERROR; | |
| 242 | |
| 243 if(logger) | |
| 244 logger->logCall(action_npp_new_stream, (DWORD)instance, (DWORD)type, (DWORD)
stream, (DWORD)seekable, (DWORD)stype); | |
| 245 | |
| 246 NPError rv = epManager->callNPP_NewStream(instance, type, stream, seekable, st
ype); | |
| 247 | |
| 248 if(logger) | |
| 249 logger->logReturn(action_npp_new_stream, rv); | |
| 250 | |
| 251 return rv; | |
| 252 } | |
| 253 | |
| 254 int32 NPP_WriteReady (NPP instance, NPStream *stream) | |
| 255 { | |
| 256 if(epManager == NULL) | |
| 257 return NPERR_GENERIC_ERROR; | |
| 258 | |
| 259 if(instance == NULL) | |
| 260 return NPERR_INVALID_INSTANCE_ERROR; | |
| 261 | |
| 262 if(logger) | |
| 263 logger->logCall(action_npp_write_ready, (DWORD)instance, (DWORD)stream); | |
| 264 | |
| 265 int32 rv = epManager->callNPP_WriteReady(instance, stream); | |
| 266 | |
| 267 if(logger) | |
| 268 logger->logReturn(action_npp_write_ready, rv); | |
| 269 | |
| 270 return rv; | |
| 271 } | |
| 272 | |
| 273 int32 NPP_Write (NPP instance, NPStream *stream, int32 offset, int32 len, void *
buffer) | |
| 274 { | |
| 275 if(epManager == NULL) | |
| 276 return NPERR_GENERIC_ERROR; | |
| 277 | |
| 278 if(instance == NULL) | |
| 279 return NPERR_INVALID_INSTANCE_ERROR; | |
| 280 | |
| 281 if(logger) | |
| 282 logger->logCall(action_npp_write, (DWORD)instance, (DWORD)stream, (DWORD)off
set, (DWORD)len, (DWORD)buffer); | |
| 283 | |
| 284 int32 rv = epManager->callNPP_Write(instance, stream, offset, len, buffer); | |
| 285 | |
| 286 if(logger) | |
| 287 logger->logReturn(action_npp_write, rv); | |
| 288 | |
| 289 return rv; | |
| 290 } | |
| 291 | |
| 292 NPError NPP_DestroyStream (NPP instance, NPStream *stream, NPError reason) | |
| 293 { | |
| 294 if(epManager == NULL) | |
| 295 return NPERR_GENERIC_ERROR; | |
| 296 | |
| 297 if(instance == NULL) | |
| 298 return NPERR_INVALID_INSTANCE_ERROR; | |
| 299 | |
| 300 if(logger) | |
| 301 logger->logCall(action_npp_destroy_stream, (DWORD)instance, (DWORD)stream, (
DWORD)reason); | |
| 302 | |
| 303 NPError rv = epManager->callNPP_DestroyStream(instance, stream, reason); | |
| 304 | |
| 305 if(logger) | |
| 306 logger->logReturn(action_npp_destroy_stream, rv); | |
| 307 | |
| 308 return rv; | |
| 309 } | |
| 310 | |
| 311 void NPP_StreamAsFile (NPP instance, NPStream* stream, const char* fname) | |
| 312 { | |
| 313 if(epManager == NULL) | |
| 314 return; | |
| 315 | |
| 316 if(instance == NULL) | |
| 317 return; | |
| 318 | |
| 319 if(logger) | |
| 320 logger->logCall(action_npp_stream_as_file, (DWORD)instance, (DWORD)stream, (
DWORD)fname); | |
| 321 | |
| 322 epManager->callNPP_StreamAsFile(instance, stream, fname); | |
| 323 } | |
| 324 | |
| 325 void NPP_Print (NPP instance, NPPrint* printInfo) | |
| 326 { | |
| 327 if(epManager == NULL) | |
| 328 return; | |
| 329 | |
| 330 if(logger) | |
| 331 logger->logCall(action_npp_print, (DWORD)instance, (DWORD)printInfo); | |
| 332 | |
| 333 epManager->callNPP_Print(instance, printInfo); | |
| 334 } | |
| 335 | |
| 336 void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyD
ata) | |
| 337 { | |
| 338 if(epManager == NULL) | |
| 339 return; | |
| 340 | |
| 341 if(instance == NULL) | |
| 342 return; | |
| 343 | |
| 344 if(logger) | |
| 345 logger->logCall(action_npp_url_notify, (DWORD)instance, (DWORD)url, (DWORD)r
eason, (DWORD)notifyData); | |
| 346 | |
| 347 epManager->callNPP_URLNotify(instance, url, reason, notifyData); | |
| 348 } | |
| 349 | |
| 350 NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value) | |
| 351 { | |
| 352 if(epManager == NULL) | |
| 353 return NPERR_GENERIC_ERROR; | |
| 354 | |
| 355 if(instance == NULL) | |
| 356 return NPERR_INVALID_INSTANCE_ERROR; | |
| 357 | |
| 358 if(logger) | |
| 359 logger->logCall(action_npp_get_value, (DWORD)instance, (DWORD)variable, (DWO
RD)value); | |
| 360 | |
| 361 NPError rv = epManager->callNPP_GetValue(instance, variable, value); | |
| 362 | |
| 363 if(logger) | |
| 364 logger->logReturn(action_npp_get_value, rv); | |
| 365 | |
| 366 return rv; | |
| 367 } | |
| 368 | |
| 369 NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value) | |
| 370 { | |
| 371 if(epManager == NULL) | |
| 372 return NPERR_GENERIC_ERROR; | |
| 373 | |
| 374 if(instance == NULL) | |
| 375 return NPERR_INVALID_INSTANCE_ERROR; | |
| 376 | |
| 377 if(logger) | |
| 378 logger->logCall(action_npp_set_value, (DWORD)instance, (DWORD)variable, (DWO
RD)value); | |
| 379 | |
| 380 NPError rv = epManager->callNPP_SetValue(instance, variable, value); | |
| 381 | |
| 382 if(logger) | |
| 383 logger->logReturn(action_npp_set_value, rv); | |
| 384 | |
| 385 return rv; | |
| 386 } | |
| 387 | |
| 388 int16 NPP_HandleEvent(NPP instance, void* event) | |
| 389 { | |
| 390 if(epManager == NULL) | |
| 391 return 0; | |
| 392 | |
| 393 if(instance == NULL) | |
| 394 return 0; | |
| 395 | |
| 396 if(logger) | |
| 397 logger->logCall(action_npp_handle_event, (DWORD)instance, (DWORD)event); | |
| 398 | |
| 399 int16 rv = epManager->callNPP_HandleEvent(instance, event); | |
| 400 | |
| 401 if(logger) | |
| 402 logger->logReturn(action_npp_handle_event, rv); | |
| 403 | |
| 404 return rv; | |
| 405 } | |
| OLD | NEW |