JSCSSValueCustom.cpp [plain text]
#include "config.h"
#include "JSCSSValue.h"
#include "CSSPrimitiveValue.h"
#include "CSSValueList.h"
#include "JSCSSPrimitiveValue.h"
#include "JSCSSValueList.h"
#include "JSNode.h"
#include "JSSVGColor.h"
#include "JSSVGPaint.h"
#include "JSWebKitCSSFilterValue.h"
#include "JSWebKitCSSTransformValue.h"
#include "SVGColor.h"
#include "SVGPaint.h"
#include "WebKitCSSFilterValue.h"
#include "WebKitCSSTransformValue.h"
using namespace JSC;
namespace WebCore {
bool JSCSSValueOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void* context, SlotVisitor& visitor)
{
JSCSSValue* jsCSSValue = jsCast<JSCSSValue*>(handle.slot()->asCell());
if (!jsCSSValue->hasCustomProperties())
return false;
DOMWrapperWorld* world = static_cast<DOMWrapperWorld*>(context);
void* root = world->m_cssValueRoots.get(&jsCSSValue->wrapped());
if (!root)
return false;
return visitor.containsOpaqueRoot(root);
}
void JSCSSValueOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* context)
{
JSCSSValue* jsCSSValue = jsCast<JSCSSValue*>(handle.slot()->asCell());
DOMWrapperWorld& world = *static_cast<DOMWrapperWorld*>(context);
world.m_cssValueRoots.remove(&jsCSSValue->wrapped());
uncacheWrapper(world, &jsCSSValue->wrapped(), jsCSSValue);
}
JSValue toJSNewlyCreated(ExecState*, JSDOMGlobalObject* globalObject, Ref<CSSValue>&& value)
{
if (value->isWebKitCSSTransformValue())
return CREATE_DOM_WRAPPER(globalObject, WebKitCSSTransformValue, WTFMove(value));
if (value->isWebKitCSSFilterValue())
return CREATE_DOM_WRAPPER(globalObject, WebKitCSSFilterValue, WTFMove(value));
if (value->isValueList())
return CREATE_DOM_WRAPPER(globalObject, CSSValueList, WTFMove(value));
if (value->isSVGPaint())
return CREATE_DOM_WRAPPER(globalObject, SVGPaint, WTFMove(value));
if (value->isSVGColor())
return CREATE_DOM_WRAPPER(globalObject, SVGColor, WTFMove(value));
if (value->isPrimitiveValue())
return CREATE_DOM_WRAPPER(globalObject, CSSPrimitiveValue, WTFMove(value));
return CREATE_DOM_WRAPPER(globalObject, CSSValue, WTFMove(value));
}
JSValue toJS(ExecState* state, JSDOMGlobalObject* globalObject, CSSValue& value)
{
ASSERT(value.isCSSOMSafe());
if (!value.isCSSOMSafe())
return jsNull();
return wrap(state, globalObject, value);
}
}