DeprecatedCSSOMValue.h [plain text]
#pragma once
#include "CSSStyleDeclaration.h"
#include "CSSValue.h"
#include "ExceptionOr.h"
#include <wtf/Ref.h>
#include <wtf/RefCounted.h>
#include <wtf/TypeCasts.h>
#include <wtf/WeakPtr.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class DeprecatedCSSOMValue : public RefCounted<DeprecatedCSSOMValue>, public CanMakeWeakPtr<DeprecatedCSSOMValue> {
public:
enum Type {
CSS_INHERIT = 0,
CSS_PRIMITIVE_VALUE = 1,
CSS_VALUE_LIST = 2,
CSS_CUSTOM = 3
};
void deref()
{
if (derefBase())
destroy();
}
WEBCORE_EXPORT unsigned cssValueType() const;
WEBCORE_EXPORT String cssText() const;
ExceptionOr<void> setCssText(const String&) { return { }; }
bool isComplexValue() const { return m_classType == DeprecatedComplexValueClass; }
bool isPrimitiveValue() const { return m_classType == DeprecatedPrimitiveValueClass; }
bool isValueList() const { return m_classType == DeprecatedValueListClass; }
CSSStyleDeclaration& owner() const { return m_owner; }
protected:
static const size_t ClassTypeBits = 2;
enum DeprecatedClassType {
DeprecatedComplexValueClass,
DeprecatedPrimitiveValueClass,
DeprecatedValueListClass
};
DeprecatedClassType classType() const { return static_cast<DeprecatedClassType>(m_classType); }
DeprecatedCSSOMValue(DeprecatedClassType classType, CSSStyleDeclaration& owner)
: m_classType(classType)
, m_owner(owner)
{
}
~DeprecatedCSSOMValue() = default;
private:
WEBCORE_EXPORT void destroy();
protected:
unsigned m_valueListSeparator : CSSValue::ValueListSeparatorBits;
unsigned m_classType : ClassTypeBits;
Ref<CSSStyleDeclaration> m_owner;
};
class DeprecatedCSSOMComplexValue : public DeprecatedCSSOMValue {
public:
static Ref<DeprecatedCSSOMComplexValue> create(const CSSValue& value, CSSStyleDeclaration& owner)
{
return adoptRef(*new DeprecatedCSSOMComplexValue(value, owner));
}
String cssText() const { return m_value->cssText(); }
unsigned cssValueType() const { return m_value->cssValueType(); }
protected:
DeprecatedCSSOMComplexValue(const CSSValue& value, CSSStyleDeclaration& owner)
: DeprecatedCSSOMValue(DeprecatedComplexValueClass, owner)
, m_value(const_cast<CSSValue&>(value))
{
}
private:
Ref<CSSValue> m_value;
};
}
#define SPECIALIZE_TYPE_TRAITS_CSSOM_VALUE(ToValueTypeName, predicate) \
SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToValueTypeName) \
static bool isType(const WebCore::DeprecatedCSSOMValue& value) { return value.predicate; } \
SPECIALIZE_TYPE_TRAITS_END()
SPECIALIZE_TYPE_TRAITS_CSSOM_VALUE(DeprecatedCSSOMComplexValue, isComplexValue())