1db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block/* 2db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Copyright (C) 2010 Apple Inc. All rights reserved. 3db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 4db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Redistribution and use in source and binary forms, with or without 5db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * modification, are permitted provided that the following conditions 6db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * are met: 7db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 1. Redistributions of source code must retain the above copyright 8db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * notice, this list of conditions and the following disclaimer. 9db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 2. Redistributions in binary form must reproduce the above copyright 10db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * notice, this list of conditions and the following disclaimer in the 11db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * documentation and/or other materials provided with the distribution. 12db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * 13db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * THE POSSIBILITY OF SUCH DAMAGE. 24db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block */ 25db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 26db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#ifndef PluginTest_h 27db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#define PluginTest_h 28db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 29db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include <WebKit/npfunctions.h> 30db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include <assert.h> 31db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include <map> 32db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include <string> 33db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 34db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block// Helper classes for implementing has_member 35db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blocktypedef char (&no_tag)[1]; 36db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blocktypedef char (&yes_tag)[2]; 37db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 38db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#define DEFINE_HAS_MEMBER_CHECK(member, returnType, argumentTypes) \ 39db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blocktemplate<typename T, returnType (T::*member) argumentTypes> struct pmf_##member##_helper {}; \ 40db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blocktemplate<typename T> no_tag has_member_##member##_helper(...); \ 41db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blocktemplate<typename T> yes_tag has_member_##member##_helper(pmf_##member##_helper<T, &T::member >*); \ 42db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blocktemplate<typename T> struct has_member_##member { \ 43db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockstatic const bool value = sizeof(has_member_##member##_helper<T>(0)) == sizeof(yes_tag); \ 44db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}; 45db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 46db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockDEFINE_HAS_MEMBER_CHECK(hasMethod, bool, (NPIdentifier methodName)); 47db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockDEFINE_HAS_MEMBER_CHECK(invoke, bool, (NPIdentifier methodName, const NPVariant*, uint32_t, NPVariant* result)); 48db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockDEFINE_HAS_MEMBER_CHECK(invokeDefault, bool, (const NPVariant*, uint32_t, NPVariant* result)); 49db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockDEFINE_HAS_MEMBER_CHECK(hasProperty, bool, (NPIdentifier propertyName)); 50db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockDEFINE_HAS_MEMBER_CHECK(getProperty, bool, (NPIdentifier propertyName, NPVariant* result)); 51db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 52db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockclass PluginTest { 53db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockpublic: 54db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static PluginTest* create(NPP, const std::string& identifier); 55db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block virtual ~PluginTest(); 56db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 572bde8e466a4451c7319e3a072d118917957d6554Steve Block static void NP_Shutdown(); 582bde8e466a4451c7319e3a072d118917957d6554Steve Block 59db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block // NPP functions. 60f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual NPError NPP_New(NPMIMEType pluginType, uint16_t mode, int16_t argc, char *argn[], char *argv[], NPSavedData *saved); 61e14391e94c850b8bd03680c23b38978db68687a8John Reck virtual NPError NPP_Destroy(NPSavedData**); 62db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block virtual NPError NPP_DestroyStream(NPStream* stream, NPReason reason); 63db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block virtual NPError NPP_GetValue(NPPVariable, void* value); 64bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual NPError NPP_SetWindow(NPP, NPWindow*); 6581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual int16_t NPP_HandleEvent(void* event); 66db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 67db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block // NPN functions. 6881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch NPError NPN_GetURL(const char* url, const char* target); 6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 70e14391e94c850b8bd03680c23b38978db68687a8John Reck void NPN_InvalidateRect(NPRect* invalidRect); 71db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block NPIdentifier NPN_GetStringIdentifier(const NPUTF8* name); 72db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block NPIdentifier NPN_GetIntIdentifier(int32_t intid); 73a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch NPError NPN_GetValue(NPNVariable, void* value); 74db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block NPObject* NPN_CreateObject(NPClass*); 75db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool NPN_RemoveProperty(NPObject*, NPIdentifier propertyName); 762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#ifdef XP_MACOSX 772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool NPN_ConvertPoint(double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace); 782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 8028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu void executeScript(const char*); 812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void log(const char* format, ...); 8228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 832bde8e466a4451c7319e3a072d118917957d6554Steve Block void registerNPShutdownFunction(void (*)()); 842bde8e466a4451c7319e3a072d118917957d6554Steve Block 852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch static void indicateTestFailure(); 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 87db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block template<typename TestClassTy> class Register { 88db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block public: 89db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block Register(const std::string& identifier) 90db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 91db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block registerCreateTestFunction(identifier, Register::create); 92db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 93db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 94db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block private: 95db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static PluginTest* create(NPP npp, const std::string& identifier) 96db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 97db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return new TestClassTy(npp, identifier); 98db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 99db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block }; 100db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 101db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockprotected: 102db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block PluginTest(NPP npp, const std::string& identifier); 103db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 104db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block // FIXME: A plug-in test shouldn't need to know about it's NPP. Make this private. 105db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block NPP m_npp; 106db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 107db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block const std::string& identifier() const { return m_identifier; } 108db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 109e14391e94c850b8bd03680c23b38978db68687a8John Reck void waitUntilDone(); 110e14391e94c850b8bd03680c23b38978db68687a8John Reck void notifyDone(); 111e14391e94c850b8bd03680c23b38978db68687a8John Reck 112db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block // NPObject helper template. 113db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block template<typename T> struct Object : NPObject { 114db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block public: 115db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static NPObject* create(PluginTest* pluginTest) 116db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 117db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block Object* object = static_cast<Object*>(pluginTest->NPN_CreateObject(npClass())); 118db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 119db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block object->m_pluginTest = pluginTest; 120db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return object; 121db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 122db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 123db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block // These should never be called. 124db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool hasMethod(NPIdentifier methodName) 125db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 126db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block assert(false); 127db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return false; 128db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 129db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 130db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool invoke(NPIdentifier methodName, const NPVariant*, uint32_t, NPVariant* result) 131db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 132db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block assert(false); 133db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return false; 134db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 135db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 136db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool invokeDefault(const NPVariant*, uint32_t, NPVariant* result) 137db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 138db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block assert(false); 139db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return false; 140db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 141db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 142db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool hasProperty(NPIdentifier propertyName) 143db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 144db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block assert(false); 145db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return false; 146db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 147db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 148db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool getProperty(NPIdentifier propertyName, NPVariant* result) 149db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 150db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block assert(false); 151db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return false; 152db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 153db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 154db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block protected: 155db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block Object() 156db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block : m_pluginTest(0) 157db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 158db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 159db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 160db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block virtual ~Object() 161db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 162db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 163db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 164db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block PluginTest* pluginTest() const { return m_pluginTest; } 165db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 166db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block private: 167db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static NPObject* NP_Allocate(NPP npp, NPClass* aClass) 168db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 169db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return new T; 170db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 171db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 172db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static void NP_Deallocate(NPObject* npObject) 173db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 174db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block delete static_cast<T*>(npObject); 175db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 176db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 177db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static bool NP_HasMethod(NPObject* npObject, NPIdentifier methodName) 178db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 179db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return static_cast<T*>(npObject)->hasMethod(methodName); 180db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 181db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 182db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static bool NP_Invoke(NPObject* npObject, NPIdentifier methodName, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) 183db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 184db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return static_cast<T*>(npObject)->invoke(methodName, arguments, argumentCount, result); 185db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 186db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 187db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static bool NP_InvokeDefault(NPObject* npObject, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result) 188db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 189db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return static_cast<T*>(npObject)->invokeDefault(arguments, argumentCount, result); 190db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 191db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 192db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static bool NP_HasProperty(NPObject* npObject, NPIdentifier propertyName) 193db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 194db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return static_cast<T*>(npObject)->hasProperty(propertyName); 195db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 196db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 197db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static bool NP_GetProperty(NPObject* npObject, NPIdentifier propertyName, NPVariant* result) 198db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 199db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return static_cast<T*>(npObject)->getProperty(propertyName, result); 200db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 201db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 202db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static NPClass* npClass() 203db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block { 204db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static NPClass npClass = { 205db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block NP_CLASS_STRUCT_VERSION, 206db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block NP_Allocate, 207db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block NP_Deallocate, 208db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 0, // NPClass::invalidate 209db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block has_member_hasMethod<T>::value ? NP_HasMethod : 0, 210db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block has_member_invoke<T>::value ? NP_Invoke : 0, 211db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block has_member_invokeDefault<T>::value ? NP_InvokeDefault : 0, 212db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block has_member_hasProperty<T>::value ? NP_HasProperty : 0, 213db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block has_member_getProperty<T>::value ? NP_GetProperty : 0, 214db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 0, // NPClass::setProperty 215db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 0, // NPClass::removeProperty 216db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 0, // NPClass::enumerate 217db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 0 // NPClass::construct 218db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block }; 219db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 220db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return &npClass; 221db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block }; 222db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 223db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block PluginTest* m_pluginTest; 224db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block }; 225db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 226db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockprivate: 227db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block typedef PluginTest* (*CreateTestFunction)(NPP, const std::string&); 228db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 229db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static void registerCreateTestFunction(const std::string&, CreateTestFunction); 230db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block static std::map<std::string, CreateTestFunction>& createTestFunctions(); 231db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 232db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block std::string m_identifier; 233db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}; 234db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 235db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#endif // PluginTest_h 236