Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Side by Side Diff: webkit/tools/npapi_layout_test_plugin/TestObject.cpp

Issue 5318009: Remove the forked npapi layout test plugin from the tree. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/webkit
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2007 Apple 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
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #include "TestObject.h"
27 #include "PluginObject.h"
28
29 #include <stdlib.h>
30 #include <string.h>
31
32 static bool testEnumerate(NPObject*, NPIdentifier **value, uint32_t *count);
33 static bool testHasMethod(NPObject*, NPIdentifier name);
34 static bool testInvoke(NPObject* header, NPIdentifier name, const NPVariant* arg s, uint32_t argCount, NPVariant* result);
35 static bool testInvokeDefault(NPObject*, const NPVariant *args, uint32_t argCoun t, NPVariant *result);
36 static bool testHasProperty(NPObject*, NPIdentifier name);
37 static bool testGetProperty(NPObject*, NPIdentifier name, NPVariant *variant);
38 static NPObject *testAllocate(NPP npp, NPClass *theClass);
39 static void testDeallocate(NPObject*);
40 static bool testConstruct(NPObject*, const NPVariant* args, uint32_t argCount, N PVariant* result);
41
42
43 static NPClass testClass = {
44 NP_CLASS_STRUCT_VERSION,
45 testAllocate,
46 testDeallocate,
47 0,
48 testHasMethod,
49 testInvoke,
50 testInvokeDefault,
51 testHasProperty,
52 testGetProperty,
53 0,
54 0,
55 testEnumerate,
56 testConstruct
57 };
58
59 NPClass *getTestClass(void)
60 {
61 return &testClass;
62 }
63
64 int testObjectCount = 0;
65
66 int getTestObjectCount(void) {
67 return testObjectCount;
68 }
69
70 static bool identifiersInitialized = false;
71
72 #define NUM_ENUMERABLE_TEST_IDENTIFIERS 4
73 #define NUM_TEST_IDENTIFIERS 5
74
75 #define ID_PROPERTY_FOO 0
76 #define ID_PROPERTY_BAR 1
77 #define ID_PROPERTY_TEST_OBJECT 2
78 #define ID_PROPERTY_REF_COUNT 3
79 #define ID_PROPERTY_OBJECT_POINTER 4
80
81 static NPIdentifier testIdentifiers[NUM_TEST_IDENTIFIERS];
82 static const NPUTF8 *testIdentifierNames[NUM_TEST_IDENTIFIERS] = {
83 "foo",
84 "bar",
85 "testObject",
86 "refCount",
87 "objectPointer",
88 };
89
90 #define ID_THROW_EXCEPTION_METHOD 0
91 #define ID_PAGE_TEST_OBJECT_METHOD 1
92 #define NUM_METHOD_IDENTIFIERS 2
93
94 static NPIdentifier testMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
95 static const NPUTF8 *testMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
96 "throwException",
97 "pageTestObject",
98 };
99
100 static void initializeIdentifiers(void)
101 {
102 browser->getstringidentifiers(testIdentifierNames, NUM_TEST_IDENTIFIERS, tes tIdentifiers);
103 browser->getstringidentifiers(testMethodIdentifierNames, NUM_METHOD_IDENTIFI ERS, testMethodIdentifiers);
104 }
105
106 static NPObject *testAllocate(NPP npp, NPClass *theClass)
107 {
108 TestObject *newInstance =
109 static_cast<TestObject*>(malloc(sizeof(TestObject)));
110 newInstance->npp = npp;
111 newInstance->testObject = NULL;
112 newInstance->testPageObject = NULL;
113 ++testObjectCount;
114
115 if (!identifiersInitialized) {
116 identifiersInitialized = true;
117 initializeIdentifiers();
118 }
119
120 return reinterpret_cast<NPObject*>(newInstance);
121 }
122
123 static void testDeallocate(NPObject *obj)
124 {
125 TestObject *testObject = reinterpret_cast<TestObject*>(obj);
126 if (testObject->testObject)
127 browser->releaseobject(testObject->testObject);
128 if (testObject->testPageObject)
129 browser->releaseobject(testObject->testPageObject);
130 --testObjectCount;
131 free(obj);
132 }
133
134 static bool testHasMethod(NPObject*, NPIdentifier name)
135 {
136 for (unsigned i = 0; i < NUM_METHOD_IDENTIFIERS; i++) {
137 if (testMethodIdentifiers[i] == name)
138 return true;
139 }
140 return false;
141 }
142
143 static bool testInvoke(NPObject* header, NPIdentifier name, const NPVariant* /*a rgs*/, uint32_t /*argCount*/, NPVariant* /*result*/)
144 {
145 if (name == testMethodIdentifiers[ID_THROW_EXCEPTION_METHOD]) {
146 browser->setexception(header, "test object throwException SUCCESS");
147 return true;
148 } else if (name == testMethodIdentifiers[ID_PAGE_TEST_OBJECT_METHOD]) {
149 TestObject* testObject = reinterpret_cast<TestObject*>(header);
150 if (testObject->testPageObject == NULL) {
151 NPObject *windowScriptObject;
152 browser->getvalue(testObject->npp, NPNVWindowNPObject, &windowScriptOb ject);
153
154 NPIdentifier pageMethod = browser->getstringidentifier("dummyMethod");
155
156 NPVariant functionPointer;
157 browser->invoke(testObject->npp, windowScriptObject, pageMethod,
158 NULL, 0, &functionPointer);
159
160 if (NPVARIANT_IS_OBJECT(functionPointer))
161 testObject->testPageObject = NPVARIANT_TO_OBJECT(functionPointer);
162
163 return true;
164 }
165 }
166 return false;
167 }
168
169 static bool testInvokeDefault(NPObject *obj, const NPVariant *args,
170 uint32_t argCount, NPVariant *result)
171 {
172 INT32_TO_NPVARIANT(2, *result);
173 return true;
174 }
175
176 static bool testHasProperty(NPObject*, NPIdentifier name)
177 {
178 for (unsigned i = 0; i < NUM_TEST_IDENTIFIERS; i++) {
179 if (testIdentifiers[i] == name)
180 return true;
181 }
182
183 return false;
184 }
185
186 static bool testGetProperty(NPObject *obj, NPIdentifier name,
187 NPVariant *variant)
188 {
189 if (name == testIdentifiers[ID_PROPERTY_FOO]) {
190 char* mem = static_cast<char*>(browser->memalloc(4));
191 strcpy(mem, "foo");
192 STRINGZ_TO_NPVARIANT(mem, *variant);
193 return true;
194 } else if (name == testIdentifiers[ID_PROPERTY_BAR]) {
195 BOOLEAN_TO_NPVARIANT(true, *variant);
196 return true;
197 } else if (name == testIdentifiers[ID_PROPERTY_TEST_OBJECT]) {
198 TestObject* testObject = reinterpret_cast<TestObject*>(obj);
199 if (testObject->testObject == NULL)
200 testObject->testObject = browser->createobject(NULL, &testClass);
201 browser->retainobject(testObject->testObject);
202 OBJECT_TO_NPVARIANT(testObject->testObject, *variant);
203 return true;
204 } else if (name == testIdentifiers[ID_PROPERTY_REF_COUNT]) {
205 INT32_TO_NPVARIANT(obj->referenceCount, *variant);
206 return true;
207 } else if (name == testIdentifiers[ID_PROPERTY_OBJECT_POINTER]) {
208 int32_t objectPointer = static_cast<int32_t>(reinterpret_cast<long long> (obj));
209 INT32_TO_NPVARIANT(objectPointer, *variant);
210 return true;
211 }
212 return false;
213 }
214
215 static bool testEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count )
216 {
217 *count = NUM_ENUMERABLE_TEST_IDENTIFIERS;
218
219 *value = (NPIdentifier*)browser->memalloc(NUM_ENUMERABLE_TEST_IDENTIFIERS * sizeof(NPIdentifier));
220 memcpy(*value, testIdentifiers, sizeof(NPIdentifier) * NUM_ENUMERABLE_TEST_I DENTIFIERS);
221
222 return true;
223 }
224
225 static bool testConstruct(NPObject* npobj, const NPVariant* args, uint32_t argCo unt, NPVariant* result)
226 {
227 browser->retainobject(npobj);
228
229 // Just return the same object.
230 OBJECT_TO_NPVARIANT(npobj, *result);
231 return true;
232 }
233
234
OLDNEW
« no previous file with comments | « webkit/tools/npapi_layout_test_plugin/TestObject.h ('k') | webkit/tools/npapi_layout_test_plugin/main.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698