summaryrefslogtreecommitdiffstats
path: root/dom/svg/SVGTests.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/svg/SVGTests.h')
-rw-r--r--dom/svg/SVGTests.h114
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