LCOV - code coverage report
Current view: top level - layout/style - nsIStyleRuleProcessor.h (source / functions) Hit Total Coverage
Test: output.info Lines: 1 1 100.0 %
Date: 2017-07-14 16:53:18 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       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             : /*
       7             :  * internal abstract interface for containers (roughly origins within
       8             :  * the CSS cascade) that provide style rules matching an element or
       9             :  * pseudo-element
      10             :  */
      11             : 
      12             : #ifndef nsIStyleRuleProcessor_h___
      13             : #define nsIStyleRuleProcessor_h___
      14             : 
      15             : #include "mozilla/MemoryReporting.h"
      16             : #include "nsISupports.h"
      17             : #include "nsChangeHint.h"
      18             : 
      19             : struct RuleProcessorData;
      20             : struct ElementRuleProcessorData;
      21             : struct PseudoElementRuleProcessorData;
      22             : struct AnonBoxRuleProcessorData;
      23             : #ifdef MOZ_XUL
      24             : struct XULTreeRuleProcessorData;
      25             : #endif
      26             : struct StateRuleProcessorData;
      27             : struct PseudoElementStateRuleProcessorData;
      28             : struct AttributeRuleProcessorData;
      29             : class nsPresContext;
      30             : 
      31             : // IID for the nsIStyleRuleProcessor interface
      32             : // {c1d6001e-4fcb-4c40-bce1-5eba80bfd8f3}
      33             : #define NS_ISTYLE_RULE_PROCESSOR_IID     \
      34             : { 0xc1d6001e, 0x4fcb, 0x4c40, \
      35             :   {0xbc, 0xe1, 0x5e, 0xba, 0x80, 0xbf, 0xd8, 0xf3} }
      36             : 
      37             : 
      38             : /* The style rule processor interface is a mechanism to separate the matching
      39             :  * of style rules from style sheet instances.
      40             :  * Simple style sheets can and will act as their own processor.
      41             :  * Sheets where rule ordering interlaces between multiple sheets, will need to
      42             :  * share a single rule processor between them (CSS sheets do this for cascading order)
      43             :  *
      44             :  * @see nsIStyleRule (for significantly more detailed comments)
      45             :  */
      46         170 : class nsIStyleRuleProcessor : public nsISupports {
      47             : public:
      48             :   NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISTYLE_RULE_PROCESSOR_IID)
      49             : 
      50             :   // Shorthand for:
      51             :   //  nsCOMArray<nsIStyleRuleProcessor>::nsCOMArrayEnumFunc
      52             :   typedef bool (* EnumFunc)(nsIStyleRuleProcessor*, void*);
      53             : 
      54             :   /**
      55             :    * Find the |nsIStyleRule|s matching the given content node and
      56             :    * position the given |nsRuleWalker| at the |nsRuleNode| in the rule
      57             :    * tree representing that ordered list of rules (with higher
      58             :    * precedence being farther from the root of the lexicographic tree).
      59             :    */
      60             :   virtual void RulesMatching(ElementRuleProcessorData* aData) = 0;
      61             : 
      62             :   /**
      63             :    * Just like the previous |RulesMatching|, except for a given content
      64             :    * node <em>and pseudo-element</em>.
      65             :    */
      66             :   virtual void RulesMatching(PseudoElementRuleProcessorData* aData) = 0;
      67             : 
      68             :   /**
      69             :    * Just like the previous |RulesMatching|, except for a given anonymous box.
      70             :    */
      71             :   virtual void RulesMatching(AnonBoxRuleProcessorData* aData) = 0;
      72             : 
      73             : #ifdef MOZ_XUL
      74             :   /**
      75             :    * Just like the previous |RulesMatching|, except for a given content
      76             :    * node <em>and tree pseudo</em>.
      77             :    */
      78             :   virtual void RulesMatching(XULTreeRuleProcessorData* aData) = 0;
      79             : #endif
      80             : 
      81             :   /**
      82             :    * Return whether style can depend on a change of the given document state.
      83             :    *
      84             :    * Document states are defined in nsIDocument.h.
      85             :    */
      86             :   virtual bool
      87             :     HasDocumentStateDependentStyle(StateRuleProcessorData* aData) = 0;
      88             : 
      89             :   /**
      90             :    * Return how (as described by nsRestyleHint) style can depend on a
      91             :    * change of the given content state on the given content node.  This
      92             :    * test is used for optimization only, and may err on the side of
      93             :    * reporting more dependencies than really exist.
      94             :    *
      95             :    * Event states are defined in mozilla/EventStates.h.
      96             :    */
      97             :   virtual nsRestyleHint
      98             :     HasStateDependentStyle(StateRuleProcessorData* aData) = 0;
      99             :   virtual nsRestyleHint
     100             :     HasStateDependentStyle(PseudoElementStateRuleProcessorData* aData) = 0;
     101             : 
     102             :   /**
     103             :    * This method will be called twice for every attribute change.
     104             :    * During the first call, aData->mAttrHasChanged will be false and
     105             :    * the attribute change will not have happened yet.  During the
     106             :    * second call, aData->mAttrHasChanged will be true and the
     107             :    * change will have already happened.  The bitwise OR of the two
     108             :    * return values must describe the style changes that are needed due
     109             :    * to the attribute change.  It's up to the rule processor
     110             :    * implementation to decide how to split the bits up amongst the two
     111             :    * return values.  For example, it could return the bits needed by
     112             :    * rules that might stop matching the node from the first call and
     113             :    * the bits needed by rules that might have started matching the
     114             :    * node from the second call.  This test is used for optimization
     115             :    * only, and may err on the side of reporting more dependencies than
     116             :    * really exist.
     117             :    */
     118             :   virtual nsRestyleHint HasAttributeDependentStyle(
     119             :       AttributeRuleProcessorData* aData,
     120             :       mozilla::RestyleHintData& aRestyleHintDataResult) = 0;
     121             : 
     122             :   /**
     123             :    * Do any processing that needs to happen as a result of a change in
     124             :    * the characteristics of the medium, and return whether this rule
     125             :    * processor's rules have changed (e.g., because of media queries).
     126             :    */
     127             :   virtual bool MediumFeaturesChanged(nsPresContext* aPresContext) = 0;
     128             : 
     129             :   /**
     130             :    * Report the size of this style rule processor to about:memory.  A
     131             :    * processor may return 0.
     132             :    */
     133             :   virtual size_t SizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const = 0;
     134             :   virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const = 0;
     135             : };
     136             : 
     137             : NS_DEFINE_STATIC_IID_ACCESSOR(nsIStyleRuleProcessor,
     138             :                               NS_ISTYLE_RULE_PROCESSOR_IID)
     139             : 
     140             : #endif /* nsIStyleRuleProcessor_h___ */

Generated by: LCOV version 1.13