1 /* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 /* CSS Custom Property assignments for a Declaration at a given priority */ 7 8 #ifndef mozilla_CSSVariableDeclarations_h 9 #define mozilla_CSSVariableDeclarations_h 10 11 #include "nsDataHashtable.h" 12 13 namespace mozilla { 14 class CSSVariableResolver; 15 } // namespace mozilla 16 struct nsRuleData; 17 18 namespace mozilla { 19 20 class CSSVariableDeclarations 21 { 22 public: 23 CSSVariableDeclarations(); 24 CSSVariableDeclarations(const CSSVariableDeclarations& aOther); 25 #ifdef DEBUG 26 ~CSSVariableDeclarations(); 27 #endif 28 CSSVariableDeclarations& operator=(const CSSVariableDeclarations& aOther); 29 30 /** 31 * Returns whether this set of variable declarations includes a variable 32 * with a given name. 33 * 34 * @param aName The variable name (not including any "--" prefix that would 35 * be part of the custom property name). 36 */ 37 bool Has(const nsAString& aName) const; 38 39 /** 40 * Represents the type of a variable value. 41 */ 42 enum Type { 43 eTokenStream, // a stream of CSS tokens (the usual type for variables) 44 eInitial, // 'initial' 45 eInherit, // 'inherit' 46 eUnset // 'unset' 47 }; 48 49 /** 50 * Gets the value of a variable in this set of variable declarations. 51 * 52 * @param aName The variable name (not including any "--" prefix that would 53 * be part of the custom property name). 54 * @param aType Out parameter into which the type of the variable value will 55 * be stored. 56 * @param aValue Out parameter into which the value of the variable will 57 * be stored. If the variable is 'initial', 'inherit' or 'unset', this will 58 * be the empty string. 59 * @return Whether a variable with the given name was found. When false 60 * is returned, aType and aValue will not be modified. 61 */ 62 bool Get(const nsAString& aName, Type& aType, nsString& aValue) const; 63 64 /** 65 * Adds or modifies an existing entry in this set of variable declarations 66 * to have the value 'initial'. 67 * 68 * @param aName The variable name (not including any "--" prefix that would 69 * be part of the custom property name) whose value is to be set. 70 */ 71 void PutInitial(const nsAString& aName); 72 73 /** 74 * Adds or modifies an existing entry in this set of variable declarations 75 * to have the value 'inherit'. 76 * 77 * @param aName The variable name (not including any "--" prefix that would 78 * be part of the custom property name) whose value is to be set. 79 */ 80 void PutInherit(const nsAString& aName); 81 82 /** 83 * Adds or modifies an existing entry in this set of variable declarations 84 * to have the value 'unset'. 85 * 86 * @param aName The variable name (not including any "--" prefix that would 87 * be part of the custom property name) whose value is to be set. 88 */ 89 void PutUnset(const nsAString& aName); 90 91 /** 92 * Adds or modifies an existing entry in this set of variable declarations 93 * to have a token stream value. 94 * 95 * @param aName The variable name (not including any "--" prefix that would 96 * be part of the custom property name) whose value is to be set. 97 * @param aTokenStream The CSS token stream. 98 */ 99 void PutTokenStream(const nsAString& aName, const nsString& aTokenStream); 100 101 /** 102 * Removes an entry in this set of variable declarations. 103 * 104 * @param aName The variable name (not including any "--" prefix that would 105 * be part of the custom property name) whose entry is to be removed. 106 */ 107 void Remove(const nsAString& aName); 108 109 /** 110 * Returns the number of entries in this set of variable declarations. 111 */ Count()112 uint32_t Count() const { return mVariables.Count(); } 113 114 /** 115 * Copies each variable value from this object into aRuleData, unless that 116 * variable already exists on aRuleData. 117 */ 118 void MapRuleInfoInto(nsRuleData* aRuleData); 119 120 /** 121 * Copies the variables from this object into aResolver, marking them as 122 * specified values. 123 */ 124 void AddVariablesToResolver(CSSVariableResolver* aResolver) const; 125 126 size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; 127 128 private: 129 /** 130 * Adds all the variable declarations from aOther into this object. 131 */ 132 void CopyVariablesFrom(const CSSVariableDeclarations& aOther); 133 134 nsDataHashtable<nsStringHashKey, nsString> mVariables; 135 }; 136 137 } // namespace mozilla 138 139 #endif 140