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/* 27df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in 28df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger consideration of your agreement to the following terms, and your use, installation, 29df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger modification or redistribution of this Apple software constitutes acceptance of these 30df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger terms. If you do not agree with these terms, please do not use, install, modify or 31df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger redistribute this Apple software. 32df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 33df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger In consideration of your agreement to abide by the following terms, and subject to these 34df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger terms, Apple grants you a personal, non-exclusive license, under Apple�s copyrights in 35df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger this original Apple software (the "Apple Software"), to use, reproduce, modify and 36df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger redistribute the Apple Software, with or without modifications, in source and/or binary 37df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger forms; provided that if you redistribute the Apple Software in its entirety and without 38df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger modifications, you must retain this notice and the following text and disclaimers in all 39df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger such redistributions of the Apple Software. Neither the name, trademarks, service marks 40df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger or logos of Apple Computer, Inc. may be used to endorse or promote products derived from 41df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger the Apple Software without specific prior written permission from Apple. Except as expressly 42df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger stated in this notice, no other rights or licenses, express or implied, are granted by Apple 43df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger herein, including but not limited to any patent rights that may be infringed by your 44df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger derivative works or by other works in which the Apple Software may be incorporated. 45df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 46df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, 47df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, 48df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS 49df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. 50df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 51df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL 52df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 53df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, 54df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND 55df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR 56df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 57df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger */ 58df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 59df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include <stdlib.h> 60df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include "main.h" 61df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#include "PluginObject.h" 62df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 63df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic void pluginInvalidate(NPObject *obj); 64df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginHasProperty(NPObject *obj, NPIdentifier name); 65df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginHasMethod(NPObject *obj, NPIdentifier name); 66df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant); 67df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant); 68df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result); 69df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result); 70df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic NPObject *pluginAllocate(NPP npp, NPClass *theClass); 71df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic void pluginDeallocate(NPObject *obj); 72df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginRemoveProperty(NPObject *npobj, NPIdentifier name); 73df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count); 74df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 75df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 76df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 77df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic NPClass pluginClass = { 78df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger NP_CLASS_STRUCT_VERSION, 79df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginAllocate, 80df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginDeallocate, 81df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginInvalidate, 82df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginHasMethod, 83df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginInvoke, 84df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginInvokeDefault, 85df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginHasProperty, 86df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginGetProperty, 87df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginSetProperty, 88df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginRemoveProperty, 89df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger pluginEnumerate 90df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger}; 91df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 92df8a3f31d871db25e952972c2eb346a71186e9e3Derek SollenbergerNPClass *getPluginClass(void) 93df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 94df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return &pluginClass; 95df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 96df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 97df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool identifiersInitialized = false; 98df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 99df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#define ID_TESTFILE_PROPERTY 0 100df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#define NUM_PROPERTY_IDENTIFIERS 1 101df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 102df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic NPIdentifier pluginPropertyIdentifiers[NUM_PROPERTY_IDENTIFIERS]; 103df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = { 104df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger "testfile" 105df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger}; 106df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 107df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#define ID_GETTESTFILE_METHOD 0 108df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger#define NUM_METHOD_IDENTIFIERS 1 109df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 110df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic NPIdentifier pluginMethodIdentifiers[NUM_METHOD_IDENTIFIERS]; 111df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = { 112df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger "getTestFile" 113df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger}; 114df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 115df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic void initializeIdentifiers(void) 116df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 117df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger browser->getstringidentifiers(pluginPropertyIdentifierNames, NUM_PROPERTY_IDENTIFIERS, pluginPropertyIdentifiers); 118df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger browser->getstringidentifiers(pluginMethodIdentifierNames, NUM_METHOD_IDENTIFIERS, pluginMethodIdentifiers); 119df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 120df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 121df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginHasProperty(NPObject *obj, NPIdentifier name) 122df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 123df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger int i; 124df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger for (i = 0; i < NUM_PROPERTY_IDENTIFIERS; i++) 125df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (name == pluginPropertyIdentifiers[i]) 126df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return true; 127df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return false; 128df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 129df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 130df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginHasMethod(NPObject *obj, NPIdentifier name) 131df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 132df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger int i; 133df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger for (i = 0; i < NUM_METHOD_IDENTIFIERS; i++) 134df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (name == pluginMethodIdentifiers[i]) 135df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return true; 136df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return false; 137df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 138df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 139df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant) 140df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 141df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger PluginObject *plugin = (PluginObject *)obj; 142df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (name == pluginPropertyIdentifiers[ID_TESTFILE_PROPERTY]) { 143df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger BOOLEAN_TO_NPVARIANT(true, *variant); 144df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return true; 145df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 146df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return false; 147df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 148df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 149df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant) 150df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 151df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return false; 152df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 153df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 154df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result) 155df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 156df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger PluginObject *plugin = (PluginObject *)obj; 157df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (name == pluginMethodIdentifiers[ID_GETTESTFILE_METHOD]) { 158df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return true; 159df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 160df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return false; 161df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 162df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 163df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result) 164df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 165df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return false; 166df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 167df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 168df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic void pluginInvalidate(NPObject *obj) 169df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 170df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger // Release any remaining references to JavaScript objects. 171df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 172df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 173df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic NPObject *pluginAllocate(NPP npp, NPClass *theClass) 174df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 175df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger PluginObject *newInstance = (PluginObject*) malloc(sizeof(PluginObject)); 176df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger newInstance->header._class = theClass; 177df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger newInstance->header.referenceCount = 1; 178df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 179df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger if (!identifiersInitialized) { 180df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger identifiersInitialized = true; 181df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger initializeIdentifiers(); 182df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger } 183df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 184df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger newInstance->npp = npp; 185df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 186df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return &newInstance->header; 187df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 188df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 189df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic void pluginDeallocate(NPObject *obj) 190df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 191df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger free(obj); 192df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 193df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 194df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginRemoveProperty(NPObject *npobj, NPIdentifier name) 195df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 196df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return false; 197df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 198df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger 199df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenbergerstatic bool pluginEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count) 200df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger{ 201df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger return false; 202df8a3f31d871db25e952972c2eb346a71186e9e3Derek Sollenberger} 203