gecko/dom/svg/SVGTests.h
Nathan Froyd 9a0a9b3c35 Bug 1247401 - remove nsISupports implementation from SVGTests; r=dholbert
SVGTests is purely a mixin class for classes that get their nsISupports
bits from someplace else.  Having it implement nsISupports means that
the classes which inherit from it wind up with multiple refcount
members, which is a waste of space.  By removing nsISupports
implementation from SVGTests, we save a bit of space and potential
confusion along the way.
2016-02-01 14:47:23 -05:00

113 lines
3.5 KiB
C++

/* -*- 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);
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