JSElementCustom.cpp [plain text]
#include "config.h"
#include "JSElement.h"
#include "Document.h"
#include "HTMLFrameElementBase.h"
#include "HTMLNames.h"
#include "JSAttr.h"
#include "JSDOMBinding.h"
#include "JSHTMLElementWrapperFactory.h"
#include "JSMathMLElementWrapperFactory.h"
#include "JSNodeList.h"
#include "JSSVGElementWrapperFactory.h"
#include "MathMLElement.h"
#include "NodeList.h"
#include "SVGElement.h"
namespace WebCore {
using namespace JSC;
using namespace HTMLNames;
static JSValue createNewElementWrapper(JSDOMGlobalObject* globalObject, Ref<Element>&& element)
{
if (is<HTMLElement>(element))
return createJSHTMLWrapper(globalObject, static_reference_cast<HTMLElement>(WTFMove(element)));
if (is<SVGElement>(element))
return createJSSVGWrapper(globalObject, static_reference_cast<SVGElement>(WTFMove(element)));
#if ENABLE(MATHML)
if (is<MathMLElement>(element))
return createJSMathMLWrapper(globalObject, static_reference_cast<MathMLElement>(WTFMove(element)));
#endif
return createWrapper<Element>(globalObject, WTFMove(element));
}
JSValue toJS(JSGlobalObject*, JSDOMGlobalObject* globalObject, Element& element)
{
if (auto* wrapper = getCachedWrapper(globalObject->world(), element))
return wrapper;
return createNewElementWrapper(globalObject, element);
}
JSValue toJSNewlyCreated(JSGlobalObject*, JSDOMGlobalObject* globalObject, Ref<Element>&& element)
{
if (element->isDefinedCustomElement()) {
JSValue result = getCachedWrapper(globalObject->world(), element);
if (result)
return result;
ASSERT(!globalObject->vm().exceptionForInspection());
}
ASSERT(!getCachedWrapper(globalObject->world(), element));
return createNewElementWrapper(globalObject, WTFMove(element));
}
}