diff options
Diffstat (limited to 'dom/svg/SVGTests.h')
-rw-r--r-- | dom/svg/SVGTests.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/dom/svg/SVGTests.h b/dom/svg/SVGTests.h new file mode 100644 index 000000000..1e0de76e3 --- /dev/null +++ b/dom/svg/SVGTests.h @@ -0,0 +1,114 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef mozilla_dom_SVGTests_h +#define mozilla_dom_SVGTests_h + +#include "nsStringFwd.h" +#include "SVGStringList.h" +#include "nsCOMPtr.h" + +class nsAttrValue; +class nsIAtom; +class nsString; + +namespace mozilla { +class DOMSVGStringList; + +#define MOZILLA_DOMSVGTESTS_IID \ + { 0x92370da8, 0xda28, 0x4895, \ + {0x9b, 0x1b, 0xe0, 0x06, 0x0d, 0xb7, 0x3f, 0xc3 } } + +namespace dom { + +class SVGTests : public nsISupports +{ +public: + NS_DECLARE_STATIC_IID_ACCESSOR(MOZILLA_DOMSVGTESTS_IID) + + SVGTests(); + + friend class mozilla::DOMSVGStringList; + typedef mozilla::SVGStringList SVGStringList; + + /** + * Compare the language name(s) in a systemLanguage attribute to the + * user's language preferences, as defined in + * http://www.w3.org/TR/SVG11/struct.html#SystemLanguageAttribute + * We have a match if a language name in the users language preferences + * exactly equals one of the language names or exactly equals a prefix of + * one of the language names in the systemLanguage attribute. + * @returns 2 * the lowest index in the aAcceptLangs that matches + 1 + * if only the prefix matches, -2 if there's no systemLanguage attribute, + * or -1 if no indices match. + * XXX This algorithm is O(M*N). + */ + int32_t GetBestLanguagePreferenceRank(const nsSubstring& aAcceptLangs) const; + + /** + * Special value to pass to PassesConditionalProcessingTests to ignore systemLanguage + * attributes + */ + static const nsString * const kIgnoreSystemLanguage; + + /** + * Check whether the conditional processing attributes requiredFeatures, + * requiredExtensions and systemLanguage all "return true" if they apply to + * and are specified on the given element. Returns true if this element + * should be rendered, false if it should not. + * + * @param aAcceptLangs Optional parameter to pass in the value of the + * intl.accept_languages preference if the caller has it cached. + * Alternatively, pass in kIgnoreSystemLanguage to skip the systemLanguage + * check if the caller is giving that special treatment. + */ + bool PassesConditionalProcessingTests( + const nsString *aAcceptLangs = nullptr) const; + + /** + * Returns true if the attribute is one of the conditional processing + * attributes. + */ + bool IsConditionalProcessingAttribute(const nsIAtom* aAttribute) const; + + bool ParseConditionalProcessingAttribute( + nsIAtom* aAttribute, + const nsAString& aValue, + nsAttrValue& aResult); + + /** + * Unsets a conditional processing attribute. + */ + void UnsetAttr(const nsIAtom* aAttribute); + + nsIAtom* GetAttrName(uint8_t aAttrEnum) const; + void GetAttrValue(uint8_t aAttrEnum, nsAttrValue &aValue) const; + + void MaybeInvalidate(); + + // WebIDL + already_AddRefed<DOMSVGStringList> RequiredFeatures(); + already_AddRefed<DOMSVGStringList> RequiredExtensions(); + already_AddRefed<DOMSVGStringList> SystemLanguage(); + bool HasExtension(const nsAString& aExtension); + + virtual bool IsInChromeDoc() const = 0; + +protected: + virtual ~SVGTests() {} + +private: + enum { FEATURES, EXTENSIONS, LANGUAGE }; + SVGStringList mStringListAttributes[3]; + static nsIAtom** sStringListNames[3]; +}; + +NS_DEFINE_STATIC_IID_ACCESSOR(SVGTests, MOZILLA_DOMSVGTESTS_IID) + +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_SVGTests_h |