#pragma once
#include "SelectorFilter.h"
#include "StyleRule.h"
namespace WebCore {
namespace Style {
enum PropertyWhitelistType {
PropertyWhitelistNone = 0,
PropertyWhitelistMarker,
#if ENABLE(VIDEO_TRACK)
PropertyWhitelistCue
#endif
};
enum class MatchBasedOnRuleHash : unsigned {
None,
Universal,
ClassA,
ClassB,
ClassC
};
class RuleData {
public:
static const unsigned maximumSelectorComponentCount = 8192;
RuleData(const StyleRule&, unsigned selectorIndex, unsigned selectorListIndex, unsigned position);
unsigned position() const { return m_position; }
const StyleRule& styleRule() const { return *m_styleRule; }
const CSSSelector* selector() const { return m_styleRule->selectorList().selectorAt(m_selectorIndex); }
#if ENABLE(CSS_SELECTOR_JIT)
CompiledSelector& compiledSelector() const { return m_styleRule->compiledSelectorForListIndex(m_selectorListIndex); }
#endif
unsigned selectorIndex() const { return m_selectorIndex; }
unsigned selectorListIndex() const { return m_selectorListIndex; }
bool canMatchPseudoElement() const { return m_canMatchPseudoElement; }
MatchBasedOnRuleHash matchBasedOnRuleHash() const { return static_cast<MatchBasedOnRuleHash>(m_matchBasedOnRuleHash); }
bool containsUncommonAttributeSelector() const { return m_containsUncommonAttributeSelector; }
unsigned linkMatchType() const { return m_linkMatchType; }
PropertyWhitelistType propertyWhitelistType() const { return static_cast<PropertyWhitelistType>(m_propertyWhitelistType); }
bool isEnabled() const { return m_isEnabled; }
void setEnabled(bool value) { m_isEnabled = value; }
const SelectorFilter::Hashes& descendantSelectorIdentifierHashes() const { return m_descendantSelectorIdentifierHashes; }
void disableSelectorFiltering() { m_descendantSelectorIdentifierHashes[0] = 0; }
private:
RefPtr<const StyleRule> m_styleRule;
unsigned m_selectorIndex : 16;
unsigned m_selectorListIndex : 16;
unsigned m_position : 18;
unsigned m_matchBasedOnRuleHash : 3;
unsigned m_canMatchPseudoElement : 1;
unsigned m_containsUncommonAttributeSelector : 1;
unsigned m_linkMatchType : 2; unsigned m_propertyWhitelistType : 2;
unsigned m_isEnabled : 1;
SelectorFilter::Hashes m_descendantSelectorIdentifierHashes;
};
} }
namespace WTF {
template<> struct VectorTraits<WebCore::Style::RuleData> : SimpleClassVectorTraits { };
}