| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #include <string>
- #include <vector>
- #include "npWebGamePlugin.h"
- #include "../common/webCommon.h"
- // Functions exported from the browser to our plugin
- static NPNetscapeFuncs NPNFuncs;
- // Set once both the web page and plugin are fully loaded (including any possible Javascript <-> TorqueScript exports/imports)
- static BOOL gInitialized = false;
- #ifndef WIN32
- // Entry points into our plugin for Safari
- extern "C" {
- #pragma GCC visibility push(default)
- NPError NP_Initialize (NPNetscapeFuncs *browser);
- NPError NP_GetEntryPoints (NPPluginFuncs *plugin);
- NPError NP_Shutdown();
- #pragma GCC visibility pop
- }
- #endif
- // Converts a NPVARIANT variable to a C string representation
- const char* MY_NPVARIANT_TO_STRING(const NPVariant& f)
- {
- static std::string result;
- char r[1024] = {0};
- if (NPVARIANT_IS_VOID(f) || NPVARIANT_IS_NULL(f))
- return "";
- if (NPVARIANT_IS_STRING(f))
- {
- NPString str = NPVARIANT_TO_STRING(f);
- result = std::string(str.UTF8Characters, str.UTF8Length);
- return result.c_str();
- }
- if (NPVARIANT_IS_BOOLEAN(f))
- {
- if (NPVARIANT_TO_BOOLEAN(f))
- return "1";
- return "0";
- }
- if (NPVARIANT_IS_INT32(f))
- {
- sprintf(r, "%i", NPVARIANT_TO_INT32(f));
- result = r;
- return result.c_str();
- }
- if (NPVARIANT_IS_DOUBLE(f))
- {
- sprintf(r, "%f", NPVARIANT_TO_DOUBLE(f));
- result = r;
- return result.c_str();
- }
- return "";
- }
- // Javascript -> TorqueScript function calling (with parser)
- const char* CallScript(const char* code)
- {
- std::string scode = code;
- const char* sig = scode.c_str();
- // do not allow large strings which could be used maliciously
- if (scode.length() > 255 || !gInitialized)
- {
- return "";
- }
- // data buffers for laying out data in a Torque 3D console friendly manner
- char nameSpace[256];
- char fname[256];
- char argv[256][256];
- char* argvv[256];
- int argc = 0;
- int argBegin = 0;
- memset(nameSpace, 0, 256);
- memset(fname, 0, 256);
- memset(argv, 0, 256 * 256);
- for (int i = 0; i < scode.length(); i++)
- {
- if (sig[i] == ')' || sig[i] == ';')
- {
- //scan out last arg is any
- char dummy[256];
- memset(dummy, 0, 256);
- WebCommon::StringCopy(dummy, &sig[argBegin], i - argBegin);
- if (strlen(dummy))
- {
- strcpy(argv[argc], dummy);
- argvv[argc] = argv[argc];
- argc++;
- }
- break; // done
- }
- // handle namespace
- if (sig[i]==':')
- {
- if (nameSpace[0] || fname[0])
- {
- return "";
- }
- if (i > 0 && sig[i-1] == ':')
- {
- if (i - 2 > 0)
- WebCommon::StringCopy(nameSpace, sig, i - 1);
- }
- continue;
- }
- // arguments begin
- if (sig[i] == '(' )
- {
- if (fname[0] || i < 1)
- {
- return "";
- }
- //everything before this is function name, minus nameSpace
- if (nameSpace[0])
- {
- int nlen = strlen(nameSpace);
- WebCommon::StringCopy(fname, &sig[nlen + 2], i - nlen - 2);
- }
- else
- {
- WebCommon::StringCopy(fname, sig, i);
- }
- WebCommon::StringCopy(argv[0], fname, strlen(fname)+1);
- argvv[0] = argv[0];
- argc++;
- argBegin = i + 1;
- }
- // argument
- if (sig[i] == ',' )
- {
- if (argBegin >= i || argc == 255)
- {
- return "";
- }
- WebCommon::StringCopy(argv[argc], &sig[argBegin], i - argBegin);
- argvv[argc] = argv[argc];
- argc++;
- argBegin = i + 1;
- }
- }
- static std::string retVal;
- if (fname[0])
- {
- // call into the Torque 3D shared library (console system) and get return value
- retVal = torque_callsecurefunction(nameSpace, fname, argc, (const char **) argvv);
- return retVal.c_str();
- }
- return "";
- }
- // TorqueScript -> JavaScript
- const char* CallJavaScriptFunction(const char* name, int numArguments, const char* argv[])
- {
- // our plugin instance
- NPP pNPInstance = NPWebGamePlugin::sInstance->mInstance;
- // holds the generated Javascript encoded as a NPString
- NPString npScript;
- // retrieve our plugin object from the browser
- NPObject* pluginObject;
- if (NPERR_NO_ERROR != NPNFuncs.getvalue(pNPInstance, NPNVPluginElementNPObject, &pluginObject))
- {
- return NULL;
- }
- // generate Javascript to be evaluated
- std::string script = name;
- script += "(";
- for (int i = 1; i < numArguments; i++)
- {
- script += "\"";
- script += argv[i];
- script += "\"";
- if ( i + 1 < numArguments)
- script += ", ";
- }
- script += ");";
- //encode as a NPString
- npScript.UTF8Characters = script.c_str();
- npScript.UTF8Length = script.length();
-
- // finally, have browser evaluate our script and get the return value
- NPVariant result;
- NPNFuncs.evaluate(pNPInstance,pluginObject,&npScript,&result);
- return MY_NPVARIANT_TO_STRING(result);
- }
- // the sole entry point for Torque 3D console system into our browser plugin (handed over as a function pointer)
- static const char * MyStringCallback(void *obj, int argc, const char* argv[])
- {
- static char ret[4096];
- strcpy(ret,CallJavaScriptFunction(argv[0], argc, argv));
- return ret;
- }
- // these can be added on the page before we're initialized, so we cache until we're ready for them
- typedef struct
- {
- std::string jsCallback; //javascript function name
- unsigned int numArguments; //the number of arguments it takes
- } JavasScriptExport;
- static std::vector<JavasScriptExport> gJavaScriptExports;
- // this actually exports the function to the Torque 3D console system
- // we do this in two steps as we can't guarantee that Torque 3D is initialized on web page
- // before JavaScript calls are made
- void ExportFunctionInternal(const JavasScriptExport& jsexport)
- {
- torque_exportstringcallback(MyStringCallback,"JS",jsexport.jsCallback.c_str(),"",jsexport.numArguments,jsexport.numArguments);
- }
- // invoked via the Javascript plugin object startup() method once the page/plugin are fully loaded
- void Startup()
- {
- if (gInitialized)
- return;
- // actually do the export on any cached functions
- gInitialized = true;
- std::vector<JavasScriptExport>::iterator i;
- for (i = gJavaScriptExports.begin(); i != gJavaScriptExports.end();i++)
- {
- ExportFunctionInternal(*i);
- }
- // setup the secure TorqueScript function calls we can call from Javascript (see webConfig.h)
- WebCommon::AddSecureFunctions();
- }
- // Export a Javascript function to the Torque 3D console system, possibly caching it
- void ExportFunction(const char* callback, int numArguments)
- {
- JavasScriptExport jsexport;
- jsexport.jsCallback = callback;
- jsexport.numArguments = numArguments;
- if (!gInitialized)
- {
- //queue it up
- gJavaScriptExports.push_back(jsexport);
- }
- else
- {
- ExportFunctionInternal(jsexport);
- }
- }
- // NP Plugin Interface
- // Our plugin object structure "inherited" from NPObject
- typedef struct
- {
- // NPObject fields
- NPClass *_class;
- uint32_t referenceCount;
- // Here begins our custom fields (well, field)
- // Platform specific game plugin class (handles refresh, sizing, initialization of Torque 3D, etc)
- NPWebGamePlugin* webPlugin;
- } PluginObject;
- static PluginObject* gPluginObject = NULL;
- // interface exports for our plugin that are expected to the browser
- void pluginInvalidate ();
- bool pluginHasProperty (NPClass *theClass, NPIdentifier name);
- bool pluginHasMethod (NPObject *npobj, NPIdentifier name);
- bool pluginGetProperty (PluginObject *obj, NPIdentifier name, NPVariant *variant);
- bool pluginSetProperty (PluginObject *obj, NPIdentifier name, const NPVariant *variant);
- bool pluginInvoke (PluginObject *obj, NPIdentifier name, NPVariant *args, uint32_t argCount, NPVariant *result);
- bool pluginInvokeDefault (PluginObject *obj, NPVariant *args, uint32_t argCount, NPVariant *result);
- NPObject *pluginAllocate (NPP npp, NPClass *theClass);
- void pluginDeallocate (PluginObject *obj);
- static NPClass _pluginFunctionPtrs = {
- NP_CLASS_STRUCT_VERSION,
- (NPAllocateFunctionPtr) pluginAllocate,
- (NPDeallocateFunctionPtr) pluginDeallocate,
- (NPInvalidateFunctionPtr) pluginInvalidate,
- (NPHasMethodFunctionPtr) pluginHasMethod,
- (NPInvokeFunctionPtr) pluginInvoke,
- (NPInvokeDefaultFunctionPtr) pluginInvokeDefault,
- (NPHasPropertyFunctionPtr) pluginHasProperty,
- (NPGetPropertyFunctionPtr) pluginGetProperty,
- (NPSetPropertyFunctionPtr) pluginSetProperty,
- };
- // versioning information
- static bool identifiersInitialized = false;
- #define ID_VERSION_PROPERTY 0
- #define NUM_PROPERTY_IDENTIFIERS 1
- static NPIdentifier pluginPropertyIdentifiers[NUM_PROPERTY_IDENTIFIERS];
- static const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
- "version",
- };
- // methods that are callable on the plugin from Javascript
- #define ID_SETVARIABLE_METHOD 0
- #define ID_GETVARIABLE_METHOD 1
- #define ID_EXPORTFUNCTION_METHOD 2
- #define ID_CALLSCRIPT_METHOD 3
- #define ID_STARTUP_METHOD 4
- #define NUM_METHOD_IDENTIFIERS 5
- static NPIdentifier pluginMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
- static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
- "setVariable",
- "getVariable",
- "exportFunction",
- "callScript",
- "startup",
- };
- NPClass *getPluginClass(void)
- {
- return &_pluginFunctionPtrs;
- }
- // Sets up the property and method identifier arrays used by the browser
- // via the hasProperty and hasMethod fuction pointers
- static void initializeIdentifiers()
- {
- // fill the property identifier array
- NPNFuncs.getstringidentifiers(pluginPropertyIdentifierNames,
- NUM_PROPERTY_IDENTIFIERS,
- pluginPropertyIdentifiers);
- // fill the method identifier array
- NPNFuncs.getstringidentifiers(pluginMethodIdentifierNames,
- NUM_METHOD_IDENTIFIERS,
- pluginMethodIdentifiers);
- };
- bool pluginHasProperty (NPClass *theClass, NPIdentifier name)
- {
- for (int i = 0; i < NUM_PROPERTY_IDENTIFIERS; i++) {
- if (name == pluginPropertyIdentifiers[i]) {
- return true;
- }
- }
- return false;
- }
- bool pluginHasMethod(NPObject *npobj, NPIdentifier name)
- {
- for (int i = 0; i < NUM_METHOD_IDENTIFIERS; i++) {
- if (name == pluginMethodIdentifiers[i]) {
- return true;
- }
- }
- return false;
- }
- // utility function that sets up a NPVariant from a std::string
- void FillString(const std::string& src, NPVariant* variant)
- {
- variant->type = NPVariantType_String;
- variant->value.stringValue.UTF8Length = static_cast<uint32_t>(src.length());
- variant->value.stringValue.UTF8Characters = reinterpret_cast<NPUTF8 *>(NPNFuncs.memalloc(src.size()));
- memcpy((void*)variant->value.stringValue.UTF8Characters, src.c_str(), src.size());
- }
- bool pluginGetProperty (PluginObject *obj, NPIdentifier name, NPVariant *variant)
- {
- VOID_TO_NPVARIANT(*variant);
- if (name == pluginPropertyIdentifiers[ID_VERSION_PROPERTY]) {
- FillString(std::string("1.0"), variant);
- return true;
- }
- //unknown property
- return false;
- }
- bool pluginSetProperty (PluginObject *obj, NPIdentifier name, const NPVariant *variant)
- {
- return false;
- }
- // handle our plugin methods using standard np plugin conventions.
- bool pluginInvoke (PluginObject *obj, NPIdentifier name, NPVariant *args, unsigned argCount, NPVariant *result)
- {
- VOID_TO_NPVARIANT(*result);
- // sanity check
- if (argCount > 16)
- return false;
- // plugin.startup(); - called once web page is fully loaded and plugin (including Torque 3D) is initialized
- if (name == pluginMethodIdentifiers[ID_STARTUP_METHOD]) {
- result->type = NPVariantType_Void;
- Startup();
- return true;
- }
- // plugin.setVariable("$MyVariable", 42); - set a Torque 3D console variable
- else if (name == pluginMethodIdentifiers[ID_SETVARIABLE_METHOD]) {
- result->type = NPVariantType_Void;
- if (argCount != 2)
- return false;
- std::string arg0(MY_NPVARIANT_TO_STRING(args[0]));
- std::string arg1(MY_NPVARIANT_TO_STRING(args[1]));
- WebCommon::SetVariable(arg0.c_str(), arg1.c_str());
- return true;
- }
- // plugin.getVariable("$MyVariable"); - get a Torque 3D console variable
- else if (name == pluginMethodIdentifiers[ID_GETVARIABLE_METHOD]) {
- if (argCount != 1)
- return false;
- std::string value;
- std::string arg0(MY_NPVARIANT_TO_STRING(args[0]));
- value = WebCommon::GetVariable(arg0.c_str());
- FillString(value, result);
- return true;
- }
- // plugin.exportFunction("MyJavascriptFunction",3); - export a Javascript function to the Torque 3D console system via its name and argument count
- else if (name == pluginMethodIdentifiers[ID_EXPORTFUNCTION_METHOD]) {
- result->type = NPVariantType_Void;
- if (argCount != 2)
- return false;
- std::string fname(MY_NPVARIANT_TO_STRING(args[0]));
- int argCount = 0;
- if (NPVARIANT_IS_DOUBLE(args[1]))
- argCount = NPVARIANT_TO_DOUBLE(args[1]);
- else
- argCount = NPVARIANT_TO_INT32(args[1]);
- ExportFunction(fname.c_str(), argCount);
- return true;
- }
- // var result = plugin.callScript("mySecureFunction('one', 'two', 'three');"); - call a TorqueScript function marked as secure in webConfig.h with supplied arguments
- else if (name == pluginMethodIdentifiers[ID_CALLSCRIPT_METHOD]) {
- if (argCount != 1)
- return false;
- std::string value;
- std::string code(MY_NPVARIANT_TO_STRING(args[0]));
- value = CallScript(code.c_str());
- FillString(value, result);
- return true;
- }
- return false;
- }
- bool pluginInvokeDefault (PluginObject *obj, NPVariant *args, unsigned argCount, NPVariant *result)
- {
- VOID_TO_NPVARIANT(*result);
- return false;
- }
- void pluginInvalidate ()
- {
- // Make sure we've released any remaining references to JavaScript
- // objects.
- }
- NPObject *pluginAllocate (NPP npp, NPClass *theClass)
- {
- PluginObject *newInstance = new PluginObject;
- gPluginObject = newInstance;
- if (!identifiersInitialized)
- {
- identifiersInitialized = true;
- initializeIdentifiers();
- }
- // platform specific NPWebGamePlugin instantiation
- newInstance->webPlugin = new NPWebGamePlugin(npp);
- gInitialized = false;
- gJavaScriptExports.clear();
- return (NPObject *)newInstance;
- }
- void pluginDeallocate (PluginObject *obj)
- {
- delete obj;
- gPluginObject = NULL;
- }
- int32 NPP_Write (NPP instance, NPStream *stream, int32_t offset, int32_t len, void *buffer);
- NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs)
- {
- if (pFuncs == NULL) {
- return NPERR_INVALID_FUNCTABLE_ERROR;
- }
- // Safari sets the size field of pFuncs to 0
- if (pFuncs->size == 0)
- pFuncs->size = sizeof(NPPluginFuncs);
- if (pFuncs->size < sizeof(NPPluginFuncs)) {
- return NPERR_INVALID_FUNCTABLE_ERROR;
- }
- pFuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR;
- pFuncs->newp = NPP_New;
- pFuncs->destroy = NPP_Destroy;
- pFuncs->setwindow = NPP_SetWindow;
- pFuncs->newstream = NPP_NewStream;
- pFuncs->destroystream = NPP_DestroyStream;
- pFuncs->asfile = NPP_StreamAsFile;
- pFuncs->writeready = NPP_WriteReady;
- pFuncs->write = NPP_Write;
- pFuncs->print = NPP_Print;
- pFuncs->event = NPP_HandleEvent;
- pFuncs->urlnotify = NPP_URLNotify;
- pFuncs->getvalue = NPP_GetValue;
- pFuncs->setvalue = NPP_SetValue;
- pFuncs->javaClass = NULL;
- return NPERR_NO_ERROR;
- }
- NPError OSCALL NP_Initialize(NPNetscapeFuncs* pFuncs)
- {
- static bool _initialized = false;
- if (!_initialized) {
- _initialized = true;
- }
- if (pFuncs == NULL)
- return NPERR_INVALID_FUNCTABLE_ERROR;
- if ((pFuncs->version >> 8) > NP_VERSION_MAJOR)
- return NPERR_INCOMPATIBLE_VERSION_ERROR;
- // Safari sets the pfuncs size to 0
- if (pFuncs->size == 0)
- pFuncs->size = sizeof(NPNetscapeFuncs);
- if (pFuncs->size < sizeof (NPNetscapeFuncs))
- return NPERR_INVALID_FUNCTABLE_ERROR;
- NPNFuncs = *pFuncs;
- return NPERR_NO_ERROR;
- }
- NPError OSCALL NP_Shutdown()
- {
- if (WebCommon::gTorque3DModule)
- WebCommon::ShutdownTorque3D();
-
- return NPERR_NO_ERROR;
- }
- NPError NPP_New(NPMIMEType pluginType,
- NPP instance, uint16 mode,
- int16 argc, char *argn[],
- char *argv[], NPSavedData *saved)
- {
- WebCommon::gPluginMIMEType = pluginType;
- if (gPluginObject)
- {
- WebCommon::MessageBox( 0, "This plugin allows only one instance", "Error");
- return NPERR_GENERIC_ERROR;
- }
- // Get the location we're loading the plugin from (http://, file://) including address
- // this is used by the domain locking feature to ensure that your plugin is only
- // being used from your web site
- NPObject* windowObject = NULL;
- NPNFuncs.getvalue( instance, NPNVWindowNPObject, &windowObject );
- NPVariant variantValue;
- NPIdentifier identifier = NPNFuncs.getstringidentifier( "location" );
- if (!NPNFuncs.getproperty( instance, windowObject, identifier, &variantValue ))
- return NPERR_GENERIC_ERROR;
- NPObject *locationObj = variantValue.value.objectValue;
- identifier = NPNFuncs.getstringidentifier( "href" );
- if (!NPNFuncs.getproperty( instance, locationObj, identifier, &variantValue ))
- return NPERR_GENERIC_ERROR;
- std::string url = MY_NPVARIANT_TO_STRING(variantValue);
- if (!WebCommon::CheckDomain(url.c_str()))
- return NPERR_GENERIC_ERROR;
- // everything checks out, let's rock
- if (NPNFuncs.version >= 14) {
- // this calls pluginAllocate
- instance->pdata = NPNFuncs.createobject(instance, getPluginClass());
- }
-
- #ifndef WIN32
- // On Mac, make sure we're using CoreGraphics (otherwise 3D rendering fails)
- NPNFuncs.setvalue(instance, (NPPVariable)NPNVpluginDrawingModel, (void *) NPDrawingModelCoreGraphics);
- #endif
- //PluginObject *plugin = (PluginObject*)instance->pdata;
- return NPERR_NO_ERROR;
- }
- // here is the place to clean up and destroy the object
- NPError NPP_Destroy (NPP instance, NPSavedData** save)
- {
- if (instance == NULL)
- return NPERR_INVALID_INSTANCE_ERROR;
- if (instance->pdata != NULL) {
- PluginObject *plugin = (PluginObject *)instance->pdata;
- delete plugin->webPlugin;
- NPNFuncs.releaseobject((NPObject*) instance->pdata);
- instance->pdata = NULL;
- }
- return NPERR_NO_ERROR;
- }
- NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value)
- {
- if (variable == NPPVpluginScriptableNPObject) {
- if (instance->pdata == NULL) {
- instance->pdata = NPNFuncs.createobject(instance, getPluginClass());
- }
- NPObject* obj = reinterpret_cast<NPObject*>(instance->pdata);
- NPNFuncs.retainobject(obj);
- void **v = (void **)value;
- *v = obj;
- return NPERR_NO_ERROR;
- }
- return NPERR_GENERIC_ERROR;
- }
- NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value)
- {
- return NPERR_GENERIC_ERROR;
- }
- NPError NPP_NewStream(NPP instance,
- NPMIMEType type,
- NPStream* stream,
- NPBool seekable,
- uint16* stype)
- {
- if(instance == NULL)
- return NPERR_INVALID_INSTANCE_ERROR;
- return NPERR_NO_ERROR;
- }
- int32 NPP_WriteReady (NPP instance, NPStream *stream)
- {
- if (instance == NULL)
- return NPERR_INVALID_INSTANCE_ERROR;
- return 0x0fffffff;
- }
- int32 NPP_Write (NPP instance, NPStream *stream, int32_t offset, int32_t len, void *buffer)
- {
- if (instance == NULL)
- return NPERR_INVALID_INSTANCE_ERROR;
- return NPERR_NO_ERROR;
- }
- NPError NPP_DestroyStream (NPP instance, NPStream *stream, NPError reason)
- {
- if(instance == NULL)
- return NPERR_INVALID_INSTANCE_ERROR;
- return NPERR_NO_ERROR;
- }
- void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData)
- {
- }
- void NPP_StreamAsFile (NPP instance, NPStream* stream, const char* fname)
- {
- }
- void NPP_Print (NPP instance, NPPrint* printInfo)
- {
- }
- int16 NPP_HandleEvent(NPP instance, void* event)
- {
- return 0;
- }
- // browser communicated window changes (creation, etc) here
- NPError NPP_SetWindow(NPP instance, NPWindow* window)
- {
- // strange...
- if (!window || !window->window)
- return NPERR_GENERIC_ERROR;
- // strange...
- if (!instance)
- return NPERR_INVALID_INSTANCE_ERROR;
- // get back the plugin instance object
- PluginObject *plugin = (PluginObject *)instance->pdata;
- NPWebGamePlugin* webPlugin = plugin->webPlugin;
- if (webPlugin) {
- if (!window->window) {
- }
- else {
- // handle platform specific window and Torque 3D initialization
- webPlugin->Open(window);
- }
- return NPERR_NO_ERROR;
- }
- // return an error if no object defined
- return NPERR_GENERIC_ERROR;
- }
|