#include "config.h"
#include "ErrorEvent.h"
#include "DOMWrapperWorld.h"
#include "EventNames.h"
#include <JavaScriptCore/HeapInlines.h>
#include <JavaScriptCore/StrongInlines.h>
#include <wtf/IsoMallocInlines.h>
namespace WebCore {
using namespace JSC;
WTF_MAKE_ISO_ALLOCATED_IMPL(ErrorEvent);
ErrorEvent::ErrorEvent(const AtomString& type, const Init& initializer, IsTrusted isTrusted)
: Event(type, initializer, isTrusted)
, m_message(initializer.message)
, m_fileName(initializer.filename)
, m_lineNumber(initializer.lineno)
, m_columnNumber(initializer.colno)
, m_error(initializer.error)
{
}
ErrorEvent::ErrorEvent(const AtomString& type, const String& message, const String& fileName, unsigned lineNumber, unsigned columnNumber, JSC::Strong<JSC::Unknown> error)
: Event(type, CanBubble::No, IsCancelable::Yes)
, m_message(message)
, m_fileName(fileName)
, m_lineNumber(lineNumber)
, m_columnNumber(columnNumber)
, m_error(error.get())
{
}
ErrorEvent::ErrorEvent(const String& message, const String& fileName, unsigned lineNumber, unsigned columnNumber, JSC::Strong<JSC::Unknown> error)
: ErrorEvent(eventNames().errorEvent, message, fileName, lineNumber, columnNumber, error)
{
}
ErrorEvent::~ErrorEvent() = default;
EventInterface ErrorEvent::eventInterface() const
{
return ErrorEventInterfaceType;
}
JSValue ErrorEvent::error(JSGlobalObject& globalObject)
{
JSValue error = m_error;
if (!error)
return jsNull();
if (!isWorldCompatible(globalObject, error)) {
auto serializedError = trySerializeError(globalObject);
if (!serializedError)
return jsNull();
return serializedError->deserialize(globalObject, &globalObject);
}
return error;
}
RefPtr<SerializedScriptValue> ErrorEvent::trySerializeError(JSGlobalObject& exec)
{
if (!m_serializedError && !m_triedToSerialize) {
m_serializedError = SerializedScriptValue::create(exec, m_error, SerializationErrorMode::NonThrowing);
m_triedToSerialize = true;
}
return m_serializedError;
}
bool ErrorEvent::isErrorEvent() const
{
return true;
}
}