4cd94028aea79e7d83876fd0516553f2da200198
[WebKit-https.git] / WebKitTools / DumpRenderTree / TestNetscapePlugIn.subproj / TestObject.cpp
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 <string.h>
30 #include <stdlib.h>
31
32 static bool testEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count);
33 static bool testHasProperty(NPObject *obj, NPIdentifier name);
34 static bool testGetProperty(NPObject*, NPIdentifier name, NPVariant*);
35 static NPObject *testAllocate(NPP npp, NPClass *theClass);
36 static void testDeallocate(NPObject *obj);
37 static bool testConstruct(NPObject* obj, const NPVariant* args, uint32_t argCount, NPVariant* result);
38
39 static NPClass testClass = { 
40     NP_CLASS_STRUCT_VERSION,
41     testAllocate, 
42     testDeallocate, 
43     0,
44     0,
45     0,
46     0,
47     testHasProperty,
48     testGetProperty,
49     0,
50     0,
51     testEnumerate,
52     testConstruct
53 };
54
55 NPClass *getTestClass(void)
56 {
57     return &testClass;
58 }
59
60 static bool identifiersInitialized = false;
61
62 #define ID_OBJECT_POINTER 2
63
64 #define NUM_ENUMERATABLE_TEST_IDENTIFIERS 2
65 #define NUM_TEST_IDENTIFIERS 3
66
67 static NPIdentifier testIdentifiers[NUM_TEST_IDENTIFIERS];
68 static const NPUTF8 *testIdentifierNames[NUM_TEST_IDENTIFIERS] = {
69     "foo",
70     "bar",
71     "objectPointer",
72 };
73
74 static void initializeIdentifiers(void)
75 {
76     browser->getstringidentifiers(testIdentifierNames, NUM_TEST_IDENTIFIERS, testIdentifiers);
77 }
78
79 static NPObject *testAllocate(NPP npp, NPClass *theClass)
80 {
81     NPObject *newInstance = static_cast<NPObject*>(malloc(sizeof(NPObject)));
82     
83     if (!identifiersInitialized) {
84         identifiersInitialized = true;
85         initializeIdentifiers();
86     }
87     
88     return newInstance;
89 }
90
91 static void testDeallocate(NPObject *obj) 
92 {
93     free(obj);
94 }
95
96 static bool testHasProperty(NPObject *obj, NPIdentifier name)
97 {
98     for (unsigned i = 0; i < NUM_TEST_IDENTIFIERS; i++) {
99         if (testIdentifiers[i] == name)
100             return true;
101     }
102     
103     return false;
104 }
105
106 static bool testGetProperty(NPObject* npobj, NPIdentifier name, NPVariant* result)
107 {
108     if (name == testIdentifiers[ID_OBJECT_POINTER]) {
109         int32_t objectPointer = static_cast<int32_t>(reinterpret_cast<long long>(npobj));
110
111         INT32_TO_NPVARIANT(objectPointer, *result);
112         return true;
113     }
114     
115     return false;
116 }
117
118
119 static bool testEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count)
120 {
121     *count = NUM_TEST_IDENTIFIERS;
122     
123     *value = (NPIdentifier*)browser->memalloc(NUM_ENUMERATABLE_TEST_IDENTIFIERS * sizeof(NPIdentifier));
124     memcpy(*value, testIdentifiers, sizeof(NPIdentifier) * NUM_ENUMERATABLE_TEST_IDENTIFIERS);
125     
126     return true;
127 }
128
129 static bool testConstruct(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result)
130 {
131     browser->retainobject(npobj);
132     
133     // Just return the same object.
134     OBJECT_TO_NPVARIANT(npobj, *result);
135     return true;
136 }
137
138