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->impl());
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->impl());
uncacheWrapper(world, &jsCSSValue->impl(), jsCSSValue);
}
JSValue toJS(ExecState*, JSDOMGlobalObject* globalObject, CSSValue* value)
{
if (!value)
return jsNull();
ASSERT(value->isCSSOMSafe());
if (!value->isCSSOMSafe())
return jsNull();
JSObject* wrapper = getCachedWrapper(globalObject->world(), value);
if (wrapper)
return wrapper;
if (value->isWebKitCSSTransformValue())
wrapper = CREATE_DOM_WRAPPER(globalObject, WebKitCSSTransformValue, value);
else if (value->isWebKitCSSFilterValue())
wrapper = CREATE_DOM_WRAPPER(globalObject, WebKitCSSFilterValue, value);
else if (value->isValueList())
wrapper = CREATE_DOM_WRAPPER(globalObject, CSSValueList, value);
else if (value->isSVGPaint())
wrapper = CREATE_DOM_WRAPPER(globalObject, SVGPaint, value);
else if (value->isSVGColor())
wrapper = CREATE_DOM_WRAPPER(globalObject, SVGColor, value);
else if (value->isPrimitiveValue())
wrapper = CREATE_DOM_WRAPPER(globalObject, CSSPrimitiveValue, value);
else
wrapper = CREATE_DOM_WRAPPER(globalObject, CSSValue, value);
return wrapper;
}
}