A rule becomes relevant to the computation of style data when |nsIStyleRuleProcessorRulesMatching| creates a rule node that points to the rule. (A rule node, |nsRuleNode|, is a node in the rule tree, which is a lexicographic tree indexed by rules. The path from the root of the rule tree to the |nsRuleNode| for a given |nsStyleContext| contains exactly the rules that match the element that the style context is for, in priority (weight, origin, specificity) order.)
The computation of style data uses the rule tree, which calls |nsIStyleRuleMapRuleInfoInto| below.
It is worth emphasizing that the data represented by a rule implementation are immutable. When the data need to be changed, a new rule object must be created. Failing to do this will lead to bugs in the handling of dynamic style changes, since the rule tree caches the results of |MapRuleInfoInto|.
|nsIStyleRule| objects are owned by |nsRuleNode| objects (in addition to typically being owned by their sheet), which are in turn garbage collected (with the garbage collection roots being style contexts).
Public Member Functions
|NS_IMETHOD||MapRuleInfoInto (nsRuleData *aRuleData)=0|
|NS_IMETHOD_ (nsrefcnt) Release(void)=0|
|NS_IMETHOD_ (nsrefcnt) AddRef(void)=0|
|NS_IMETHOD||QueryInterface (REFNSIID aIID, void **aInstancePtr)=0|