diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /layout/style/nsCSSPseudoClasses.h | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'layout/style/nsCSSPseudoClasses.h')
-rw-r--r-- | layout/style/nsCSSPseudoClasses.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/layout/style/nsCSSPseudoClasses.h b/layout/style/nsCSSPseudoClasses.h new file mode 100644 index 000000000..ca1cb2f39 --- /dev/null +++ b/layout/style/nsCSSPseudoClasses.h @@ -0,0 +1,90 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* atom list for CSS pseudo-classes */ + +#ifndef nsCSSPseudoClasses_h___ +#define nsCSSPseudoClasses_h___ + +#include "nsStringFwd.h" + +// The following two flags along with the pref defines where this pseudo +// class can be used: +// * If none of the two flags is presented, the pref completely controls +// the availability of this pseudo class. And in that case, if it has +// no pref, this property is usable everywhere. +// * If any of the flags is set, this pseudo class is always enabled in +// the specific contexts regardless of the value of the pref. If there +// is no pref for this pseudo class at all in this case, it is an +// internal-only pseudo class, which cannot be used anywhere else. +#define CSS_PSEUDO_CLASS_ENABLED_MASK (3<<0) +#define CSS_PSEUDO_CLASS_ENABLED_IN_UA_SHEETS (1<<0) +#define CSS_PSEUDO_CLASS_ENABLED_IN_CHROME (1<<1) +#define CSS_PSEUDO_CLASS_ENABLED_IN_UA_SHEETS_AND_CHROME \ + (CSS_PSEUDO_CLASS_ENABLED_IN_UA_SHEETS | CSS_PSEUDO_CLASS_ENABLED_IN_CHROME) + +class nsIAtom; + +namespace mozilla { + +// The total count of CSSPseudoClassType is less than 256, +// so use uint8_t as its underlying type. +typedef uint8_t CSSPseudoClassTypeBase; +enum class CSSPseudoClassType : CSSPseudoClassTypeBase +{ +#define CSS_PSEUDO_CLASS(_name, _value, _flags, _pref) \ + _name, +#include "nsCSSPseudoClassList.h" +#undef CSS_PSEUDO_CLASS + Count, + NotPseudo, // This value MUST be second last! SelectorMatches depends on it. + MAX +}; + +} // namespace mozilla + +class nsCSSPseudoClasses +{ + typedef mozilla::CSSPseudoClassType Type; + typedef mozilla::CSSEnabledState EnabledState; + +public: + static void AddRefAtoms(); + + static Type GetPseudoType(nsIAtom* aAtom, EnabledState aEnabledState); + static bool HasStringArg(Type aType); + static bool HasNthPairArg(Type aType); + static bool HasSelectorListArg(Type aType) { + return aType == Type::any; + } + static bool IsUserActionPseudoClass(Type aType); + + // Should only be used on types other than Count and NotPseudoClass + static void PseudoTypeToString(Type aType, nsAString& aString); + + static bool IsEnabled(Type aType, EnabledState aEnabledState) + { + auto index = static_cast<size_t>(aType); + MOZ_ASSERT(index < static_cast<size_t>(Type::Count)); + if (sPseudoClassEnabled[index] || + aEnabledState == EnabledState::eIgnoreEnabledState) { + return true; + } + auto flags = kPseudoClassFlags[index]; + if (((aEnabledState & EnabledState::eInChrome) && + (flags & CSS_PSEUDO_CLASS_ENABLED_IN_CHROME)) || + ((aEnabledState & EnabledState::eInUASheets) && + (flags & CSS_PSEUDO_CLASS_ENABLED_IN_UA_SHEETS))) { + return true; + } + return false; + } + +private: + static const uint32_t kPseudoClassFlags[size_t(Type::Count)]; + static bool sPseudoClassEnabled[size_t(Type::Count)]; +}; + +#endif /* nsCSSPseudoClasses_h___ */ |