[WebIDL] Add support for modern callback syntax
[WebKit.git] / Source / WebCore / bindings / scripts / test / JS / JSTestCallbackFunctionWithTypedefs.cpp
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., 51 Franklin Street, Fifth Floor,
18     Boston, MA 02110-1301, USA.
19 */
20
21 #include "config.h"
22 #include "JSTestCallbackFunctionWithTypedefs.h"
23
24 #include "JSDOMConvert.h"
25 #include "JSLONG.h"
26 #include "ScriptExecutionContext.h"
27 #include <runtime/JSArray.h>
28 #include <runtime/JSLock.h>
29
30 using namespace JSC;
31
32 namespace WebCore {
33
34 JSTestCallbackFunctionWithTypedefs::JSTestCallbackFunctionWithTypedefs(JSObject* callback, JSDOMGlobalObject* globalObject)
35     : TestCallbackFunctionWithTypedefs()
36     , ActiveDOMCallback(globalObject->scriptExecutionContext())
37     , m_data(new JSCallbackDataStrong(callback, this))
38 {
39 }
40
41 JSTestCallbackFunctionWithTypedefs::~JSTestCallbackFunctionWithTypedefs()
42 {
43     ScriptExecutionContext* context = scriptExecutionContext();
44     // When the context is destroyed, all tasks with a reference to a callback
45     // should be deleted. So if the context is 0, we are on the context thread.
46     if (!context || context->isContextThread())
47         delete m_data;
48     else
49         context->postTask(DeleteCallbackDataTask(m_data));
50 #ifndef NDEBUG
51     m_data = nullptr;
52 #endif
53 }
54
55 bool JSTestCallbackFunctionWithTypedefs::handleEvent(Vector<RefPtr<LONG>> sequenceArg, int32_t longArg)
56 {
57     if (!canInvokeCallback())
58         return true;
59
60     Ref<JSTestCallbackFunctionWithTypedefs> protectedThis(*this);
61
62     JSLockHolder lock(m_data->globalObject()->vm());
63
64     ExecState* state = m_data->globalObject()->globalExec();
65     MarkedArgumentBuffer args;
66     args.append(toJS<IDLSequence<IDLNullable<IDLInterface<LONG>>>>(*state, *m_data->globalObject(), sequenceArg));
67     args.append(toJS<IDLLong>(longArg));
68
69     NakedPtr<JSC::Exception> returnedException;
70     m_data->invokeCallback(args, JSCallbackData::CallbackType::Function, Identifier(), returnedException);
71     if (returnedException)
72         reportException(state, returnedException);
73     return !returnedException;
74 }
75
76 JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, TestCallbackFunctionWithTypedefs& impl)
77 {
78     if (!static_cast<JSTestCallbackFunctionWithTypedefs&>(impl).callbackData())
79         return jsNull();
80
81     return static_cast<JSTestCallbackFunctionWithTypedefs&>(impl).callbackData()->callback();
82
83 }
84
85 } // namespace WebCore