main.cpp revision b16749e2c60dca69f8b71adf900597bad10adf40
1df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger/* 2df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * Copyright 2009, The Android Open Source Project 3df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * 4df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * Redistribution and use in source and binary forms, with or without 5df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * modification, are permitted provided that the following conditions 6df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * are met: 7df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * * Redistributions of source code must retain the above copyright 8df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * notice, this list of conditions and the following disclaimer. 9df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * * Redistributions in binary form must reproduce the above copyright 10df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * notice, this list of conditions and the following disclaimer in the 11df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * documentation and/or other materials provided with the distribution. 12df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * 13df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 14df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger */ 25df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 26df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include <stdlib.h> 27df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include <string.h> 28df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include <stdio.h> 29df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include "android_npapi.h" 30df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include "main.h" 31df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include "PluginObject.h" 32df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include "EventPlugin.h" 33df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 34df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPNetscapeFuncs* browser; 35df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#define EXPORT __attribute__((visibility("default"))) 36df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 37df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, 38df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger char* argn[], char* argv[], NPSavedData* saved); 39df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_Destroy(NPP instance, NPSavedData** save); 40df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_SetWindow(NPP instance, NPWindow* window); 41df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, 42df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger NPBool seekable, uint16* stype); 43df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason); 44df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerint32 NPP_WriteReady(NPP instance, NPStream* stream); 45df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerint32 NPP_Write(NPP instance, NPStream* stream, int32 offset, int32 len, 46df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger void* buffer); 47df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergervoid NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname); 48df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergervoid NPP_Print(NPP instance, NPPrint* platformPrint); 49df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerint16 NPP_HandleEvent(NPP instance, void* event); 50df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergervoid NPP_URLNotify(NPP instance, const char* URL, NPReason reason, 51df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger void* notifyData); 52df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_GetValue(NPP instance, NPPVariable variable, void *value); 53df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_SetValue(NPP instance, NPNVariable variable, void *value); 54df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 55df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerextern "C" { 56df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerEXPORT NPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs, void *java_env, void *application_context); 57df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerEXPORT NPError NP_GetValue(NPP instance, NPPVariable variable, void *value); 58df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerEXPORT const char* NP_GetMIMEDescription(void); 59df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerEXPORT void NP_Shutdown(void); 60df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger}; 61df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 62df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerANPAudioTrackInterfaceV0 gSoundI; 63df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerANPBitmapInterfaceV0 gBitmapI; 64df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerANPCanvasInterfaceV0 gCanvasI; 65df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerANPLogInterfaceV0 gLogI; 66df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerANPPaintInterfaceV0 gPaintI; 67df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerANPPathInterfaceV0 gPathI; 68df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerANPTypefaceInterfaceV0 gTypefaceI; 69df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerANPWindowInterfaceV0 gWindowI; 70df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 71df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0])) 72df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 73df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs, void *java_env, void *application_context) 74df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 75df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // Make sure we have a function table equal or larger than we are built against. 76df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (browserFuncs->size < sizeof(NPNetscapeFuncs)) { 77df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_GENERIC_ERROR; 78df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 79df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 80df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // Copy the function table (structure) 81df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger browser = (NPNetscapeFuncs*) malloc(sizeof(NPNetscapeFuncs)); 82df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger memcpy(browser, browserFuncs, sizeof(NPNetscapeFuncs)); 83df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 84df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // Build the plugin function table 85df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->version = 11; 86df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->size = sizeof(pluginFuncs); 87df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->newp = NPP_New; 88df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->destroy = NPP_Destroy; 89df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->setwindow = NPP_SetWindow; 90df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->newstream = NPP_NewStream; 91df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->destroystream = NPP_DestroyStream; 92df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->asfile = NPP_StreamAsFile; 93df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->writeready = NPP_WriteReady; 94df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->write = (NPP_WriteProcPtr)NPP_Write; 95df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->print = NPP_Print; 96df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->event = NPP_HandleEvent; 97df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->urlnotify = NPP_URLNotify; 98df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->getvalue = NPP_GetValue; 99df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginFuncs->setvalue = NPP_SetValue; 100df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 101df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger static const struct { 102df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger NPNVariable v; 103df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger uint32_t size; 104df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger ANPInterface* i; 105df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } gPairs[] = { 106df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger { kCanvasInterfaceV0_ANPGetValue, sizeof(gCanvasI), &gCanvasI }, 107df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger { kLogInterfaceV0_ANPGetValue, sizeof(gLogI), &gLogI }, 108df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger { kPaintInterfaceV0_ANPGetValue, sizeof(gPaintI), &gPaintI }, 109df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger { kTypefaceInterfaceV0_ANPGetValue, sizeof(gTypefaceI), &gTypefaceI }, 110df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger }; 111df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger for (size_t i = 0; i < ARRAY_COUNT(gPairs); i++) { 112df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger gPairs[i].i->inSize = gPairs[i].size; 113df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger NPError err = browser->getvalue(NULL, gPairs[i].v, gPairs[i].i); 114df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (err) { 115df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return err; 116df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 117df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 118df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 119df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_NO_ERROR; 120df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 121df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 122df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergervoid NP_Shutdown(void) 123df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 124df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 125df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 126df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 127df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerconst char *NP_GetMIMEDescription(void) 128df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 129df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return "application/x-browsertestplugin:btp:Android Browser Test Plugin"; 130df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 131df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 132df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, 133df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger char* argn[], char* argv[], NPSavedData* saved) 134df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 135df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 136df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 137b16749e2c60dca69f8b71adf900597bad10adf40Derek Sollenberger gLogI.log(kDebug_ANPLogType, "creating plugin"); 138df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 139df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger PluginObject *obj = NULL; 140df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 141df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // Scripting functions appeared in NPAPI version 14 142df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (browser->version >= 14) { 143df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger instance->pdata = browser->createobject (instance, getPluginClass()); 144df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger obj = static_cast<PluginObject*>(instance->pdata); 145df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger bzero(obj, sizeof(*obj)); 146df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } else { 147df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_GENERIC_ERROR; 148df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 149df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 150df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // select the drawing model 1510b3a5d65247be1fb79d66af534fa78a94743864fDerek Sollenberger ANPDrawingModel model = kBitmap_ANPDrawingModel; 152df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 153df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // notify the plugin API of the drawing model we wish to use. This must be 154df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // done prior to creating certain subPlugin objects (e.g. surfaceViews) 155df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger NPError err = browser->setvalue(instance, kRequestDrawingModel_ANPSetValue, 156df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger reinterpret_cast<void*>(model)); 157df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (err) { 158b16749e2c60dca69f8b71adf900597bad10adf40Derek Sollenberger gLogI.log(kError_ANPLogType, "request model %d err %d", model, err); 159df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return err; 160df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 161df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 162df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // create the sub-plugin 163df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger obj->subPlugin = new EventPlugin(instance); 164df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 165df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_NO_ERROR; 166df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 167df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 168df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_Destroy(NPP instance, NPSavedData** save) 169df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 170df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger PluginObject *obj = (PluginObject*) instance->pdata; 171df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger delete obj->subPlugin; 172df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 173df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_NO_ERROR; 174df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 175df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 176df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_SetWindow(NPP instance, NPWindow* window) 177df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 178df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger PluginObject *obj = (PluginObject*) instance->pdata; 179df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 180df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // Do nothing if browser didn't support NPN_CreateObject which would have created the PluginObject. 181df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (obj != NULL) { 182df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger obj->window = window; 183df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 184df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 185df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_NO_ERROR; 186df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 187df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 188df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype) 189df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 190df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger *stype = NP_ASFILEONLY; 191df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_NO_ERROR; 192df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 193df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 194df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason) 195df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 196df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_NO_ERROR; 197df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 198df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 199df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerint32 NPP_WriteReady(NPP instance, NPStream* stream) 200df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 201df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return 0; 202df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 203df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 204df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerint32 NPP_Write(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer) 205df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 206df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return 0; 207df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 208df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 209df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergervoid NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname) 210df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 211df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 212df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 213df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergervoid NPP_Print(NPP instance, NPPrint* platformPrint) 214df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 215df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 216df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 217df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerint16 NPP_HandleEvent(NPP instance, void* event) 218df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 219df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger PluginObject *obj = reinterpret_cast<PluginObject*>(instance->pdata); 220df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger const ANPEvent* evt = reinterpret_cast<const ANPEvent*>(event); 221df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 222df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if(!obj->subPlugin) { 223b16749e2c60dca69f8b71adf900597bad10adf40Derek Sollenberger gLogI.log(kError_ANPLogType, "the sub-plugin is null."); 224df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return 0; // unknown or unhandled event 225df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 226df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger else { 227df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return obj->subPlugin->handleEvent(evt); 228df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 229df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 230df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 231df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergervoid NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData) 232df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 233df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 234df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 235df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerEXPORT NPError NP_GetValue(NPP instance, NPPVariable variable, void *value) { 236df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 237df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (variable == NPPVpluginNameString) { 238df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger const char **str = (const char **)value; 239df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger *str = "Browser Test Plugin"; 240df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_NO_ERROR; 241df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 242df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 243df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (variable == NPPVpluginDescriptionString) { 244df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger const char **str = (const char **)value; 245df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger *str = "Description of Browser Test Plugin"; 246df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_NO_ERROR; 247df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 248df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 249df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_GENERIC_ERROR; 250df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 251df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 252df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_GetValue(NPP instance, NPPVariable variable, void *value) 253df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 254df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (variable == NPPVpluginScriptableNPObject) { 255df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger void **v = (void **)value; 256df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger PluginObject *obj = (PluginObject*) instance->pdata; 257df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 258df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (obj) 259df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger browser->retainobject((NPObject*)obj); 260df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 261df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger *v = obj; 262df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_NO_ERROR; 263df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 264df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 265df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_GENERIC_ERROR; 266df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 267df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 268df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPError NPP_SetValue(NPP instance, NPNVariable variable, void *value) 269df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 270df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return NPERR_GENERIC_ERROR; 271df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 272df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 273