15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright © 2004, Apple Computer, Inc. and The Mozilla Foundation.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * All rights reserved.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * modification, are permitted provided that the following conditions are
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * met:
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * notice, this list of conditions and the following disclaimer.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * notice, this list of conditions and the following disclaimer in the
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * documentation and/or other materials provided with the distribution.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Foundation ("Mozilla") nor the names of their contributors may be used
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to endorse or promote products derived from this software without
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * specific prior written permission.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Revision 1 (March 4, 2004):
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Initial proposal.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Revision 2 (March 10, 2004):
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * All calls into script were made asynchronous.  Results are
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * provided via the NPScriptResultFunctionPtr callback.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Revision 3 (March 10, 2004):
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Corrected comments to not refer to class retain/release FunctionPtrs.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Revision 4 (March 11, 2004):
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Added additional convenience NPN_SetExceptionWithUTF8().
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Changed NPHasPropertyFunctionPtr and NPHasMethodFunctionPtr to take NPClass
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * pointers instead of NPObject pointers.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Added NPIsValidIdentifier().
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Revision 5 (March 17, 2004):
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Added context parameter to result callbacks from ScriptObject functions.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Revision 6 (March 29, 2004):
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Renamed functions implemented by user agent to NPN_*.  Removed _ from
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * type names.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Renamed "JavaScript" types to "Script".
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Revision 7 (April 21, 2004):
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NPIdentifier becomes a void*, was int32_t
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Remove NP_IsValidIdentifier, renamed NP_IdentifierFromUTF8 to NP_GetIdentifier
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Added NPVariant and modified functions to use this new type.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Revision 8 (July 9, 2004):
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updated to joint Apple-Mozilla license.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _NP_RUNTIME_H_
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _NP_RUNTIME_H_
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "nptypes.h"
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    This API is used to facilitate binding code written in C to script
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    objects.  The API in this header does not assume the presence of a
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    user agent.  That is, it can be used to bind C code to scripting
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    environments outside of the context of a user agent.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    However, the normal use of the this API is in the context of a
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scripting environment running in a browser or other user agent.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    In particular it is used to support the extended Netscape
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    script-ability API for plugins (NP-SAP).  NP-SAP is an extension
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    of the Netscape plugin API.  As such we have adopted the use of
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    the "NP" prefix for this API.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The following NP{N|P}Variables were added to the Netscape plugin
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    API (in npapi.h):
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPNVWindowNPObject
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPNVPluginElementNPObject
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPPVpluginScriptableNPObject
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    These variables are exposed through NPN_GetValue() and
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPP_GetValue() (respectively) and are used to establish the
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    initial binding between the user agent and native code.  The DOM
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    objects in the user agent can be examined and manipulated using
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    the NPN_ functions that operate on NPObjects described in this
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    header.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    To the extent possible the assumptions about the scripting
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    language used by the scripting environment have been minimized.
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NP_BEGIN_MACRO  do {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NP_END_MACRO    } while (0)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Objects (non-primitive data) passed between 'C' and script is
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    always wrapped in an NPObject.  The 'interface' of an NPObject is
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    described by an NPClass.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct NPObject NPObject;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct NPClass NPClass;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef char NPUTF8;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _NPString {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const NPUTF8 *utf8characters;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32_t utf8length;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} NPString;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef enum {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPVariantType_Void,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPVariantType_Null,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPVariantType_Bool,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPVariantType_Int32,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPVariantType_Double,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPVariantType_String,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPVariantType_Object
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} NPVariantType;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _NPVariant {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPVariantType type;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    union {
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        bool boolValue;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        uint32_t intValue;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        double doubleValue;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NPString stringValue;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NPObject *objectValue;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } value;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} NPVariant;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPN_ReleaseVariantValue is called on all 'out' parameters
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    references.  Specifically it is to be called on variants that own
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    their value, as is the case with all non-const NPVariant*
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    arguments after a successful call to any methods (except this one)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    in this API.
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    After calling NPN_ReleaseVariantValue, the type of the variant
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    will be NPVariantType_Void.
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NPN_ReleaseVariantValue(NPVariant *variant);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_IS_VOID(_v)    ((_v).type == NPVariantType_Void)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_IS_NULL(_v)    ((_v).type == NPVariantType_Null)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_IS_INT32(_v)   ((_v).type == NPVariantType_Int32)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_IS_DOUBLE(_v)  ((_v).type == NPVariantType_Double)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_IS_STRING(_v)  ((_v).type == NPVariantType_String)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_IS_OBJECT(_v)  ((_v).type == NPVariantType_Object)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_TO_INT32(_v)   ((_v).value.intValue)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_TO_DOUBLE(_v)  ((_v).value.doubleValue)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_TO_STRING(_v)  ((_v).value.stringValue)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NPVARIANT_TO_OBJECT(_v)  ((_v).value.objectValue)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define VOID_TO_NPVARIANT(_v)                                                 \
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_BEGIN_MACRO                                                                \
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).type = NPVariantType_Void;                                           \
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).value.objectValue = NULL;                                            \
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_END_MACRO
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NULL_TO_NPVARIANT(_v)                                                 \
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_BEGIN_MACRO                                                                \
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).type = NPVariantType_Null;                                           \
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).value.objectValue = NULL;                                            \
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_END_MACRO
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BOOLEAN_TO_NPVARIANT(_val, _v)                                        \
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_BEGIN_MACRO                                                                \
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).type = NPVariantType_Bool;                                           \
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).value.boolValue = !!(_val);                                          \
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_END_MACRO
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define INT32_TO_NPVARIANT(_val, _v)                                          \
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_BEGIN_MACRO                                                                \
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).type = NPVariantType_Int32;                                          \
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).value.intValue = _val;                                               \
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_END_MACRO
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DOUBLE_TO_NPVARIANT(_val, _v)                                         \
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_BEGIN_MACRO                                                                \
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).type = NPVariantType_Double;                                         \
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).value.doubleValue = _val;                                            \
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_END_MACRO
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define STRINGZ_TO_NPVARIANT(_val, _v)                                        \
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_BEGIN_MACRO                                                                \
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).type = NPVariantType_String;                                         \
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPString str = { _val, strlen(_val) };                                    \
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).value.stringValue = str;                                             \
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_END_MACRO
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define STRINGN_TO_NPVARIANT(_val, _len, _v)                                  \
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_BEGIN_MACRO                                                                \
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).type = NPVariantType_String;                                         \
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPString str = { _val, _len };                                            \
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).value.stringValue = str;                                             \
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_END_MACRO
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define OBJECT_TO_NPVARIANT(_val, _v)                                         \
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_BEGIN_MACRO                                                                \
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).type = NPVariantType_Object;                                         \
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    (_v).value.objectValue = _val;                                            \
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NP_END_MACRO
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	Type mappings (JavaScript types have been used for illustration
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    purposes):
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	JavaScript       to             C (NPVariant with type:)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	undefined                       NPVariantType_Void
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	null                            NPVariantType_Null
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	Boolean                         NPVariantType_Bool
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	Number                          NPVariantType_Double or NPVariantType_Int32
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	String                          NPVariantType_String
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	Object                          NPVariantType_Object
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	C (NPVariant with type:)   to   JavaScript
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	NPVariantType_Void              undefined
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	NPVariantType_Null              null
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	NPVariantType_Bool              Boolean
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	NPVariantType_Int32             Number
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	NPVariantType_Double            Number
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	NPVariantType_String            String
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	NPVariantType_Object            Object
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void *NPIdentifier;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPObjects have methods and properties.  Methods and properties are
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    identified with NPIdentifiers.  These identifiers may be reflected
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    in script.  NPIdentifiers can be either strings or integers, IOW,
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    methods and properties can be identified by either strings or
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    compared using ==.  In case of any errors, the requested
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPIdentifier(s) will be NULL.
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount,
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              NPIdentifier *identifiers);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPIdentifier NPN_GetIntIdentifier(int32_t intid);
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_IdentifierIsString(NPIdentifier identifier);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The NPUTF8 returned from NPN_UTF8FromIdentifier SHOULD be freed.
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier);
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Get the integer represented by identifier. If identifier is not an
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    integer identifier, the behaviour is undefined.
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPObject behavior is implemented using the following set of
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callback functions.
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The NPVariant *result argument of these functions (where
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    applicable) should be released using NPN_ReleaseVariantValue().
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*NPDeallocateFunctionPtr)(NPObject *npobj);
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*NPInvalidateFunctionPtr)(NPObject *npobj);
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef bool (*NPHasMethodFunctionPtr)(NPObject *npobj, NPIdentifier name);
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef bool (*NPInvokeFunctionPtr)(NPObject *npobj, NPIdentifier name,
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const NPVariant *args, uint32_t argCount,
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    NPVariant *result);
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj,
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           const NPVariant *args,
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           uint32_t argCount,
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           NPVariant *result);
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef bool (*NPHasPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef bool (*NPGetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         NPVariant *result);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef bool (*NPSetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         const NPVariant *value);
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj,
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            NPIdentifier name);
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef bool (*NPEnumerationFunctionPtr)(NPObject *npobj, NPIdentifier **value,
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         uint32_t *count);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPObjects returned by create, retain, invoke, and getProperty pass
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    a reference count to the caller.  That is, the callee adds a
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    reference count which passes to the caller.  It is the caller's
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    responsibility to release the returned object.
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPInvokeFunctionPtr function may return 0 to indicate a void
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    result.
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPInvalidateFunctionPtr is called by the scripting environment
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    when the native code is shutdown.  Any attempt to message a
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPObject instance after the invalidate callback has been
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    called will result in undefined behavior, even if the native code
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    is still retaining those NPObject instances.  (The runtime
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    will typically return immediately, with 0 or NULL, from an attempt
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    to dispatch to a NPObject, but this behavior should not be
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    depended upon.)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The NPEnumerationFunctionPtr function may pass an array of
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPIdentifiers back to the caller. The callee allocs the memory of
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    the array using NPN_MemAlloc(), and it's the caller's responsibility
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    to release it using NPN_MemFree().
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NPClass
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32_t structVersion;
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPAllocateFunctionPtr allocate;
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPDeallocateFunctionPtr deallocate;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPInvalidateFunctionPtr invalidate;
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPHasMethodFunctionPtr hasMethod;
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPInvokeFunctionPtr invoke;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPInvokeDefaultFunctionPtr invokeDefault;
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPHasPropertyFunctionPtr hasProperty;
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPGetPropertyFunctionPtr getProperty;
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPSetPropertyFunctionPtr setProperty;
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPRemovePropertyFunctionPtr removeProperty;
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPEnumerationFunctionPtr enumerate;
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NP_CLASS_STRUCT_VERSION      2
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NP_CLASS_STRUCT_VERSION_ENUM 2
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NP_CLASS_STRUCT_VERSION_HAS_ENUM(npclass)   \
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ((npclass)->structVersion >= NP_CLASS_STRUCT_VERSION_ENUM)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NPObject {
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPClass *_class;
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32_t referenceCount;
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /*
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Additional space may be allocated here by types of NPObjects
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    If the class has an allocate function, NPN_CreateObject invokes
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    that function, otherwise a NPObject is allocated and
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    returned. This method will initialize the referenceCount member of
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    the NPObject to 1.
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPObject *NPN_CreateObject(NPP npp, NPClass *aClass);
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Increment the NPObject's reference count.
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPObject *NPN_RetainObject(NPObject *npobj);
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Decremented the NPObject's reference count.  If the reference
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    count goes to zero, the class's destroy function is invoke if
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    specified, otherwise the object is freed directly.
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NPN_ReleaseObject(NPObject *npobj);
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Functions to access script objects represented by NPObject.
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Calls to script objects are synchronous.  If a function returns a
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value, it will be supplied via the result NPVariant
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    argument. Successful calls will return true, false will be
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    returned in case of an error.
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Calls made from plugin code to script must be made from the thread
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    on which the plugin was initialized.
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_Invoke(NPP npp, NPObject *npobj, NPIdentifier methodName,
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const NPVariant *args, uint32_t argCount, NPVariant *result);
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args,
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       uint32_t argCount, NPVariant *result);
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script,
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  NPVariant *result);
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_GetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     NPVariant *result);
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     const NPVariant *value);
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NPN_Enumerate(NPP npp, NPObject *npobj, NPIdentifier **identifier,
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   uint32_t *count);
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPN_SetException may be called to trigger a script exception upon
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return from entry points into NPObjects.  Typical usage:
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPN_SetException (npobj, message);
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NPN_SetException(NPObject *npobj, const NPUTF8 *message);
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
412