WebCore:
[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 static bool testEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count);
30 static bool testHasProperty(NPObject *obj, NPIdentifier name);
31 static NPObject *testAllocate(NPP npp, NPClass *theClass);
32 static void testDeallocate(NPObject *obj);
33
34 static NPClass testClass = { 
35     NP_CLASS_STRUCT_VERSION,
36     testAllocate, 
37     testDeallocate, 
38     0,
39     0,
40     0,
41     0,
42     testHasProperty,
43     0,
44     0,
45     0,
46     testEnumerate
47 };
48
49 NPClass *getTestClass(void)
50 {
51     return &testClass;
52 }
53
54 static bool identifiersInitialized = false;
55
56 #define NUM_TEST_IDENTIFIERS 2
57
58 static NPIdentifier testIdentifiers[NUM_TEST_IDENTIFIERS];
59 static const NPUTF8 *testIdentifierNames[NUM_TEST_IDENTIFIERS] = {
60     "foo",
61     "bar"
62 };
63
64 static void initializeIdentifiers(void)
65 {
66     browser->getstringidentifiers(testIdentifierNames, NUM_TEST_IDENTIFIERS, testIdentifiers);
67 }
68
69 static NPObject *testAllocate(NPP npp, NPClass *theClass)
70 {
71     NPObject *newInstance = (NPObject*)malloc(sizeof(NPObject));
72     
73     if (!identifiersInitialized) {
74         identifiersInitialized = true;
75         initializeIdentifiers();
76     }
77     
78     return newInstance;
79 }
80
81 static void testDeallocate(NPObject *obj) 
82 {
83     free(obj);
84 }
85
86 static bool testHasProperty(NPObject *obj, NPIdentifier name)
87 {
88     for (unsigned i = 0; i < NUM_TEST_IDENTIFIERS; i++) {
89         if (testIdentifiers[i] == name)
90             return true;
91     }
92     
93     return false;
94 }
95
96
97 static bool testEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count)
98 {
99     *count = NUM_TEST_IDENTIFIERS;
100     
101     *value = (NPIdentifier*)browser->memalloc(NUM_TEST_IDENTIFIERS * sizeof(NPIdentifier));
102     memcpy(*value, testIdentifiers, sizeof(NPIdentifier) * NUM_TEST_IDENTIFIERS);
103     
104     return true;
105 }
106
107