summaryrefslogtreecommitdiffstats
path: root/layout/style/nsROCSSPrimitiveValue.h
diff options
context:
space:
mode:
Diffstat (limited to 'layout/style/nsROCSSPrimitiveValue.h')
-rw-r--r--layout/style/nsROCSSPrimitiveValue.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/layout/style/nsROCSSPrimitiveValue.h b/layout/style/nsROCSSPrimitiveValue.h
new file mode 100644
index 000000000..ae99b8445
--- /dev/null
+++ b/layout/style/nsROCSSPrimitiveValue.h
@@ -0,0 +1,135 @@
+/* -*- 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/. */
+
+/* DOM object representing values in DOM computed style */
+
+#ifndef nsROCSSPrimitiveValue_h___
+#define nsROCSSPrimitiveValue_h___
+
+#include "nsIDOMCSSValue.h"
+#include "nsIDOMCSSPrimitiveValue.h"
+#include "nsCSSKeywords.h"
+#include "CSSValue.h"
+#include "nsCOMPtr.h"
+#include "nsCoord.h"
+
+class nsIURI;
+class nsDOMCSSRect;
+class nsDOMCSSRGBColor;
+
+// There is no CSS_TURN constant on the CSSPrimitiveValue interface,
+// since that unit is newer than DOM Level 2 Style, and CSS OM will
+// probably expose CSS values in some other way in the future. We
+// use this value in mType for "turn"-unit angles, but we define it
+// here to avoid exposing it to content.
+#define CSS_TURN 30U
+// Likewise we have some internal aliases for CSS_NUMBER that we don't
+// want to expose.
+#define CSS_NUMBER_INT32 31U
+#define CSS_NUMBER_UINT32 32U
+
+/**
+ * Read-only CSS primitive value - a DOM object representing values in DOM
+ * computed style.
+ */
+class nsROCSSPrimitiveValue final : public mozilla::dom::CSSValue,
+ public nsIDOMCSSPrimitiveValue
+{
+public:
+ NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+ NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsROCSSPrimitiveValue, mozilla::dom::CSSValue)
+
+ // nsIDOMCSSPrimitiveValue
+ NS_DECL_NSIDOMCSSPRIMITIVEVALUE
+
+ // nsIDOMCSSValue
+ NS_DECL_NSIDOMCSSVALUE
+
+ // CSSValue
+ virtual void GetCssText(nsString& aText, mozilla::ErrorResult& aRv) override final;
+ virtual void SetCssText(const nsAString& aText, mozilla::ErrorResult& aRv) override final;
+ virtual uint16_t CssValueType() const override final;
+
+ // CSSPrimitiveValue
+ uint16_t PrimitiveType()
+ {
+ // New value types were introduced but not added to CSS OM.
+ // Return CSS_UNKNOWN to avoid exposing CSS_TURN to content.
+ if (mType > CSS_RGBCOLOR) {
+ if (mType == CSS_NUMBER_INT32 || mType == CSS_NUMBER_UINT32) {
+ return CSS_NUMBER;
+ }
+ return CSS_UNKNOWN;
+ }
+ return mType;
+ }
+ void SetFloatValue(uint16_t aUnitType, float aValue,
+ mozilla::ErrorResult& aRv);
+ float GetFloatValue(uint16_t aUnitType, mozilla::ErrorResult& aRv);
+ void GetStringValue(nsString& aString, mozilla::ErrorResult& aRv);
+ void SetStringValue(uint16_t aUnitType, const nsAString& aString,
+ mozilla::ErrorResult& aRv);
+ already_AddRefed<nsIDOMCounter> GetCounterValue(mozilla::ErrorResult& aRv);
+ nsDOMCSSRect* GetRectValue(mozilla::ErrorResult& aRv);
+ nsDOMCSSRGBColor *GetRGBColorValue(mozilla::ErrorResult& aRv);
+
+ // nsROCSSPrimitiveValue
+ nsROCSSPrimitiveValue();
+
+ void SetNumber(float aValue);
+ void SetNumber(int32_t aValue);
+ void SetNumber(uint32_t aValue);
+ void SetPercent(float aValue);
+ void SetDegree(float aValue);
+ void SetGrad(float aValue);
+ void SetRadian(float aValue);
+ void SetTurn(float aValue);
+ void SetAppUnits(nscoord aValue);
+ void SetAppUnits(float aValue);
+ void SetIdent(nsCSSKeyword aKeyword);
+ // FIXME: CSS_STRING should imply a string with "" and a need for escaping.
+ void SetString(const nsACString& aString, uint16_t aType = CSS_STRING);
+ // FIXME: CSS_STRING should imply a string with "" and a need for escaping.
+ void SetString(const nsAString& aString, uint16_t aType = CSS_STRING);
+ void SetURI(nsIURI *aURI);
+ void SetColor(nsDOMCSSRGBColor* aColor);
+ void SetRect(nsDOMCSSRect* aRect);
+ void SetTime(float aValue);
+ void Reset();
+
+ nsISupports* GetParentObject() const
+ {
+ return nullptr;
+ }
+
+ virtual JSObject *WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto) override;
+
+private:
+ ~nsROCSSPrimitiveValue();
+
+ uint16_t mType;
+
+ union {
+ nscoord mAppUnits;
+ float mFloat;
+ int32_t mInt32;
+ uint32_t mUint32;
+ // These can't be nsCOMPtr/nsRefPtr's because they are used inside a union.
+ nsDOMCSSRGBColor* MOZ_OWNING_REF mColor;
+ nsDOMCSSRect* MOZ_OWNING_REF mRect;
+ char16_t* mString;
+ nsIURI* MOZ_OWNING_REF mURI;
+ nsCSSKeyword mKeyword;
+ } mValue;
+};
+
+inline nsROCSSPrimitiveValue *mozilla::dom::CSSValue::AsPrimitiveValue()
+{
+ return CssValueType() == nsIDOMCSSValue::CSS_PRIMITIVE_VALUE ?
+ static_cast<nsROCSSPrimitiveValue*>(this) : nullptr;
+}
+
+#endif /* nsROCSSPrimitiveValue_h___ */
+