1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebBindings_h 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebBindings_h 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebCommon.h" 356b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "WebString.h" 36bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "WebVector.h" 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <bindings/npruntime.h> 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebDragData; 425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenclass WebElement; 432bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebNode; 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebRange; 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// A haphazard collection of functions for dealing with plugins. 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebBindings { 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN Functions ------------------------------------------------------ 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // These are all defined in npruntime.h and are well documented. 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_Construct 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static bool construct(NPP, NPObject*, const NPVariant* args, uint32_t argCount, NPVariant* result); 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_CreateObject 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static NPObject* createObject(NPP, NPClass*); 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_Enumerate 592bde8e466a4451c7319e3a072d118917957d6554Steve Block WEBKIT_API static bool enumerate(NPP, NPObject*, NPIdentifier**, uint32_t* identifierCount); 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_Evaluate 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static bool evaluate(NPP, NPObject*, NPString* script, NPVariant* result); 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_EvaluateHelper 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static bool evaluateHelper(NPP, bool popupsAllowed, NPObject*, NPString* script, NPVariant* result); 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_GetIntIdentifier 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static NPIdentifier getIntIdentifier(int32_t number); 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_GetProperty 712bde8e466a4451c7319e3a072d118917957d6554Steve Block WEBKIT_API static bool getProperty(NPP, NPObject*, NPIdentifier property, NPVariant *result); 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_GetStringIdentifier 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static NPIdentifier getStringIdentifier(const NPUTF8* string); 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_GetStringIdentifiers 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static void getStringIdentifiers(const NPUTF8** names, int32_t nameCount, NPIdentifier*); 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_HasMethod 802bde8e466a4451c7319e3a072d118917957d6554Steve Block WEBKIT_API static bool hasMethod(NPP, NPObject*, NPIdentifier method); 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_HasProperty 832bde8e466a4451c7319e3a072d118917957d6554Steve Block WEBKIT_API static bool hasProperty(NPP, NPObject*, NPIdentifier property); 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_IdentifierIsString 86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static bool identifierIsString(NPIdentifier); 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_InitializeVariantWithStringCopy (though sometimes prefixed with an underscore) 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static void initializeVariantWithStringCopy(NPVariant*, const NPString*); 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_IntFromIdentifier 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static int32_t intFromIdentifier(NPIdentifier); 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_Invoke 952bde8e466a4451c7319e3a072d118917957d6554Steve Block WEBKIT_API static bool invoke(NPP, NPObject*, NPIdentifier method, const NPVariant* args, uint32_t argCount, NPVariant* result); 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_InvokeDefault 982bde8e466a4451c7319e3a072d118917957d6554Steve Block WEBKIT_API static bool invokeDefault(NPP, NPObject*, const NPVariant* args, uint32_t argCount, NPVariant* result); 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_ReleaseObject 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static void releaseObject(NPObject*); 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_ReleaseVariantValue 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static void releaseVariantValue(NPVariant*); 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_RemoveProperty 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static bool removeProperty(NPP, NPObject*, NPIdentifier); 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_RetainObject 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static NPObject* retainObject(NPObject*); 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_SetException 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static void setException(NPObject*, const NPUTF8* message); 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_SetProperty 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static bool setProperty(NPP, NPObject*, NPIdentifier, const NPVariant*); 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // _NPN_UnregisterObject 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static void unregisterObject(NPObject*); 120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // NPN_UTF8FromIdentifier 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static NPUTF8* utf8FromIdentifier(NPIdentifier); 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 124e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block // Miscellaneous utility functions ---------------------------------------- 125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Complement to NPN_Get___Identifier functions. Extracts data from the NPIdentifier data 127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // structure. If isString is true upon return, string will be set but number's value is 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // undefined. If iString is false, the opposite is true. 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static void extractIdentifierData(const NPIdentifier&, const NPUTF8*& string, int32_t& number, bool& isString); 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Return true (success) if the given npobj is a range object. 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // If so, return that range as a WebRange object. 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API static bool getRange(NPObject* range, WebRange*); 134e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 1355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // Return true (success) if the given npobj is an element. 1365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // If so, return that element as a WebElement object. 1375ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen WEBKIT_API static bool getElement(NPObject* element, WebElement*); 1385ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 139bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WEBKIT_API static NPObject* makeIntArray(const WebVector<int>&); 1406b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner WEBKIT_API static NPObject* makeStringArray(const WebVector<WebString>&); 1412bde8e466a4451c7319e3a072d118917957d6554Steve Block WEBKIT_API static NPObject* makeNode(const WebNode&); 142bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 143e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block // Exceptions ------------------------------------------------------------- 144e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 145e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block typedef void (ExceptionHandler)(void* data, const NPUTF8* message); 146e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 147e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block // The exception handler will be notified of any exceptions thrown while 148e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block // operating on a NPObject. 149e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block WEBKIT_API static void pushExceptionHandler(ExceptionHandler, void* data); 150e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block WEBKIT_API static void popExceptionHandler(); 151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 156