1 /*
2     This file is part of the WebKit open source project.
3     This file has been generated by generate-bindings.pl. DO NOT MODIFY!
4 
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9 
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14 
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18     Boston, MA 02111-1307, USA.
19 */
20 
21 #include "config.h"
22 #include "V8TestObj.h"
23 
24 #include "ExceptionCode.h"
25 #include "HTMLNames.h"
26 #include "IDBBindingUtilities.h"
27 #include "IDBKey.h"
28 #include "OptionsObject.h"
29 #include "RuntimeEnabledFeatures.h"
30 #include "ScriptArguments.h"
31 #include "ScriptCallStack.h"
32 #include "ScriptCallStackFactory.h"
33 #include "SerializedScriptValue.h"
34 #include "V8Binding.h"
35 #include "V8BindingMacros.h"
36 #include "V8BindingState.h"
37 #include "V8DOMWrapper.h"
38 #include "V8IsolatedContext.h"
39 #include "V8Proxy.h"
40 #include "V8TestCallback.h"
41 #include "V8int.h"
42 #include "V8log.h"
43 #include <wtf/GetPtr.h>
44 #include <wtf/RefCounted.h>
45 #include <wtf/RefPtr.h>
46 
47 namespace WebCore {
48 
49 WrapperTypeInfo V8TestObj::info = { V8TestObj::GetTemplate, V8TestObj::derefObject, 0, 0 };
50 
51 namespace TestObjInternal {
52 
V8_USE(T)53 template <typename T> void V8_USE(T) { }
54 
readOnlyIntAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)55 static v8::Handle<v8::Value> readOnlyIntAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
56 {
57     INC_STATS("DOM.TestObj.readOnlyIntAttr._get");
58     TestObj* imp = V8TestObj::toNative(info.Holder());
59     return v8::Integer::New(imp->readOnlyIntAttr());
60 }
61 
readOnlyStringAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)62 static v8::Handle<v8::Value> readOnlyStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
63 {
64     INC_STATS("DOM.TestObj.readOnlyStringAttr._get");
65     TestObj* imp = V8TestObj::toNative(info.Holder());
66     return v8String(imp->readOnlyStringAttr());
67 }
68 
readOnlyTestObjAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)69 static v8::Handle<v8::Value> readOnlyTestObjAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
70 {
71     INC_STATS("DOM.TestObj.readOnlyTestObjAttr._get");
72     TestObj* imp = V8TestObj::toNative(info.Holder());
73     RefPtr<TestObj> result = imp->readOnlyTestObjAttr();
74     v8::Handle<v8::Value> wrapper = result.get() ? getDOMObjectMap().get(result.get()) : v8::Handle<v8::Value>();
75     if (wrapper.IsEmpty()) {
76         wrapper = toV8(result.get());
77         if (!wrapper.IsEmpty())
78             V8DOMWrapper::setHiddenReference(info.Holder(), wrapper);
79     }
80     return wrapper;
81 }
82 
shortAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)83 static v8::Handle<v8::Value> shortAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
84 {
85     INC_STATS("DOM.TestObj.shortAttr._get");
86     TestObj* imp = V8TestObj::toNative(info.Holder());
87     return v8::Integer::New(imp->shortAttr());
88 }
89 
shortAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)90 static void shortAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
91 {
92     INC_STATS("DOM.TestObj.shortAttr._set");
93     TestObj* imp = V8TestObj::toNative(info.Holder());
94     int v = toInt32(value);
95     imp->setShortAttr(v);
96     return;
97 }
98 
unsignedShortAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)99 static v8::Handle<v8::Value> unsignedShortAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
100 {
101     INC_STATS("DOM.TestObj.unsignedShortAttr._get");
102     TestObj* imp = V8TestObj::toNative(info.Holder());
103     return v8::Integer::New(imp->unsignedShortAttr());
104 }
105 
unsignedShortAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)106 static void unsignedShortAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
107 {
108     INC_STATS("DOM.TestObj.unsignedShortAttr._set");
109     TestObj* imp = V8TestObj::toNative(info.Holder());
110     int v = toUInt32(value);
111     imp->setUnsignedShortAttr(v);
112     return;
113 }
114 
intAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)115 static v8::Handle<v8::Value> intAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
116 {
117     INC_STATS("DOM.TestObj.intAttr._get");
118     TestObj* imp = V8TestObj::toNative(info.Holder());
119     return v8::Integer::New(imp->intAttr());
120 }
121 
intAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)122 static void intAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
123 {
124     INC_STATS("DOM.TestObj.intAttr._set");
125     TestObj* imp = V8TestObj::toNative(info.Holder());
126     int v = toInt32(value);
127     imp->setIntAttr(v);
128     return;
129 }
130 
longLongAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)131 static v8::Handle<v8::Value> longLongAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
132 {
133     INC_STATS("DOM.TestObj.longLongAttr._get");
134     TestObj* imp = V8TestObj::toNative(info.Holder());
135     return v8::Number::New(static_cast<double>(imp->longLongAttr()));
136 }
137 
longLongAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)138 static void longLongAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
139 {
140     INC_STATS("DOM.TestObj.longLongAttr._set");
141     TestObj* imp = V8TestObj::toNative(info.Holder());
142     long long v = toInt64(value);
143     imp->setLongLongAttr(WTF::getPtr(v));
144     return;
145 }
146 
unsignedLongLongAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)147 static v8::Handle<v8::Value> unsignedLongLongAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
148 {
149     INC_STATS("DOM.TestObj.unsignedLongLongAttr._get");
150     TestObj* imp = V8TestObj::toNative(info.Holder());
151     return v8::Number::New(static_cast<double>(imp->unsignedLongLongAttr()));
152 }
153 
unsignedLongLongAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)154 static void unsignedLongLongAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
155 {
156     INC_STATS("DOM.TestObj.unsignedLongLongAttr._set");
157     TestObj* imp = V8TestObj::toNative(info.Holder());
158     unsigned long long v = toInt64(value);
159     imp->setUnsignedLongLongAttr(WTF::getPtr(v));
160     return;
161 }
162 
stringAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)163 static v8::Handle<v8::Value> stringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
164 {
165     INC_STATS("DOM.TestObj.stringAttr._get");
166     TestObj* imp = V8TestObj::toNative(info.Holder());
167     return v8String(imp->stringAttr());
168 }
169 
stringAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)170 static void stringAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
171 {
172     INC_STATS("DOM.TestObj.stringAttr._set");
173     TestObj* imp = V8TestObj::toNative(info.Holder());
174     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<>, v, value);
175     imp->setStringAttr(v);
176     return;
177 }
178 
testObjAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)179 static v8::Handle<v8::Value> testObjAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
180 {
181     INC_STATS("DOM.TestObj.testObjAttr._get");
182     TestObj* imp = V8TestObj::toNative(info.Holder());
183     return toV8(imp->testObjAttr());
184 }
185 
testObjAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)186 static void testObjAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
187 {
188     INC_STATS("DOM.TestObj.testObjAttr._set");
189     TestObj* imp = V8TestObj::toNative(info.Holder());
190     TestObj* v = V8TestObj::HasInstance(value) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(value)) : 0;
191     imp->setTestObjAttr(WTF::getPtr(v));
192     return;
193 }
194 
XMLObjAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)195 static v8::Handle<v8::Value> XMLObjAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
196 {
197     INC_STATS("DOM.TestObj.XMLObjAttr._get");
198     TestObj* imp = V8TestObj::toNative(info.Holder());
199     return toV8(imp->xmlObjAttr());
200 }
201 
XMLObjAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)202 static void XMLObjAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
203 {
204     INC_STATS("DOM.TestObj.XMLObjAttr._set");
205     TestObj* imp = V8TestObj::toNative(info.Holder());
206     TestObj* v = V8TestObj::HasInstance(value) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(value)) : 0;
207     imp->setXMLObjAttr(WTF::getPtr(v));
208     return;
209 }
210 
createAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)211 static v8::Handle<v8::Value> createAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
212 {
213     INC_STATS("DOM.TestObj.create._get");
214     TestObj* imp = V8TestObj::toNative(info.Holder());
215     return v8Boolean(imp->isCreate());
216 }
217 
createAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)218 static void createAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
219 {
220     INC_STATS("DOM.TestObj.create._set");
221     TestObj* imp = V8TestObj::toNative(info.Holder());
222     bool v = value->BooleanValue();
223     imp->setCreate(v);
224     return;
225 }
226 
reflectedStringAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)227 static v8::Handle<v8::Value> reflectedStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
228 {
229     INC_STATS("DOM.TestObj.reflectedStringAttr._get");
230     TestObj* imp = V8TestObj::toNative(info.Holder());
231     return v8String(imp->getAttribute(WebCore::HTMLNames::reflectedstringattrAttr));
232 }
233 
reflectedStringAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)234 static void reflectedStringAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
235 {
236     INC_STATS("DOM.TestObj.reflectedStringAttr._set");
237     TestObj* imp = V8TestObj::toNative(info.Holder());
238     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
239     imp->setAttribute(WebCore::HTMLNames::reflectedstringattrAttr, v);
240     return;
241 }
242 
reflectedIntegralAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)243 static v8::Handle<v8::Value> reflectedIntegralAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
244 {
245     INC_STATS("DOM.TestObj.reflectedIntegralAttr._get");
246     TestObj* imp = V8TestObj::toNative(info.Holder());
247     return v8::Integer::New(imp->getIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr));
248 }
249 
reflectedIntegralAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)250 static void reflectedIntegralAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
251 {
252     INC_STATS("DOM.TestObj.reflectedIntegralAttr._set");
253     TestObj* imp = V8TestObj::toNative(info.Holder());
254     int v = toInt32(value);
255     imp->setIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr, v);
256     return;
257 }
258 
reflectedUnsignedIntegralAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)259 static v8::Handle<v8::Value> reflectedUnsignedIntegralAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
260 {
261     INC_STATS("DOM.TestObj.reflectedUnsignedIntegralAttr._get");
262     TestObj* imp = V8TestObj::toNative(info.Holder());
263     return v8::Integer::NewFromUnsigned(std::max(0, imp->getIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr)));
264 }
265 
reflectedUnsignedIntegralAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)266 static void reflectedUnsignedIntegralAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
267 {
268     INC_STATS("DOM.TestObj.reflectedUnsignedIntegralAttr._set");
269     TestObj* imp = V8TestObj::toNative(info.Holder());
270     unsigned v = toUInt32(value);
271     imp->setUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr, v);
272     return;
273 }
274 
reflectedBooleanAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)275 static v8::Handle<v8::Value> reflectedBooleanAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
276 {
277     INC_STATS("DOM.TestObj.reflectedBooleanAttr._get");
278     TestObj* imp = V8TestObj::toNative(info.Holder());
279     return v8Boolean(imp->hasAttribute(WebCore::HTMLNames::reflectedbooleanattrAttr));
280 }
281 
reflectedBooleanAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)282 static void reflectedBooleanAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
283 {
284     INC_STATS("DOM.TestObj.reflectedBooleanAttr._set");
285     TestObj* imp = V8TestObj::toNative(info.Holder());
286     bool v = value->BooleanValue();
287     imp->setBooleanAttribute(WebCore::HTMLNames::reflectedbooleanattrAttr, v);
288     return;
289 }
290 
reflectedURLAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)291 static v8::Handle<v8::Value> reflectedURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
292 {
293     INC_STATS("DOM.TestObj.reflectedURLAttr._get");
294     TestObj* imp = V8TestObj::toNative(info.Holder());
295     return v8String(imp->getURLAttribute(WebCore::HTMLNames::reflectedurlattrAttr));
296 }
297 
reflectedURLAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)298 static void reflectedURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
299 {
300     INC_STATS("DOM.TestObj.reflectedURLAttr._set");
301     TestObj* imp = V8TestObj::toNative(info.Holder());
302     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
303     imp->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, v);
304     return;
305 }
306 
reflectedNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)307 static v8::Handle<v8::Value> reflectedNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
308 {
309     INC_STATS("DOM.TestObj.reflectedNonEmptyURLAttr._get");
310     TestObj* imp = V8TestObj::toNative(info.Holder());
311     return v8String(imp->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr));
312 }
313 
reflectedNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)314 static void reflectedNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
315 {
316     INC_STATS("DOM.TestObj.reflectedNonEmptyURLAttr._set");
317     TestObj* imp = V8TestObj::toNative(info.Holder());
318     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
319     imp->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, v);
320     return;
321 }
322 
reflectedStringAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)323 static v8::Handle<v8::Value> reflectedStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
324 {
325     INC_STATS("DOM.TestObj.reflectedStringAttr._get");
326     TestObj* imp = V8TestObj::toNative(info.Holder());
327     return v8String(imp->getAttribute(WebCore::HTMLNames::customContentStringAttrAttr));
328 }
329 
reflectedStringAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)330 static void reflectedStringAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
331 {
332     INC_STATS("DOM.TestObj.reflectedStringAttr._set");
333     TestObj* imp = V8TestObj::toNative(info.Holder());
334     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
335     imp->setAttribute(WebCore::HTMLNames::customContentStringAttrAttr, v);
336     return;
337 }
338 
reflectedCustomIntegralAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)339 static v8::Handle<v8::Value> reflectedCustomIntegralAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
340 {
341     INC_STATS("DOM.TestObj.reflectedCustomIntegralAttr._get");
342     TestObj* imp = V8TestObj::toNative(info.Holder());
343     return v8::Integer::New(imp->getIntegralAttribute(WebCore::HTMLNames::customContentIntegralAttrAttr));
344 }
345 
reflectedCustomIntegralAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)346 static void reflectedCustomIntegralAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
347 {
348     INC_STATS("DOM.TestObj.reflectedCustomIntegralAttr._set");
349     TestObj* imp = V8TestObj::toNative(info.Holder());
350     int v = toInt32(value);
351     imp->setIntegralAttribute(WebCore::HTMLNames::customContentIntegralAttrAttr, v);
352     return;
353 }
354 
reflectedCustomBooleanAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)355 static v8::Handle<v8::Value> reflectedCustomBooleanAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
356 {
357     INC_STATS("DOM.TestObj.reflectedCustomBooleanAttr._get");
358     TestObj* imp = V8TestObj::toNative(info.Holder());
359     return v8Boolean(imp->hasAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr));
360 }
361 
reflectedCustomBooleanAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)362 static void reflectedCustomBooleanAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
363 {
364     INC_STATS("DOM.TestObj.reflectedCustomBooleanAttr._set");
365     TestObj* imp = V8TestObj::toNative(info.Holder());
366     bool v = value->BooleanValue();
367     imp->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, v);
368     return;
369 }
370 
reflectedCustomURLAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)371 static v8::Handle<v8::Value> reflectedCustomURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
372 {
373     INC_STATS("DOM.TestObj.reflectedCustomURLAttr._get");
374     TestObj* imp = V8TestObj::toNative(info.Holder());
375     return v8String(imp->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr));
376 }
377 
reflectedCustomURLAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)378 static void reflectedCustomURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
379 {
380     INC_STATS("DOM.TestObj.reflectedCustomURLAttr._set");
381     TestObj* imp = V8TestObj::toNative(info.Holder());
382     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
383     imp->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, v);
384     return;
385 }
386 
reflectedCustomNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)387 static v8::Handle<v8::Value> reflectedCustomNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
388 {
389     INC_STATS("DOM.TestObj.reflectedCustomNonEmptyURLAttr._get");
390     TestObj* imp = V8TestObj::toNative(info.Holder());
391     return v8String(imp->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr));
392 }
393 
reflectedCustomNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)394 static void reflectedCustomNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
395 {
396     INC_STATS("DOM.TestObj.reflectedCustomNonEmptyURLAttr._set");
397     TestObj* imp = V8TestObj::toNative(info.Holder());
398     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
399     imp->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, v);
400     return;
401 }
402 
attrWithGetterExceptionAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)403 static v8::Handle<v8::Value> attrWithGetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
404 {
405     INC_STATS("DOM.TestObj.attrWithGetterException._get");
406     TestObj* imp = V8TestObj::toNative(info.Holder());
407     ExceptionCode ec = 0;
408     int v = imp->attrWithGetterException(ec);
409     if (UNLIKELY(ec)) {
410         V8Proxy::setDOMException(ec);
411         return v8::Handle<v8::Value>();
412     }
413     return v8::Integer::New(v);
414 }
415 
attrWithGetterExceptionAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)416 static void attrWithGetterExceptionAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
417 {
418     INC_STATS("DOM.TestObj.attrWithGetterException._set");
419     TestObj* imp = V8TestObj::toNative(info.Holder());
420     int v = toInt32(value);
421     ExceptionCode ec = 0;
422     imp->setAttrWithGetterException(v, ec);
423     if (UNLIKELY(ec))
424         V8Proxy::setDOMException(ec);
425     return;
426 }
427 
attrWithSetterExceptionAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)428 static v8::Handle<v8::Value> attrWithSetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
429 {
430     INC_STATS("DOM.TestObj.attrWithSetterException._get");
431     TestObj* imp = V8TestObj::toNative(info.Holder());
432     return v8::Integer::New(imp->attrWithSetterException());
433 }
434 
attrWithSetterExceptionAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)435 static void attrWithSetterExceptionAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
436 {
437     INC_STATS("DOM.TestObj.attrWithSetterException._set");
438     TestObj* imp = V8TestObj::toNative(info.Holder());
439     int v = toInt32(value);
440     ExceptionCode ec = 0;
441     imp->setAttrWithSetterException(v, ec);
442     if (UNLIKELY(ec))
443         V8Proxy::setDOMException(ec);
444     return;
445 }
446 
stringAttrWithGetterExceptionAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)447 static v8::Handle<v8::Value> stringAttrWithGetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
448 {
449     INC_STATS("DOM.TestObj.stringAttrWithGetterException._get");
450     TestObj* imp = V8TestObj::toNative(info.Holder());
451     ExceptionCode ec = 0;
452     String v = imp->stringAttrWithGetterException(ec);
453     if (UNLIKELY(ec)) {
454         V8Proxy::setDOMException(ec);
455         return v8::Handle<v8::Value>();
456     }
457     return v8String(v);
458 }
459 
stringAttrWithGetterExceptionAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)460 static void stringAttrWithGetterExceptionAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
461 {
462     INC_STATS("DOM.TestObj.stringAttrWithGetterException._set");
463     TestObj* imp = V8TestObj::toNative(info.Holder());
464     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<>, v, value);
465     ExceptionCode ec = 0;
466     imp->setStringAttrWithGetterException(v, ec);
467     if (UNLIKELY(ec))
468         V8Proxy::setDOMException(ec);
469     return;
470 }
471 
stringAttrWithSetterExceptionAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)472 static v8::Handle<v8::Value> stringAttrWithSetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
473 {
474     INC_STATS("DOM.TestObj.stringAttrWithSetterException._get");
475     TestObj* imp = V8TestObj::toNative(info.Holder());
476     return v8String(imp->stringAttrWithSetterException());
477 }
478 
stringAttrWithSetterExceptionAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)479 static void stringAttrWithSetterExceptionAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
480 {
481     INC_STATS("DOM.TestObj.stringAttrWithSetterException._set");
482     TestObj* imp = V8TestObj::toNative(info.Holder());
483     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<>, v, value);
484     ExceptionCode ec = 0;
485     imp->setStringAttrWithSetterException(v, ec);
486     if (UNLIKELY(ec))
487         V8Proxy::setDOMException(ec);
488     return;
489 }
490 
scriptStringAttrAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)491 static v8::Handle<v8::Value> scriptStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
492 {
493     INC_STATS("DOM.TestObj.scriptStringAttr._get");
494     TestObj* imp = V8TestObj::toNative(info.Holder());
495     return v8StringOrNull(imp->scriptStringAttr());
496 }
497 
498 #if ENABLE(Condition1)
499 
conditionalAttr1AttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)500 static v8::Handle<v8::Value> conditionalAttr1AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
501 {
502     INC_STATS("DOM.TestObj.conditionalAttr1._get");
503     TestObj* imp = V8TestObj::toNative(info.Holder());
504     return v8::Integer::New(imp->conditionalAttr1());
505 }
506 
507 #endif // ENABLE(Condition1)
508 
509 #if ENABLE(Condition1)
510 
conditionalAttr1AttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)511 static void conditionalAttr1AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
512 {
513     INC_STATS("DOM.TestObj.conditionalAttr1._set");
514     TestObj* imp = V8TestObj::toNative(info.Holder());
515     int v = toInt32(value);
516     imp->setConditionalAttr1(v);
517     return;
518 }
519 
520 #endif // ENABLE(Condition1)
521 
522 #if ENABLE(Condition1) && ENABLE(Condition2)
523 
conditionalAttr2AttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)524 static v8::Handle<v8::Value> conditionalAttr2AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
525 {
526     INC_STATS("DOM.TestObj.conditionalAttr2._get");
527     TestObj* imp = V8TestObj::toNative(info.Holder());
528     return v8::Integer::New(imp->conditionalAttr2());
529 }
530 
531 #endif // ENABLE(Condition1) && ENABLE(Condition2)
532 
533 #if ENABLE(Condition1) && ENABLE(Condition2)
534 
conditionalAttr2AttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)535 static void conditionalAttr2AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
536 {
537     INC_STATS("DOM.TestObj.conditionalAttr2._set");
538     TestObj* imp = V8TestObj::toNative(info.Holder());
539     int v = toInt32(value);
540     imp->setConditionalAttr2(v);
541     return;
542 }
543 
544 #endif // ENABLE(Condition1) && ENABLE(Condition2)
545 
546 #if ENABLE(Condition1) || ENABLE(Condition2)
547 
conditionalAttr3AttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)548 static v8::Handle<v8::Value> conditionalAttr3AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
549 {
550     INC_STATS("DOM.TestObj.conditionalAttr3._get");
551     TestObj* imp = V8TestObj::toNative(info.Holder());
552     return v8::Integer::New(imp->conditionalAttr3());
553 }
554 
555 #endif // ENABLE(Condition1) || ENABLE(Condition2)
556 
557 #if ENABLE(Condition1) || ENABLE(Condition2)
558 
conditionalAttr3AttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)559 static void conditionalAttr3AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
560 {
561     INC_STATS("DOM.TestObj.conditionalAttr3._set");
562     TestObj* imp = V8TestObj::toNative(info.Holder());
563     int v = toInt32(value);
564     imp->setConditionalAttr3(v);
565     return;
566 }
567 
568 #endif // ENABLE(Condition1) || ENABLE(Condition2)
569 
enabledAtRuntimeAttr1AttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)570 static v8::Handle<v8::Value> enabledAtRuntimeAttr1AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
571 {
572     INC_STATS("DOM.TestObj.enabledAtRuntimeAttr1._get");
573     TestObj* imp = V8TestObj::toNative(info.Holder());
574     return v8::Integer::New(imp->enabledAtRuntimeAttr1());
575 }
576 
enabledAtRuntimeAttr1AttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)577 static void enabledAtRuntimeAttr1AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
578 {
579     INC_STATS("DOM.TestObj.enabledAtRuntimeAttr1._set");
580     TestObj* imp = V8TestObj::toNative(info.Holder());
581     int v = toInt32(value);
582     imp->setEnabledAtRuntimeAttr1(v);
583     return;
584 }
585 
enabledAtRuntimeAttr2AttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)586 static v8::Handle<v8::Value> enabledAtRuntimeAttr2AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
587 {
588     INC_STATS("DOM.TestObj.enabledAtRuntimeAttr2._get");
589     TestObj* imp = V8TestObj::toNative(info.Holder());
590     return v8::Integer::New(imp->enabledAtRuntimeAttr2());
591 }
592 
enabledAtRuntimeAttr2AttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)593 static void enabledAtRuntimeAttr2AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
594 {
595     INC_STATS("DOM.TestObj.enabledAtRuntimeAttr2._set");
596     TestObj* imp = V8TestObj::toNative(info.Holder());
597     int v = toInt32(value);
598     imp->setEnabledAtRuntimeAttr2(v);
599     return;
600 }
601 
descriptionAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)602 static v8::Handle<v8::Value> descriptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
603 {
604     INC_STATS("DOM.TestObj.description._get");
605     TestObj* imp = V8TestObj::toNative(info.Holder());
606     return v8::Integer::New(imp->description());
607 }
608 
idAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)609 static v8::Handle<v8::Value> idAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
610 {
611     INC_STATS("DOM.TestObj.id._get");
612     TestObj* imp = V8TestObj::toNative(info.Holder());
613     return v8::Integer::New(imp->id());
614 }
615 
idAttrSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)616 static void idAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
617 {
618     INC_STATS("DOM.TestObj.id._set");
619     TestObj* imp = V8TestObj::toNative(info.Holder());
620     int v = toInt32(value);
621     imp->setId(v);
622     return;
623 }
624 
hashAttrGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)625 static v8::Handle<v8::Value> hashAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
626 {
627     INC_STATS("DOM.TestObj.hash._get");
628     TestObj* imp = V8TestObj::toNative(info.Holder());
629     return v8String(imp->hash());
630 }
631 
voidMethodCallback(const v8::Arguments & args)632 static v8::Handle<v8::Value> voidMethodCallback(const v8::Arguments& args)
633 {
634     INC_STATS("DOM.TestObj.voidMethod");
635     TestObj* imp = V8TestObj::toNative(args.Holder());
636     imp->voidMethod();
637     return v8::Handle<v8::Value>();
638 }
639 
voidMethodWithArgsCallback(const v8::Arguments & args)640 static v8::Handle<v8::Value> voidMethodWithArgsCallback(const v8::Arguments& args)
641 {
642     INC_STATS("DOM.TestObj.voidMethodWithArgs");
643     TestObj* imp = V8TestObj::toNative(args.Holder());
644     EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
645     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[1]);
646     EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[2]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[2])) : 0);
647     imp->voidMethodWithArgs(intArg, strArg, objArg);
648     return v8::Handle<v8::Value>();
649 }
650 
intMethodCallback(const v8::Arguments & args)651 static v8::Handle<v8::Value> intMethodCallback(const v8::Arguments& args)
652 {
653     INC_STATS("DOM.TestObj.intMethod");
654     TestObj* imp = V8TestObj::toNative(args.Holder());
655     return v8::Integer::New(imp->intMethod());
656 }
657 
intMethodWithArgsCallback(const v8::Arguments & args)658 static v8::Handle<v8::Value> intMethodWithArgsCallback(const v8::Arguments& args)
659 {
660     INC_STATS("DOM.TestObj.intMethodWithArgs");
661     TestObj* imp = V8TestObj::toNative(args.Holder());
662     EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
663     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[1]);
664     EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[2]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[2])) : 0);
665     return v8::Integer::New(imp->intMethodWithArgs(intArg, strArg, objArg));
666 }
667 
objMethodCallback(const v8::Arguments & args)668 static v8::Handle<v8::Value> objMethodCallback(const v8::Arguments& args)
669 {
670     INC_STATS("DOM.TestObj.objMethod");
671     TestObj* imp = V8TestObj::toNative(args.Holder());
672     return toV8(imp->objMethod());
673 }
674 
objMethodWithArgsCallback(const v8::Arguments & args)675 static v8::Handle<v8::Value> objMethodWithArgsCallback(const v8::Arguments& args)
676 {
677     INC_STATS("DOM.TestObj.objMethodWithArgs");
678     TestObj* imp = V8TestObj::toNative(args.Holder());
679     EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
680     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[1]);
681     EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[2]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[2])) : 0);
682     return toV8(imp->objMethodWithArgs(intArg, strArg, objArg));
683 }
684 
methodThatRequiresAllArgsCallback(const v8::Arguments & args)685 static v8::Handle<v8::Value> methodThatRequiresAllArgsCallback(const v8::Arguments& args)
686 {
687     INC_STATS("DOM.TestObj.methodThatRequiresAllArgs");
688     if (args.Length() < 2)
689         return v8::Handle<v8::Value>();
690     TestObj* imp = V8TestObj::toNative(args.Holder());
691     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[0]);
692     EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[1]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[1])) : 0);
693     return toV8(imp->methodThatRequiresAllArgs(strArg, objArg));
694 }
695 
methodThatRequiresAllArgsAndThrowsCallback(const v8::Arguments & args)696 static v8::Handle<v8::Value> methodThatRequiresAllArgsAndThrowsCallback(const v8::Arguments& args)
697 {
698     INC_STATS("DOM.TestObj.methodThatRequiresAllArgsAndThrows");
699     if (args.Length() < 2)
700         return throwError("Not enough arguments", V8Proxy::SyntaxError);
701     TestObj* imp = V8TestObj::toNative(args.Holder());
702     ExceptionCode ec = 0;
703     {
704     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[0]);
705     EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[1]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[1])) : 0);
706     RefPtr<TestObj> result = imp->methodThatRequiresAllArgsAndThrows(strArg, objArg, ec);
707     if (UNLIKELY(ec))
708         goto fail;
709     return toV8(result.release());
710     }
711     fail:
712     V8Proxy::setDOMException(ec);
713     return v8::Handle<v8::Value>();
714 }
715 
serializedValueCallback(const v8::Arguments & args)716 static v8::Handle<v8::Value> serializedValueCallback(const v8::Arguments& args)
717 {
718     INC_STATS("DOM.TestObj.serializedValue");
719     TestObj* imp = V8TestObj::toNative(args.Holder());
720     bool serializedArgDidThrow = false;
721     RefPtr<SerializedScriptValue> serializedArg = SerializedScriptValue::create(args[0], serializedArgDidThrow);
722     if (serializedArgDidThrow)
723         return v8::Undefined();
724     imp->serializedValue(serializedArg);
725     return v8::Handle<v8::Value>();
726 }
727 
idbKeyCallback(const v8::Arguments & args)728 static v8::Handle<v8::Value> idbKeyCallback(const v8::Arguments& args)
729 {
730     INC_STATS("DOM.TestObj.idbKey");
731     TestObj* imp = V8TestObj::toNative(args.Holder());
732     ExceptionCode ec = 0;
733     {
734     RefPtr<IDBKey> key = createIDBKeyFromValue(args[0]);
735     if (UNLIKELY(!key)) {
736         ec = TYPE_MISMATCH_ERR;
737         goto fail;
738     }
739     imp->idbKey(key);
740     return v8::Handle<v8::Value>();
741     }
742     fail:
743     V8Proxy::setDOMException(ec);
744     return v8::Handle<v8::Value>();
745 }
746 
optionsObjectCallback(const v8::Arguments & args)747 static v8::Handle<v8::Value> optionsObjectCallback(const v8::Arguments& args)
748 {
749     INC_STATS("DOM.TestObj.optionsObject");
750     TestObj* imp = V8TestObj::toNative(args.Holder());
751     EXCEPTION_BLOCK(OptionsObject, oo, args[0]);
752     if (args.Length() <= 1) {
753         imp->optionsObject(oo);
754         return v8::Handle<v8::Value>();
755     }
756     EXCEPTION_BLOCK(OptionsObject, ooo, args[1]);
757     imp->optionsObject(oo, ooo);
758     return v8::Handle<v8::Value>();
759 }
760 
methodWithExceptionCallback(const v8::Arguments & args)761 static v8::Handle<v8::Value> methodWithExceptionCallback(const v8::Arguments& args)
762 {
763     INC_STATS("DOM.TestObj.methodWithException");
764     TestObj* imp = V8TestObj::toNative(args.Holder());
765     ExceptionCode ec = 0;
766     {
767     imp->methodWithException(ec);
768     if (UNLIKELY(ec))
769         goto fail;
770     return v8::Handle<v8::Value>();
771     }
772     fail:
773     V8Proxy::setDOMException(ec);
774     return v8::Handle<v8::Value>();
775 }
776 
customArgsAndExceptionCallback(const v8::Arguments & args)777 static v8::Handle<v8::Value> customArgsAndExceptionCallback(const v8::Arguments& args)
778 {
779     INC_STATS("DOM.TestObj.customArgsAndException");
780     TestObj* imp = V8TestObj::toNative(args.Holder());
781     ExceptionCode ec = 0;
782     {
783     RefPtr<ScriptArguments> scriptArguments(createScriptArguments(args, 1));
784     size_t maxStackSize = imp->shouldCaptureFullStackTrace() ? ScriptCallStack::maxCallStackSizeToCapture : 1;
785     RefPtr<ScriptCallStack> callStack(createScriptCallStack(maxStackSize));
786     if (!callStack)
787         return v8::Undefined();
788     EXCEPTION_BLOCK(log*, intArg, V8log::HasInstance(args[0]) ? V8log::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
789     imp->customArgsAndException(intArg, scriptArguments, callStack, ec);
790     if (UNLIKELY(ec))
791         goto fail;
792     return v8::Handle<v8::Value>();
793     }
794     fail:
795     V8Proxy::setDOMException(ec);
796     return v8::Handle<v8::Value>();
797 }
798 
addEventListenerCallback(const v8::Arguments & args)799 static v8::Handle<v8::Value> addEventListenerCallback(const v8::Arguments& args)
800 {
801     INC_STATS("DOM.TestObj.addEventListener()");
802     RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOrCreate);
803     if (listener) {
804         V8TestObj::toNative(args.Holder())->addEventListener(v8ValueToAtomicWebCoreString(args[0]), listener, args[2]->BooleanValue());
805         createHiddenDependency(args.Holder(), args[1], V8TestObj::eventListenerCacheIndex);
806     }
807     return v8::Undefined();
808 }
809 
removeEventListenerCallback(const v8::Arguments & args)810 static v8::Handle<v8::Value> removeEventListenerCallback(const v8::Arguments& args)
811 {
812     INC_STATS("DOM.TestObj.removeEventListener()");
813     RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOnly);
814     if (listener) {
815         V8TestObj::toNative(args.Holder())->removeEventListener(v8ValueToAtomicWebCoreString(args[0]), listener.get(), args[2]->BooleanValue());
816         removeHiddenDependency(args.Holder(), args[1], V8TestObj::eventListenerCacheIndex);
817     }
818     return v8::Undefined();
819 }
820 
withDynamicFrameCallback(const v8::Arguments & args)821 static v8::Handle<v8::Value> withDynamicFrameCallback(const v8::Arguments& args)
822 {
823     INC_STATS("DOM.TestObj.withDynamicFrame");
824     TestObj* imp = V8TestObj::toNative(args.Holder());
825     Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
826     if (!enteredFrame)
827         return v8::Undefined();
828     imp->withDynamicFrame(enteredFrame);
829     return v8::Handle<v8::Value>();
830 }
831 
withDynamicFrameAndArgCallback(const v8::Arguments & args)832 static v8::Handle<v8::Value> withDynamicFrameAndArgCallback(const v8::Arguments& args)
833 {
834     INC_STATS("DOM.TestObj.withDynamicFrameAndArg");
835     TestObj* imp = V8TestObj::toNative(args.Holder());
836     EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
837     Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
838     if (!enteredFrame)
839         return v8::Undefined();
840     imp->withDynamicFrameAndArg(enteredFrame, intArg);
841     return v8::Handle<v8::Value>();
842 }
843 
withDynamicFrameAndOptionalArgCallback(const v8::Arguments & args)844 static v8::Handle<v8::Value> withDynamicFrameAndOptionalArgCallback(const v8::Arguments& args)
845 {
846     INC_STATS("DOM.TestObj.withDynamicFrameAndOptionalArg");
847     TestObj* imp = V8TestObj::toNative(args.Holder());
848     EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
849     if (args.Length() <= 1) {
850         Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
851         if (!enteredFrame)
852             return v8::Undefined();
853         imp->withDynamicFrameAndOptionalArg(enteredFrame, intArg);
854         return v8::Handle<v8::Value>();
855     }
856     EXCEPTION_BLOCK(int, optionalArg, toInt32(args[1]));
857     Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
858     if (!enteredFrame)
859         return v8::Undefined();
860     imp->withDynamicFrameAndOptionalArg(enteredFrame, intArg, optionalArg);
861     return v8::Handle<v8::Value>();
862 }
863 
withDynamicFrameAndUserGestureCallback(const v8::Arguments & args)864 static v8::Handle<v8::Value> withDynamicFrameAndUserGestureCallback(const v8::Arguments& args)
865 {
866     INC_STATS("DOM.TestObj.withDynamicFrameAndUserGesture");
867     TestObj* imp = V8TestObj::toNative(args.Holder());
868     EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
869     Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
870     if (!enteredFrame)
871         return v8::Undefined();
872     imp->withDynamicFrameAndUserGesture(enteredFrame, intArg, processingUserGesture());
873     return v8::Handle<v8::Value>();
874 }
875 
withDynamicFrameAndUserGestureASADCallback(const v8::Arguments & args)876 static v8::Handle<v8::Value> withDynamicFrameAndUserGestureASADCallback(const v8::Arguments& args)
877 {
878     INC_STATS("DOM.TestObj.withDynamicFrameAndUserGestureASAD");
879     TestObj* imp = V8TestObj::toNative(args.Holder());
880     EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
881     if (args.Length() <= 1) {
882         Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
883         if (!enteredFrame)
884             return v8::Undefined();
885         imp->withDynamicFrameAndUserGestureASAD(enteredFrame, intArg, processingUserGesture());
886         return v8::Handle<v8::Value>();
887     }
888     EXCEPTION_BLOCK(int, optionalArg, toInt32(args[1]));
889     Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
890     if (!enteredFrame)
891         return v8::Undefined();
892     imp->withDynamicFrameAndUserGestureASAD(enteredFrame, intArg, optionalArg, processingUserGesture());
893     return v8::Handle<v8::Value>();
894 }
895 
withScriptStateVoidCallback(const v8::Arguments & args)896 static v8::Handle<v8::Value> withScriptStateVoidCallback(const v8::Arguments& args)
897 {
898     INC_STATS("DOM.TestObj.withScriptStateVoid");
899     TestObj* imp = V8TestObj::toNative(args.Holder());
900     EmptyScriptState state;
901     imp->withScriptStateVoid(&state);
902     if (state.hadException())
903         return throwError(state.exception());
904     return v8::Handle<v8::Value>();
905 }
906 
withScriptStateObjCallback(const v8::Arguments & args)907 static v8::Handle<v8::Value> withScriptStateObjCallback(const v8::Arguments& args)
908 {
909     INC_STATS("DOM.TestObj.withScriptStateObj");
910     TestObj* imp = V8TestObj::toNative(args.Holder());
911     EmptyScriptState state;
912     RefPtr<TestObj> result = imp->withScriptStateObj(&state);
913     if (state.hadException())
914         return throwError(state.exception());
915     return toV8(result.release());
916 }
917 
withScriptStateVoidExceptionCallback(const v8::Arguments & args)918 static v8::Handle<v8::Value> withScriptStateVoidExceptionCallback(const v8::Arguments& args)
919 {
920     INC_STATS("DOM.TestObj.withScriptStateVoidException");
921     TestObj* imp = V8TestObj::toNative(args.Holder());
922     ExceptionCode ec = 0;
923     {
924     EmptyScriptState state;
925     imp->withScriptStateVoidException(&state, ec);
926     if (UNLIKELY(ec))
927         goto fail;
928     if (state.hadException())
929         return throwError(state.exception());
930     return v8::Handle<v8::Value>();
931     }
932     fail:
933     V8Proxy::setDOMException(ec);
934     return v8::Handle<v8::Value>();
935 }
936 
withScriptStateObjExceptionCallback(const v8::Arguments & args)937 static v8::Handle<v8::Value> withScriptStateObjExceptionCallback(const v8::Arguments& args)
938 {
939     INC_STATS("DOM.TestObj.withScriptStateObjException");
940     TestObj* imp = V8TestObj::toNative(args.Holder());
941     ExceptionCode ec = 0;
942     {
943     EmptyScriptState state;
944     RefPtr<TestObj> result = imp->withScriptStateObjException(&state, ec);
945     if (UNLIKELY(ec))
946         goto fail;
947     if (state.hadException())
948         return throwError(state.exception());
949     return toV8(result.release());
950     }
951     fail:
952     V8Proxy::setDOMException(ec);
953     return v8::Handle<v8::Value>();
954 }
955 
withScriptExecutionContextCallback(const v8::Arguments & args)956 static v8::Handle<v8::Value> withScriptExecutionContextCallback(const v8::Arguments& args)
957 {
958     INC_STATS("DOM.TestObj.withScriptExecutionContext");
959     TestObj* imp = V8TestObj::toNative(args.Holder());
960     ScriptExecutionContext* scriptContext = getScriptExecutionContext();
961     if (!scriptContext)
962         return v8::Undefined();
963     imp->withScriptExecutionContext(scriptContext);
964     return v8::Handle<v8::Value>();
965 }
966 
methodWithOptionalArgCallback(const v8::Arguments & args)967 static v8::Handle<v8::Value> methodWithOptionalArgCallback(const v8::Arguments& args)
968 {
969     INC_STATS("DOM.TestObj.methodWithOptionalArg");
970     TestObj* imp = V8TestObj::toNative(args.Holder());
971     if (args.Length() <= 0) {
972         imp->methodWithOptionalArg();
973         return v8::Handle<v8::Value>();
974     }
975     EXCEPTION_BLOCK(int, opt, toInt32(args[0]));
976     imp->methodWithOptionalArg(opt);
977     return v8::Handle<v8::Value>();
978 }
979 
methodWithNonOptionalArgAndOptionalArgCallback(const v8::Arguments & args)980 static v8::Handle<v8::Value> methodWithNonOptionalArgAndOptionalArgCallback(const v8::Arguments& args)
981 {
982     INC_STATS("DOM.TestObj.methodWithNonOptionalArgAndOptionalArg");
983     TestObj* imp = V8TestObj::toNative(args.Holder());
984     EXCEPTION_BLOCK(int, nonOpt, toInt32(args[0]));
985     if (args.Length() <= 1) {
986         imp->methodWithNonOptionalArgAndOptionalArg(nonOpt);
987         return v8::Handle<v8::Value>();
988     }
989     EXCEPTION_BLOCK(int, opt, toInt32(args[1]));
990     imp->methodWithNonOptionalArgAndOptionalArg(nonOpt, opt);
991     return v8::Handle<v8::Value>();
992 }
993 
methodWithNonOptionalArgAndTwoOptionalArgsCallback(const v8::Arguments & args)994 static v8::Handle<v8::Value> methodWithNonOptionalArgAndTwoOptionalArgsCallback(const v8::Arguments& args)
995 {
996     INC_STATS("DOM.TestObj.methodWithNonOptionalArgAndTwoOptionalArgs");
997     TestObj* imp = V8TestObj::toNative(args.Holder());
998     EXCEPTION_BLOCK(int, nonOpt, toInt32(args[0]));
999     if (args.Length() <= 1) {
1000         imp->methodWithNonOptionalArgAndTwoOptionalArgs(nonOpt);
1001         return v8::Handle<v8::Value>();
1002     }
1003     EXCEPTION_BLOCK(int, opt1, toInt32(args[1]));
1004     EXCEPTION_BLOCK(int, opt2, toInt32(args[2]));
1005     imp->methodWithNonOptionalArgAndTwoOptionalArgs(nonOpt, opt1, opt2);
1006     return v8::Handle<v8::Value>();
1007 }
1008 
methodWithCallbackArgCallback(const v8::Arguments & args)1009 static v8::Handle<v8::Value> methodWithCallbackArgCallback(const v8::Arguments& args)
1010 {
1011     INC_STATS("DOM.TestObj.methodWithCallbackArg");
1012     TestObj* imp = V8TestObj::toNative(args.Holder());
1013     if (args.Length() <= 0 || !args[0]->IsObject())
1014         return throwError(TYPE_MISMATCH_ERR);
1015     RefPtr<TestCallback> callback = V8TestCallback::create(args[0], getScriptExecutionContext());
1016     imp->methodWithCallbackArg(callback);
1017     return v8::Handle<v8::Value>();
1018 }
1019 
methodWithNonCallbackArgAndCallbackArgCallback(const v8::Arguments & args)1020 static v8::Handle<v8::Value> methodWithNonCallbackArgAndCallbackArgCallback(const v8::Arguments& args)
1021 {
1022     INC_STATS("DOM.TestObj.methodWithNonCallbackArgAndCallbackArg");
1023     TestObj* imp = V8TestObj::toNative(args.Holder());
1024     EXCEPTION_BLOCK(int, nonCallback, toInt32(args[0]));
1025     if (args.Length() <= 1 || !args[1]->IsObject())
1026         return throwError(TYPE_MISMATCH_ERR);
1027     RefPtr<TestCallback> callback = V8TestCallback::create(args[1], getScriptExecutionContext());
1028     imp->methodWithNonCallbackArgAndCallbackArg(nonCallback, callback);
1029     return v8::Handle<v8::Value>();
1030 }
1031 
methodWithCallbackAndOptionalArgCallback(const v8::Arguments & args)1032 static v8::Handle<v8::Value> methodWithCallbackAndOptionalArgCallback(const v8::Arguments& args)
1033 {
1034     INC_STATS("DOM.TestObj.methodWithCallbackAndOptionalArg");
1035     TestObj* imp = V8TestObj::toNative(args.Holder());
1036     RefPtr<TestCallback> callback;
1037     if (args.Length() > 0 && !args[0]->IsNull() && !args[0]->IsUndefined()) {
1038         if (!args[0]->IsObject())
1039             return throwError(TYPE_MISMATCH_ERR);
1040         callback = V8TestCallback::create(args[0], getScriptExecutionContext());
1041     }
1042     imp->methodWithCallbackAndOptionalArg(callback);
1043     return v8::Handle<v8::Value>();
1044 }
1045 
overloadedMethod1Callback(const v8::Arguments & args)1046 static v8::Handle<v8::Value> overloadedMethod1Callback(const v8::Arguments& args)
1047 {
1048     INC_STATS("DOM.TestObj.overloadedMethod1");
1049     TestObj* imp = V8TestObj::toNative(args.Holder());
1050     EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[0]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
1051     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[1]);
1052     imp->overloadedMethod(objArg, strArg);
1053     return v8::Handle<v8::Value>();
1054 }
1055 
overloadedMethod2Callback(const v8::Arguments & args)1056 static v8::Handle<v8::Value> overloadedMethod2Callback(const v8::Arguments& args)
1057 {
1058     INC_STATS("DOM.TestObj.overloadedMethod2");
1059     TestObj* imp = V8TestObj::toNative(args.Holder());
1060     EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[0]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
1061     if (args.Length() <= 1) {
1062         imp->overloadedMethod(objArg);
1063         return v8::Handle<v8::Value>();
1064     }
1065     EXCEPTION_BLOCK(int, intArg, toInt32(args[1]));
1066     imp->overloadedMethod(objArg, intArg);
1067     return v8::Handle<v8::Value>();
1068 }
1069 
overloadedMethod3Callback(const v8::Arguments & args)1070 static v8::Handle<v8::Value> overloadedMethod3Callback(const v8::Arguments& args)
1071 {
1072     INC_STATS("DOM.TestObj.overloadedMethod3");
1073     TestObj* imp = V8TestObj::toNative(args.Holder());
1074     STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[0]);
1075     imp->overloadedMethod(strArg);
1076     return v8::Handle<v8::Value>();
1077 }
1078 
overloadedMethod4Callback(const v8::Arguments & args)1079 static v8::Handle<v8::Value> overloadedMethod4Callback(const v8::Arguments& args)
1080 {
1081     INC_STATS("DOM.TestObj.overloadedMethod4");
1082     TestObj* imp = V8TestObj::toNative(args.Holder());
1083     EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
1084     imp->overloadedMethod(intArg);
1085     return v8::Handle<v8::Value>();
1086 }
1087 
overloadedMethod5Callback(const v8::Arguments & args)1088 static v8::Handle<v8::Value> overloadedMethod5Callback(const v8::Arguments& args)
1089 {
1090     INC_STATS("DOM.TestObj.overloadedMethod5");
1091     TestObj* imp = V8TestObj::toNative(args.Holder());
1092     if (args.Length() <= 0 || !args[0]->IsObject())
1093         return throwError(TYPE_MISMATCH_ERR);
1094     RefPtr<TestCallback> callback = V8TestCallback::create(args[0], getScriptExecutionContext());
1095     imp->overloadedMethod(callback);
1096     return v8::Handle<v8::Value>();
1097 }
1098 
overloadedMethodCallback(const v8::Arguments & args)1099 static v8::Handle<v8::Value> overloadedMethodCallback(const v8::Arguments& args)
1100 {
1101     INC_STATS("DOM.TestObj.overloadedMethod");
1102     if ((args.Length() == 2 && (args[0]->IsNull() || V8TestObj::HasInstance(args[0])) && (args[1]->IsNull() || args[1]->IsUndefined() || args[1]->IsString() || args[1]->IsObject())))
1103         return overloadedMethod1Callback(args);
1104     if ((args.Length() == 1 && (args[0]->IsNull() || V8TestObj::HasInstance(args[0]))) || (args.Length() == 2 && (args[0]->IsNull() || V8TestObj::HasInstance(args[0]))))
1105         return overloadedMethod2Callback(args);
1106     if ((args.Length() == 1 && (args[0]->IsNull() || args[0]->IsUndefined() || args[0]->IsString() || args[0]->IsObject())))
1107         return overloadedMethod3Callback(args);
1108     if (args.Length() == 1)
1109         return overloadedMethod4Callback(args);
1110     if ((args.Length() == 1 && (args[0]->IsNull() || args[0]->IsObject())))
1111         return overloadedMethod5Callback(args);
1112     V8Proxy::throwTypeError();
1113     return notHandledByInterceptor();
1114 }
1115 
classMethodCallback(const v8::Arguments & args)1116 static v8::Handle<v8::Value> classMethodCallback(const v8::Arguments& args)
1117 {
1118     INC_STATS("DOM.TestObj.classMethod");
1119     TestObj::classMethod();
1120     return v8::Handle<v8::Value>();
1121 }
1122 
classMethodWithOptionalCallback(const v8::Arguments & args)1123 static v8::Handle<v8::Value> classMethodWithOptionalCallback(const v8::Arguments& args)
1124 {
1125     INC_STATS("DOM.TestObj.classMethodWithOptional");
1126     if (args.Length() <= 0) {
1127         return v8::Integer::New(TestObj::classMethodWithOptional());
1128     }
1129     EXCEPTION_BLOCK(int, arg, toInt32(args[0]));
1130     return v8::Integer::New(TestObj::classMethodWithOptional(arg));
1131 }
1132 
enabledAtRuntimeMethod1Callback(const v8::Arguments & args)1133 static v8::Handle<v8::Value> enabledAtRuntimeMethod1Callback(const v8::Arguments& args)
1134 {
1135     INC_STATS("DOM.TestObj.enabledAtRuntimeMethod1");
1136     TestObj* imp = V8TestObj::toNative(args.Holder());
1137     EXCEPTION_BLOCK(int, intArg, V8int::HasInstance(args[0]) ? V8int::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
1138     imp->enabledAtRuntimeMethod1(intArg);
1139     return v8::Handle<v8::Value>();
1140 }
1141 
enabledAtRuntimeMethod2Callback(const v8::Arguments & args)1142 static v8::Handle<v8::Value> enabledAtRuntimeMethod2Callback(const v8::Arguments& args)
1143 {
1144     INC_STATS("DOM.TestObj.enabledAtRuntimeMethod2");
1145     TestObj* imp = V8TestObj::toNative(args.Holder());
1146     EXCEPTION_BLOCK(int, intArg, V8int::HasInstance(args[0]) ? V8int::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
1147     imp->enabledAtRuntimeMethod2(intArg);
1148     return v8::Handle<v8::Value>();
1149 }
1150 
1151 } // namespace TestObjInternal
1152 
1153 static const BatchedAttribute TestObjAttrs[] = {
1154     // Attribute 'readOnlyIntAttr' (Type: 'readonly attribute' ExtAttr: '')
1155     {"readOnlyIntAttr", TestObjInternal::readOnlyIntAttrAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1156     // Attribute 'readOnlyStringAttr' (Type: 'readonly attribute' ExtAttr: '')
1157     {"readOnlyStringAttr", TestObjInternal::readOnlyStringAttrAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1158     // Attribute 'readOnlyTestObjAttr' (Type: 'readonly attribute' ExtAttr: '')
1159     {"readOnlyTestObjAttr", TestObjInternal::readOnlyTestObjAttrAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1160     // Attribute 'shortAttr' (Type: 'attribute' ExtAttr: '')
1161     {"shortAttr", TestObjInternal::shortAttrAttrGetter, TestObjInternal::shortAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1162     // Attribute 'unsignedShortAttr' (Type: 'attribute' ExtAttr: '')
1163     {"unsignedShortAttr", TestObjInternal::unsignedShortAttrAttrGetter, TestObjInternal::unsignedShortAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1164     // Attribute 'intAttr' (Type: 'attribute' ExtAttr: '')
1165     {"intAttr", TestObjInternal::intAttrAttrGetter, TestObjInternal::intAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1166     // Attribute 'longLongAttr' (Type: 'attribute' ExtAttr: '')
1167     {"longLongAttr", TestObjInternal::longLongAttrAttrGetter, TestObjInternal::longLongAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1168     // Attribute 'unsignedLongLongAttr' (Type: 'attribute' ExtAttr: '')
1169     {"unsignedLongLongAttr", TestObjInternal::unsignedLongLongAttrAttrGetter, TestObjInternal::unsignedLongLongAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1170     // Attribute 'stringAttr' (Type: 'attribute' ExtAttr: '')
1171     {"stringAttr", TestObjInternal::stringAttrAttrGetter, TestObjInternal::stringAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1172     // Attribute 'testObjAttr' (Type: 'attribute' ExtAttr: '')
1173     {"testObjAttr", TestObjInternal::testObjAttrAttrGetter, TestObjInternal::testObjAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1174     // Attribute 'XMLObjAttr' (Type: 'attribute' ExtAttr: '')
1175     {"XMLObjAttr", TestObjInternal::XMLObjAttrAttrGetter, TestObjInternal::XMLObjAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1176     // Attribute 'create' (Type: 'attribute' ExtAttr: '')
1177     {"create", TestObjInternal::createAttrGetter, TestObjInternal::createAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1178     // Attribute 'reflectedStringAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1179     {"reflectedStringAttr", TestObjInternal::reflectedStringAttrAttrGetter, TestObjInternal::reflectedStringAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1180     // Attribute 'reflectedIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1181     {"reflectedIntegralAttr", TestObjInternal::reflectedIntegralAttrAttrGetter, TestObjInternal::reflectedIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1182     // Attribute 'reflectedUnsignedIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1183     {"reflectedUnsignedIntegralAttr", TestObjInternal::reflectedUnsignedIntegralAttrAttrGetter, TestObjInternal::reflectedUnsignedIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1184     // Attribute 'reflectedBooleanAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1185     {"reflectedBooleanAttr", TestObjInternal::reflectedBooleanAttrAttrGetter, TestObjInternal::reflectedBooleanAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1186     // Attribute 'reflectedURLAttr' (Type: 'attribute' ExtAttr: 'URL Reflect')
1187     {"reflectedURLAttr", TestObjInternal::reflectedURLAttrAttrGetter, TestObjInternal::reflectedURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1188     // Attribute 'reflectedNonEmptyURLAttr' (Type: 'attribute' ExtAttr: 'URL NonEmpty Reflect')
1189     {"reflectedNonEmptyURLAttr", TestObjInternal::reflectedNonEmptyURLAttrAttrGetter, TestObjInternal::reflectedNonEmptyURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1190     // Attribute 'reflectedStringAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1191     {"reflectedStringAttr", TestObjInternal::reflectedStringAttrAttrGetter, TestObjInternal::reflectedStringAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1192     // Attribute 'reflectedCustomIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1193     {"reflectedCustomIntegralAttr", TestObjInternal::reflectedCustomIntegralAttrAttrGetter, TestObjInternal::reflectedCustomIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1194     // Attribute 'reflectedCustomBooleanAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1195     {"reflectedCustomBooleanAttr", TestObjInternal::reflectedCustomBooleanAttrAttrGetter, TestObjInternal::reflectedCustomBooleanAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1196     // Attribute 'reflectedCustomURLAttr' (Type: 'attribute' ExtAttr: 'URL Reflect')
1197     {"reflectedCustomURLAttr", TestObjInternal::reflectedCustomURLAttrAttrGetter, TestObjInternal::reflectedCustomURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1198     // Attribute 'reflectedCustomNonEmptyURLAttr' (Type: 'attribute' ExtAttr: 'URL NonEmpty Reflect')
1199     {"reflectedCustomNonEmptyURLAttr", TestObjInternal::reflectedCustomNonEmptyURLAttrAttrGetter, TestObjInternal::reflectedCustomNonEmptyURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1200     // Attribute 'attrWithGetterException' (Type: 'attribute' ExtAttr: '')
1201     {"attrWithGetterException", TestObjInternal::attrWithGetterExceptionAttrGetter, TestObjInternal::attrWithGetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1202     // Attribute 'attrWithSetterException' (Type: 'attribute' ExtAttr: '')
1203     {"attrWithSetterException", TestObjInternal::attrWithSetterExceptionAttrGetter, TestObjInternal::attrWithSetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1204     // Attribute 'stringAttrWithGetterException' (Type: 'attribute' ExtAttr: '')
1205     {"stringAttrWithGetterException", TestObjInternal::stringAttrWithGetterExceptionAttrGetter, TestObjInternal::stringAttrWithGetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1206     // Attribute 'stringAttrWithSetterException' (Type: 'attribute' ExtAttr: '')
1207     {"stringAttrWithSetterException", TestObjInternal::stringAttrWithSetterExceptionAttrGetter, TestObjInternal::stringAttrWithSetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1208     // Attribute 'customAttr' (Type: 'attribute' ExtAttr: 'Custom')
1209     {"customAttr", V8TestObj::customAttrAccessorGetter, V8TestObj::customAttrAccessorSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1210     // Attribute 'scriptStringAttr' (Type: 'readonly attribute' ExtAttr: 'ConvertScriptString')
1211     {"scriptStringAttr", TestObjInternal::scriptStringAttrAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1212 #if ENABLE(Condition1)
1213     // Attribute 'conditionalAttr1' (Type: 'attribute' ExtAttr: 'Conditional')
1214     {"conditionalAttr1", TestObjInternal::conditionalAttr1AttrGetter, TestObjInternal::conditionalAttr1AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1215 #endif // ENABLE(Condition1)
1216 #if ENABLE(Condition1) && ENABLE(Condition2)
1217     // Attribute 'conditionalAttr2' (Type: 'attribute' ExtAttr: 'Conditional')
1218     {"conditionalAttr2", TestObjInternal::conditionalAttr2AttrGetter, TestObjInternal::conditionalAttr2AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1219 #endif // ENABLE(Condition1) && ENABLE(Condition2)
1220 #if ENABLE(Condition1) || ENABLE(Condition2)
1221     // Attribute 'conditionalAttr3' (Type: 'attribute' ExtAttr: 'Conditional')
1222     {"conditionalAttr3", TestObjInternal::conditionalAttr3AttrGetter, TestObjInternal::conditionalAttr3AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1223 #endif // ENABLE(Condition1) || ENABLE(Condition2)
1224     // Attribute 'description' (Type: 'readonly attribute' ExtAttr: '')
1225     {"description", TestObjInternal::descriptionAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1226     // Attribute 'id' (Type: 'attribute' ExtAttr: '')
1227     {"id", TestObjInternal::idAttrGetter, TestObjInternal::idAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1228     // Attribute 'hash' (Type: 'readonly attribute' ExtAttr: '')
1229     {"hash", TestObjInternal::hashAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1230 };
1231 static const BatchedCallback TestObjCallbacks[] = {
1232     {"voidMethod", TestObjInternal::voidMethodCallback},
1233     {"intMethod", TestObjInternal::intMethodCallback},
1234     {"objMethod", TestObjInternal::objMethodCallback},
1235     {"serializedValue", TestObjInternal::serializedValueCallback},
1236     {"idbKey", TestObjInternal::idbKeyCallback},
1237     {"optionsObject", TestObjInternal::optionsObjectCallback},
1238     {"methodWithException", TestObjInternal::methodWithExceptionCallback},
1239     {"customMethod", V8TestObj::customMethodCallback},
1240     {"customMethodWithArgs", V8TestObj::customMethodWithArgsCallback},
1241     {"addEventListener", TestObjInternal::addEventListenerCallback},
1242     {"removeEventListener", TestObjInternal::removeEventListenerCallback},
1243     {"withDynamicFrame", TestObjInternal::withDynamicFrameCallback},
1244     {"withDynamicFrameAndArg", TestObjInternal::withDynamicFrameAndArgCallback},
1245     {"withDynamicFrameAndOptionalArg", TestObjInternal::withDynamicFrameAndOptionalArgCallback},
1246     {"withDynamicFrameAndUserGesture", TestObjInternal::withDynamicFrameAndUserGestureCallback},
1247     {"withDynamicFrameAndUserGestureASAD", TestObjInternal::withDynamicFrameAndUserGestureASADCallback},
1248     {"withScriptStateVoid", TestObjInternal::withScriptStateVoidCallback},
1249     {"withScriptStateObj", TestObjInternal::withScriptStateObjCallback},
1250     {"withScriptStateVoidException", TestObjInternal::withScriptStateVoidExceptionCallback},
1251     {"withScriptStateObjException", TestObjInternal::withScriptStateObjExceptionCallback},
1252     {"withScriptExecutionContext", TestObjInternal::withScriptExecutionContextCallback},
1253     {"methodWithOptionalArg", TestObjInternal::methodWithOptionalArgCallback},
1254     {"methodWithNonOptionalArgAndOptionalArg", TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback},
1255     {"methodWithNonOptionalArgAndTwoOptionalArgs", TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback},
1256     {"methodWithCallbackArg", TestObjInternal::methodWithCallbackArgCallback},
1257     {"methodWithNonCallbackArgAndCallbackArg", TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback},
1258     {"methodWithCallbackAndOptionalArg", TestObjInternal::methodWithCallbackAndOptionalArgCallback},
1259     {"overloadedMethod", TestObjInternal::overloadedMethodCallback},
1260 };
1261 static const BatchedConstant TestObjConsts[] = {
1262     {"CONST_VALUE_0", static_cast<signed int>(0)},
1263     {"CONST_VALUE_1", static_cast<signed int>(1)},
1264     {"CONST_VALUE_2", static_cast<signed int>(2)},
1265     {"CONST_VALUE_4", static_cast<signed int>(4)},
1266     {"CONST_VALUE_8", static_cast<signed int>(8)},
1267     {"CONST_VALUE_9", static_cast<signed int>(-1)},
1268     {"CONST_VALUE_10", static_cast<signed int>("my constant string")},
1269     {"CONST_VALUE_11", static_cast<signed int>(0xffffffff)},
1270     {"CONST_VALUE_12", static_cast<signed int>(0x01)},
1271     {"CONST_VALUE_13", static_cast<signed int>(0X20)},
1272     {"CONST_VALUE_14", static_cast<signed int>(0x1abc)},
1273 };
1274 
1275 COMPILE_ASSERT(0 == TestObj::CONST_VALUE_0, TestObjEnumCONST_VALUE_0IsWrongUseDontCheckEnums);
1276 COMPILE_ASSERT(1 == TestObj::CONST_VALUE_1, TestObjEnumCONST_VALUE_1IsWrongUseDontCheckEnums);
1277 COMPILE_ASSERT(2 == TestObj::CONST_VALUE_2, TestObjEnumCONST_VALUE_2IsWrongUseDontCheckEnums);
1278 COMPILE_ASSERT(4 == TestObj::CONST_VALUE_4, TestObjEnumCONST_VALUE_4IsWrongUseDontCheckEnums);
1279 COMPILE_ASSERT(8 == TestObj::CONST_VALUE_8, TestObjEnumCONST_VALUE_8IsWrongUseDontCheckEnums);
1280 COMPILE_ASSERT(-1 == TestObj::CONST_VALUE_9, TestObjEnumCONST_VALUE_9IsWrongUseDontCheckEnums);
1281 COMPILE_ASSERT("my constant string" == TestObj::CONST_VALUE_10, TestObjEnumCONST_VALUE_10IsWrongUseDontCheckEnums);
1282 COMPILE_ASSERT(0xffffffff == TestObj::CONST_VALUE_11, TestObjEnumCONST_VALUE_11IsWrongUseDontCheckEnums);
1283 COMPILE_ASSERT(0x01 == TestObj::CONST_VALUE_12, TestObjEnumCONST_VALUE_12IsWrongUseDontCheckEnums);
1284 COMPILE_ASSERT(0X20 == TestObj::CONST_VALUE_13, TestObjEnumCONST_VALUE_13IsWrongUseDontCheckEnums);
1285 COMPILE_ASSERT(0x1abc == TestObj::CONST_VALUE_14, TestObjEnumCONST_VALUE_14IsWrongUseDontCheckEnums);
1286 
ConfigureV8TestObjTemplate(v8::Persistent<v8::FunctionTemplate> desc)1287 static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestObjTemplate(v8::Persistent<v8::FunctionTemplate> desc)
1288 {
1289     v8::Local<v8::Signature> defaultSignature = configureTemplate(desc, "TestObj", v8::Persistent<v8::FunctionTemplate>(), V8TestObj::internalFieldCount,
1290         TestObjAttrs, WTF_ARRAY_LENGTH(TestObjAttrs),
1291         TestObjCallbacks, WTF_ARRAY_LENGTH(TestObjCallbacks));
1292     v8::Local<v8::ObjectTemplate> instance = desc->InstanceTemplate();
1293     v8::Local<v8::ObjectTemplate> proto = desc->PrototypeTemplate();
1294 
1295     if (RuntimeEnabledFeatures::enabledAtRuntimeAttr1Enabled()) {
1296         static const BatchedAttribute attrData =\
1297         // Attribute 'enabledAtRuntimeAttr1' (Type: 'attribute' ExtAttr: 'EnabledAtRuntime')
1298         {"enabledAtRuntimeAttr1", TestObjInternal::enabledAtRuntimeAttr1AttrGetter, TestObjInternal::enabledAtRuntimeAttr1AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */};
1299         configureAttribute(instance, proto, attrData);
1300     }
1301     if (RuntimeEnabledFeatures::featureNameEnabled()) {
1302         static const BatchedAttribute attrData =\
1303         // Attribute 'enabledAtRuntimeAttr2' (Type: 'attribute' ExtAttr: 'EnabledAtRuntime')
1304         {"enabledAtRuntimeAttr2", TestObjInternal::enabledAtRuntimeAttr2AttrGetter, TestObjInternal::enabledAtRuntimeAttr2AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */};
1305         configureAttribute(instance, proto, attrData);
1306     }
1307 
1308     // Custom Signature 'voidMethodWithArgs'
1309     const int voidMethodWithArgsArgc = 3;
1310     v8::Handle<v8::FunctionTemplate> voidMethodWithArgsArgv[voidMethodWithArgsArgc] = { v8::Handle<v8::FunctionTemplate>(), v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1311     v8::Handle<v8::Signature> voidMethodWithArgsSignature = v8::Signature::New(desc, voidMethodWithArgsArgc, voidMethodWithArgsArgv);
1312     proto->Set(v8::String::New("voidMethodWithArgs"), v8::FunctionTemplate::New(TestObjInternal::voidMethodWithArgsCallback, v8::Handle<v8::Value>(), voidMethodWithArgsSignature));
1313 
1314     // Custom Signature 'intMethodWithArgs'
1315     const int intMethodWithArgsArgc = 3;
1316     v8::Handle<v8::FunctionTemplate> intMethodWithArgsArgv[intMethodWithArgsArgc] = { v8::Handle<v8::FunctionTemplate>(), v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1317     v8::Handle<v8::Signature> intMethodWithArgsSignature = v8::Signature::New(desc, intMethodWithArgsArgc, intMethodWithArgsArgv);
1318     proto->Set(v8::String::New("intMethodWithArgs"), v8::FunctionTemplate::New(TestObjInternal::intMethodWithArgsCallback, v8::Handle<v8::Value>(), intMethodWithArgsSignature));
1319 
1320     // Custom Signature 'objMethodWithArgs'
1321     const int objMethodWithArgsArgc = 3;
1322     v8::Handle<v8::FunctionTemplate> objMethodWithArgsArgv[objMethodWithArgsArgc] = { v8::Handle<v8::FunctionTemplate>(), v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1323     v8::Handle<v8::Signature> objMethodWithArgsSignature = v8::Signature::New(desc, objMethodWithArgsArgc, objMethodWithArgsArgv);
1324     proto->Set(v8::String::New("objMethodWithArgs"), v8::FunctionTemplate::New(TestObjInternal::objMethodWithArgsCallback, v8::Handle<v8::Value>(), objMethodWithArgsSignature));
1325 
1326     // Custom Signature 'methodThatRequiresAllArgs'
1327     const int methodThatRequiresAllArgsArgc = 2;
1328     v8::Handle<v8::FunctionTemplate> methodThatRequiresAllArgsArgv[methodThatRequiresAllArgsArgc] = { v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1329     v8::Handle<v8::Signature> methodThatRequiresAllArgsSignature = v8::Signature::New(desc, methodThatRequiresAllArgsArgc, methodThatRequiresAllArgsArgv);
1330     proto->Set(v8::String::New("methodThatRequiresAllArgs"), v8::FunctionTemplate::New(TestObjInternal::methodThatRequiresAllArgsCallback, v8::Handle<v8::Value>(), methodThatRequiresAllArgsSignature));
1331 
1332     // Custom Signature 'methodThatRequiresAllArgsAndThrows'
1333     const int methodThatRequiresAllArgsAndThrowsArgc = 2;
1334     v8::Handle<v8::FunctionTemplate> methodThatRequiresAllArgsAndThrowsArgv[methodThatRequiresAllArgsAndThrowsArgc] = { v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1335     v8::Handle<v8::Signature> methodThatRequiresAllArgsAndThrowsSignature = v8::Signature::New(desc, methodThatRequiresAllArgsAndThrowsArgc, methodThatRequiresAllArgsAndThrowsArgv);
1336     proto->Set(v8::String::New("methodThatRequiresAllArgsAndThrows"), v8::FunctionTemplate::New(TestObjInternal::methodThatRequiresAllArgsAndThrowsCallback, v8::Handle<v8::Value>(), methodThatRequiresAllArgsAndThrowsSignature));
1337 
1338     // Custom Signature 'customArgsAndException'
1339     const int customArgsAndExceptionArgc = 1;
1340     v8::Handle<v8::FunctionTemplate> customArgsAndExceptionArgv[customArgsAndExceptionArgc] = { V8log::GetRawTemplate() };
1341     v8::Handle<v8::Signature> customArgsAndExceptionSignature = v8::Signature::New(desc, customArgsAndExceptionArgc, customArgsAndExceptionArgv);
1342     proto->Set(v8::String::New("customArgsAndException"), v8::FunctionTemplate::New(TestObjInternal::customArgsAndExceptionCallback, v8::Handle<v8::Value>(), customArgsAndExceptionSignature));
1343     desc->Set(v8::String::New("classMethod"), v8::FunctionTemplate::New(TestObjInternal::classMethodCallback, v8::Handle<v8::Value>(), v8::Local<v8::Signature>()));
1344     desc->Set(v8::String::New("classMethodWithOptional"), v8::FunctionTemplate::New(TestObjInternal::classMethodWithOptionalCallback, v8::Handle<v8::Value>(), v8::Local<v8::Signature>()));
1345     if (RuntimeEnabledFeatures::enabledAtRuntimeMethod1Enabled())
1346         proto->Set(v8::String::New("enabledAtRuntimeMethod1"), v8::FunctionTemplate::New(TestObjInternal::enabledAtRuntimeMethod1Callback, v8::Handle<v8::Value>(), defaultSignature));
1347     if (RuntimeEnabledFeatures::featureNameEnabled())
1348         proto->Set(v8::String::New("enabledAtRuntimeMethod2"), v8::FunctionTemplate::New(TestObjInternal::enabledAtRuntimeMethod2Callback, v8::Handle<v8::Value>(), defaultSignature));
1349     batchConfigureConstants(desc, proto, TestObjConsts, WTF_ARRAY_LENGTH(TestObjConsts));
1350 
1351     // Custom toString template
1352     desc->Set(getToStringName(), getToStringTemplate());
1353     return desc;
1354 }
1355 
GetRawTemplate()1356 v8::Persistent<v8::FunctionTemplate> V8TestObj::GetRawTemplate()
1357 {
1358     static v8::Persistent<v8::FunctionTemplate> V8TestObjRawCache = createRawTemplate();
1359     return V8TestObjRawCache;
1360 }
1361 
GetTemplate()1362 v8::Persistent<v8::FunctionTemplate> V8TestObj::GetTemplate()
1363 {
1364     static v8::Persistent<v8::FunctionTemplate> V8TestObjCache = ConfigureV8TestObjTemplate(GetRawTemplate());
1365     return V8TestObjCache;
1366 }
1367 
HasInstance(v8::Handle<v8::Value> value)1368 bool V8TestObj::HasInstance(v8::Handle<v8::Value> value)
1369 {
1370     return GetRawTemplate()->HasInstance(value);
1371 }
1372 
1373 
wrapSlow(TestObj * impl)1374 v8::Handle<v8::Object> V8TestObj::wrapSlow(TestObj* impl)
1375 {
1376     v8::Handle<v8::Object> wrapper;
1377     V8Proxy* proxy = 0;
1378     wrapper = V8DOMWrapper::instantiateV8Object(proxy, &info, impl);
1379     if (wrapper.IsEmpty())
1380         return wrapper;
1381 
1382     impl->ref();
1383     v8::Persistent<v8::Object> wrapperHandle = v8::Persistent<v8::Object>::New(wrapper);
1384     getDOMObjectMap().set(impl, wrapperHandle);
1385     return wrapper;
1386 }
1387 
derefObject(void * object)1388 void V8TestObj::derefObject(void* object)
1389 {
1390     static_cast<TestObj*>(object)->deref();
1391 }
1392 
1393 } // namespace WebCore
1394