• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 #ifndef WebBindings_h
32 #define WebBindings_h
33 
34 #include "WebCommon.h"
35 #include "WebString.h"
36 #include "WebVector.h"
37 #include <bindings/npruntime.h>
38 
39 namespace WebKit {
40 
41 class WebDragData;
42 class WebElement;
43 class WebNode;
44 class WebRange;
45 
46 // A haphazard collection of functions for dealing with plugins.
47 class WebBindings {
48 public:
49     // NPN Functions ------------------------------------------------------
50     // These are all defined in npruntime.h and are well documented.
51 
52     // NPN_Construct
53     WEBKIT_API static bool construct(NPP, NPObject*, const NPVariant* args, uint32_t argCount, NPVariant* result);
54 
55     // NPN_CreateObject
56     WEBKIT_API static NPObject* createObject(NPP, NPClass*);
57 
58     // NPN_Enumerate
59     WEBKIT_API static bool enumerate(NPP, NPObject*, NPIdentifier**, uint32_t* identifierCount);
60 
61     // NPN_Evaluate
62     WEBKIT_API static bool evaluate(NPP, NPObject*, NPString* script, NPVariant* result);
63 
64     // NPN_EvaluateHelper
65     WEBKIT_API static bool evaluateHelper(NPP, bool popupsAllowed, NPObject*, NPString* script, NPVariant* result);
66 
67     // NPN_GetIntIdentifier
68     WEBKIT_API static NPIdentifier getIntIdentifier(int32_t number);
69 
70     // NPN_GetProperty
71     WEBKIT_API static bool getProperty(NPP, NPObject*, NPIdentifier property, NPVariant *result);
72 
73     // NPN_GetStringIdentifier
74     WEBKIT_API static NPIdentifier getStringIdentifier(const NPUTF8* string);
75 
76     // NPN_GetStringIdentifiers
77     WEBKIT_API static void getStringIdentifiers(const NPUTF8** names, int32_t nameCount, NPIdentifier*);
78 
79     // NPN_HasMethod
80     WEBKIT_API static bool hasMethod(NPP, NPObject*, NPIdentifier method);
81 
82     // NPN_HasProperty
83     WEBKIT_API static bool hasProperty(NPP, NPObject*, NPIdentifier property);
84 
85     // NPN_IdentifierIsString
86     WEBKIT_API static bool identifierIsString(NPIdentifier);
87 
88     // NPN_InitializeVariantWithStringCopy (though sometimes prefixed with an underscore)
89     WEBKIT_API static void initializeVariantWithStringCopy(NPVariant*, const NPString*);
90 
91     // NPN_IntFromIdentifier
92     WEBKIT_API static int32_t intFromIdentifier(NPIdentifier);
93 
94     // NPN_Invoke
95     WEBKIT_API static bool invoke(NPP, NPObject*, NPIdentifier method, const NPVariant* args, uint32_t argCount, NPVariant* result);
96 
97     // NPN_InvokeDefault
98     WEBKIT_API static bool invokeDefault(NPP, NPObject*, const NPVariant* args, uint32_t argCount, NPVariant* result);
99 
100     // NPN_ReleaseObject
101     WEBKIT_API static void releaseObject(NPObject*);
102 
103     // NPN_ReleaseVariantValue
104     WEBKIT_API static void releaseVariantValue(NPVariant*);
105 
106     // NPN_RemoveProperty
107     WEBKIT_API static bool removeProperty(NPP, NPObject*, NPIdentifier);
108 
109     // NPN_RetainObject
110     WEBKIT_API static NPObject* retainObject(NPObject*);
111 
112     // NPN_SetException
113     WEBKIT_API static void setException(NPObject*, const NPUTF8* message);
114 
115     // NPN_SetProperty
116     WEBKIT_API static bool setProperty(NPP, NPObject*, NPIdentifier, const NPVariant*);
117 
118     // _NPN_UnregisterObject
119     WEBKIT_API static void unregisterObject(NPObject*);
120 
121     // NPN_UTF8FromIdentifier
122     WEBKIT_API static NPUTF8* utf8FromIdentifier(NPIdentifier);
123 
124     // Miscellaneous utility functions ----------------------------------------
125 
126     // Complement to NPN_Get___Identifier functions.  Extracts data from the NPIdentifier data
127     // structure.  If isString is true upon return, string will be set but number's value is
128     // undefined.  If iString is false, the opposite is true.
129     WEBKIT_API static void extractIdentifierData(const NPIdentifier&, const NPUTF8*& string, int32_t& number, bool& isString);
130 
131     // Return true (success) if the given npobj is a range object.
132     // If so, return that range as a WebRange object.
133     WEBKIT_API static bool getRange(NPObject* range, WebRange*);
134 
135     // Return true (success) if the given npobj is an element.
136     // If so, return that element as a WebElement object.
137     WEBKIT_API static bool getElement(NPObject* element, WebElement*);
138 
139     WEBKIT_API static NPObject* makeIntArray(const WebVector<int>&);
140     WEBKIT_API static NPObject* makeStringArray(const WebVector<WebString>&);
141     WEBKIT_API static NPObject* makeNode(const WebNode&);
142 
143     // Exceptions -------------------------------------------------------------
144 
145     typedef void (ExceptionHandler)(void* data, const NPUTF8* message);
146 
147     // The exception handler will be notified of any exceptions thrown while
148     // operating on a NPObject.
149     WEBKIT_API static void pushExceptionHandler(ExceptionHandler, void* data);
150     WEBKIT_API static void popExceptionHandler();
151 };
152 
153 } // namespace WebKit
154 
155 #endif
156