diff options
Diffstat (limited to 'src/bun.js/bindings/webcore/JSErrorCallback.cpp')
-rw-r--r-- | src/bun.js/bindings/webcore/JSErrorCallback.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/bun.js/bindings/webcore/JSErrorCallback.cpp b/src/bun.js/bindings/webcore/JSErrorCallback.cpp new file mode 100644 index 000000000..de924d857 --- /dev/null +++ b/src/bun.js/bindings/webcore/JSErrorCallback.cpp @@ -0,0 +1,89 @@ +/* + This file is part of the WebKit open source project. + This file has been generated by generate-bindings.pl. DO NOT MODIFY! + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "config.h" +#include "JSErrorCallback.h" + +#include "JSDOMConvertBase.h" +#include "JSDOMConvertInterface.h" +#include "JSDOMException.h" +#include "JSDOMExceptionHandling.h" +#include "JSDOMGlobalObject.h" +#include "ScriptExecutionContext.h" + +namespace WebCore { +using namespace JSC; + +JSErrorCallback::JSErrorCallback(VM& vm, JSObject* callback) + : ErrorCallback(jsCast<JSDOMGlobalObject*>(callback->globalObject())->scriptExecutionContext()) + , m_data(new JSCallbackDataStrong(vm, callback, this)) +{ +} + +JSErrorCallback::~JSErrorCallback() +{ + ScriptExecutionContext* context = scriptExecutionContext(); + // When the context is destroyed, all tasks with a reference to a callback + // should be deleted. So if the context is 0, we are on the context thread. + if (!context || context->isContextThread()) + delete m_data; + else + context->postTask(new DeleteCallbackDataTask(m_data)); +#ifndef NDEBUG + m_data = nullptr; +#endif +} + +CallbackResult<typename IDLUndefined::ImplementationType> JSErrorCallback::handleEvent(typename IDLInterface<DOMException>::ParameterType error) +{ + if (!canInvokeCallback()) + return CallbackResultType::UnableToExecute; + + Ref<JSErrorCallback> protectedThis(*this); + + auto& globalObject = *jsCast<JSDOMGlobalObject*>(m_data->callback()->globalObject()); + auto& vm = globalObject.vm(); + + JSLockHolder lock(vm); + auto& lexicalGlobalObject = globalObject; + JSValue thisValue = jsUndefined(); + MarkedArgumentBuffer args; + args.append(toJS<IDLInterface<DOMException>>(lexicalGlobalObject, globalObject, error)); + ASSERT(!args.hasOverflowed()); + + NakedPtr<JSC::Exception> returnedException; + m_data->invokeCallback(vm, thisValue, args, JSCallbackData::CallbackType::Function, Identifier(), returnedException); + if (returnedException) { + reportException(&lexicalGlobalObject, returnedException); + return CallbackResultType::ExceptionThrown; + } + + return {}; +} + +JSC::JSValue toJS(ErrorCallback& impl) +{ + if (!static_cast<JSErrorCallback&>(impl).callbackData()) + return jsNull(); + + return static_cast<JSErrorCallback&>(impl).callbackData()->callback(); +} + +} // namespace WebCore |