5aa4c8d1eae380fc641a8ba99aad5774b150dfc2
[WebKit-https.git] / Source / WebKit / chromium / public / WebBindings.h
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     // DumpRenderTree support -------------------------------------------------
132
133     // Return true (success) if the given npobj is a range object.
134     // If so, return that range as a WebRange object.
135     WEBKIT_API static bool getRange(NPObject* range, WebRange*);
136
137     // Return true (success) if the given npobj is an element.
138     // If so, return that element as a WebElement object.
139     WEBKIT_API static bool getElement(NPObject* element, WebElement*);
140
141     WEBKIT_API static NPObject* makeIntArray(const WebVector<int>&);
142     WEBKIT_API static NPObject* makeStringArray(const WebVector<WebString>&);
143
144     // Exceptions -------------------------------------------------------------
145
146     typedef void (ExceptionHandler)(void* data, const NPUTF8* message);
147
148     // The exception handler will be notified of any exceptions thrown while
149     // operating on a NPObject.
150     WEBKIT_API static void pushExceptionHandler(ExceptionHandler, void* data);
151     WEBKIT_API static void popExceptionHandler();
152 };
153
154 } // namespace WebKit
155
156 #endif