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

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : // vim:cindent:ts=2:et:sw=2:
       3             : /* This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       5             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : /* rules in a CSS stylesheet other than style rules (e.g., @import rules) */
       8             : 
       9             : #ifndef nsCSSRules_h_
      10             : #define nsCSSRules_h_
      11             : 
      12             : #include "Declaration.h"
      13             : #include "StyleRule.h"
      14             : #include "gfxFontFeatures.h"
      15             : #include "mozilla/Attributes.h"
      16             : #include "mozilla/MemoryReporting.h"
      17             : #include "mozilla/Move.h"
      18             : #include "mozilla/SheetType.h"
      19             : #include "mozilla/css/GroupRule.h"
      20             : #include "mozilla/css/URLMatchingFunction.h"
      21             : #include "mozilla/dom/CSSKeyframeRule.h"
      22             : #include "mozilla/dom/CSSKeyframesRule.h"
      23             : #include "mozilla/dom/CSSMediaRule.h"
      24             : #include "mozilla/dom/CSSPageRule.h"
      25             : #include "mozilla/dom/CSSSupportsRule.h"
      26             : #include "mozilla/dom/CSSMozDocumentRule.h"
      27             : #include "nsAutoPtr.h"
      28             : #include "nsCSSPropertyID.h"
      29             : #include "nsCSSValue.h"
      30             : #include "nsDOMCSSDeclaration.h"
      31             : #include "nsIDOMCSSConditionRule.h"
      32             : #include "nsIDOMCSSFontFeatureValuesRule.h"
      33             : #include "nsIDOMCSSGroupingRule.h"
      34             : #include "nsIDOMCSSMozDocumentRule.h"
      35             : #include "nsIDOMCSSSupportsRule.h"
      36             : #include "nsTArray.h"
      37             : 
      38             : class nsMediaList;
      39             : 
      40             : namespace mozilla {
      41             : 
      42             : class ErrorResult;
      43             : 
      44             : namespace dom {
      45             : class MediaList;
      46             : }
      47             : 
      48             : namespace css {
      49             : 
      50             : class MediaRule final : public dom::CSSMediaRule
      51             : {
      52             : public:
      53             :   MediaRule(uint32_t aLineNumber, uint32_t aColumnNumber);
      54             : private:
      55             :   MediaRule(const MediaRule& aCopy);
      56             :   ~MediaRule();
      57             : public:
      58             :   NS_DECL_ISUPPORTS_INHERITED
      59          48 :   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaRule, dom::CSSMediaRule)
      60             : 
      61             :   // Rule methods
      62             : #ifdef DEBUG
      63             :   virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override;
      64             : #endif
      65             :   virtual void SetStyleSheet(mozilla::StyleSheet* aSheet) override; //override GroupRule
      66          48 :   mozilla::CSSStyleSheet* GetStyleSheet() const
      67             :   {
      68          48 :     mozilla::StyleSheet* sheet = GroupRule::GetStyleSheet();
      69          48 :     return sheet ? sheet->AsGecko() : nullptr;
      70             :   }
      71             :   virtual already_AddRefed<Rule> Clone() const override;
      72             : 
      73             :   // nsIDOMCSSConditionRule interface
      74             :   NS_DECL_NSIDOMCSSCONDITIONRULE
      75             : 
      76             :   // rest of GroupRule
      77             :   virtual bool UseForPresentation(nsPresContext* aPresContext,
      78             :                                     nsMediaQueryResultCacheKey& aKey) override;
      79             : 
      80             :   // @media rule methods
      81             :   nsresult SetMedia(nsMediaList* aMedia);
      82             : 
      83             :   // WebIDL interface
      84             :   void GetCssTextImpl(nsAString& aCssText) const override;
      85             :   using CSSMediaRule::SetConditionText;
      86             :   dom::MediaList* Media() override;
      87             : 
      88             :   virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf)
      89             :     const override MOZ_MUST_OVERRIDE;
      90             : 
      91             : protected:
      92             :   void AppendConditionText(nsAString& aOutput) const;
      93             : 
      94             :   RefPtr<nsMediaList> mMedia;
      95             : };
      96             : 
      97             : class DocumentRule final : public dom::CSSMozDocumentRule
      98             : {
      99             : public:
     100             :   DocumentRule(uint32_t aLineNumber, uint32_t aColumnNumber);
     101             : private:
     102             :   DocumentRule(const DocumentRule& aCopy);
     103             :   ~DocumentRule();
     104             : public:
     105             : 
     106             :   NS_DECL_ISUPPORTS_INHERITED
     107             : 
     108             :   // Rule methods
     109             : #ifdef DEBUG
     110             :   virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override;
     111             : #endif
     112             :   virtual already_AddRefed<Rule> Clone() const override;
     113             : 
     114             :   // nsIDOMCSSConditionRule interface
     115             :   NS_DECL_NSIDOMCSSCONDITIONRULE
     116             : 
     117             :   // rest of GroupRule
     118             :   virtual bool UseForPresentation(nsPresContext* aPresContext,
     119             :                                   nsMediaQueryResultCacheKey& aKey) override;
     120             : 
     121             :   bool UseForPresentation(nsPresContext* aPresContext);
     122             : 
     123             :   static bool UseForPresentation(nsIDocument* aDoc,
     124             :                                  nsIURI* aDocURI,
     125             :                                  const nsACString& aDocURISpec,
     126             :                                  const nsACString& aPattern,
     127             :                                  URLMatchingFunction aUrlMatchingFunction);
     128             : 
     129             :   struct URL {
     130             :     URLMatchingFunction func;
     131             :     nsCString url;
     132             :     URL *next;
     133             : 
     134           2 :     URL() : next(nullptr) {}
     135           0 :     URL(const URL& aOther)
     136           0 :       : func(aOther.func)
     137             :       , url(aOther.url)
     138           0 :       , next(aOther.next ? new URL(*aOther.next) : nullptr)
     139             :     {
     140           0 :     }
     141             :     ~URL();
     142             :   };
     143             : 
     144           2 :   void SetURLs(URL *aURLs) { mURLs = aURLs; }
     145             : 
     146             :   // WebIDL interface
     147             :   void GetCssTextImpl(nsAString& aCssText) const override;
     148             :   using dom::CSSMozDocumentRule::SetConditionText;
     149             : 
     150             :   virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf)
     151             :     const override MOZ_MUST_OVERRIDE;
     152             : 
     153             : protected:
     154             :   void AppendConditionText(nsAString& aOutput) const;
     155             : 
     156             :   nsAutoPtr<URL> mURLs; // linked list of |struct URL| above.
     157             : };
     158             : 
     159             : } // namespace css
     160             : 
     161             : } // namespace mozilla
     162             : 
     163             : class nsCSSFontFeatureValuesRule final : public mozilla::css::Rule,
     164             :                                          public nsIDOMCSSFontFeatureValuesRule
     165             : {
     166             : public:
     167           0 :   nsCSSFontFeatureValuesRule(uint32_t aLineNumber, uint32_t aColumnNumber)
     168           0 :     : mozilla::css::Rule(aLineNumber, aColumnNumber)
     169             :   {
     170           0 :   }
     171             : 
     172           0 :   nsCSSFontFeatureValuesRule(const nsCSSFontFeatureValuesRule& aCopy)
     173             :     // copy everything except our reference count
     174           0 :     : mozilla::css::Rule(aCopy),
     175             :       mFamilyList(aCopy.mFamilyList),
     176           0 :       mFeatureValues(aCopy.mFeatureValues)
     177             :   {
     178           0 :   }
     179             : 
     180             :   NS_DECL_ISUPPORTS_INHERITED
     181             :   virtual bool IsCCLeaf() const override;
     182             : 
     183             : #ifdef DEBUG
     184             :   virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override;
     185             : #endif
     186             :   virtual int32_t GetType() const override;
     187             :   using Rule::GetType;
     188             :   virtual already_AddRefed<mozilla::css::Rule> Clone() const override;
     189             : 
     190             :   // nsIDOMCSSFontFaceRule interface
     191             :   NS_DECL_NSIDOMCSSFONTFEATUREVALUESRULE
     192             : 
     193             :   // WebIDL interface
     194             :   uint16_t Type() const override;
     195             :   void GetCssTextImpl(nsAString& aCssText) const override;
     196             :   // The XPCOM GetFontFamily is fine
     197             :   void SetFontFamily(const nsAString& aFamily, mozilla::ErrorResult& aRv);
     198             :   // The XPCOM GetValueText is fine
     199             :   void SetValueText(const nsAString& aFamily, mozilla::ErrorResult& aRv);
     200             : 
     201           0 :   const mozilla::FontFamilyList& GetFamilyList() { return mFamilyList; }
     202             :   void SetFamilyList(const mozilla::FontFamilyList& aFamilyList);
     203             : 
     204             :   void AddValueList(int32_t aVariantAlternate,
     205             :                     nsTArray<gfxFontFeatureValueSet::ValueList>& aValueList);
     206             : 
     207           0 :   const nsTArray<gfxFontFeatureValueSet::FeatureValues>& GetFeatureValues()
     208             :   {
     209           0 :     return mFeatureValues;
     210             :   }
     211             : 
     212             :   virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
     213             : 
     214             :   virtual JSObject* WrapObject(JSContext* aCx,
     215             :                                JS::Handle<JSObject*> aGivenProto) override;
     216             : 
     217             : protected:
     218           0 :   ~nsCSSFontFeatureValuesRule() {}
     219             : 
     220             :   mozilla::FontFamilyList mFamilyList;
     221             :   nsTArray<gfxFontFeatureValueSet::FeatureValues> mFeatureValues;
     222             : };
     223             : 
     224             : class nsCSSKeyframeRule;
     225             : 
     226             : class nsCSSKeyframeStyleDeclaration final : public nsDOMCSSDeclaration
     227             : {
     228             : public:
     229             :   explicit nsCSSKeyframeStyleDeclaration(nsCSSKeyframeRule *aRule);
     230             : 
     231             :   NS_IMETHOD GetParentRule(nsIDOMCSSRule **aParent) override;
     232           0 :   void DropReference() { mRule = nullptr; }
     233             :   virtual mozilla::DeclarationBlock* GetCSSDeclaration(Operation aOperation) override;
     234             :   virtual nsresult SetCSSDeclaration(mozilla::DeclarationBlock* aDecl) override;
     235             :   virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) override;
     236             :   nsDOMCSSDeclaration::ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const final;
     237             :   virtual nsIDocument* DocToUpdate() override;
     238             : 
     239             :   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     240           0 :   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsCSSKeyframeStyleDeclaration,
     241             :                                                          nsICSSDeclaration)
     242             : 
     243             :   virtual nsINode* GetParentObject() override;
     244             : 
     245             : protected:
     246             :   virtual ~nsCSSKeyframeStyleDeclaration();
     247             : 
     248             :   // This reference is not reference-counted. The rule object tells us
     249             :   // when it's about to go away.
     250             :   nsCSSKeyframeRule* MOZ_NON_OWNING_REF mRule;
     251             : };
     252             : 
     253             : class nsCSSKeyframeRule final : public mozilla::dom::CSSKeyframeRule
     254             : {
     255             : public:
     256             :   // Steals the contents of aKeys, and takes the reference in Declaration
     257          78 :   nsCSSKeyframeRule(InfallibleTArray<float>&& aKeys,
     258             :                     already_AddRefed<mozilla::css::Declaration>&& aDeclaration,
     259             :                     uint32_t aLineNumber, uint32_t aColumnNumber)
     260          78 :     : mozilla::dom::CSSKeyframeRule(aLineNumber, aColumnNumber)
     261          78 :     , mKeys(mozilla::Move(aKeys))
     262         156 :     , mDeclaration(mozilla::Move(aDeclaration))
     263             :   {
     264          78 :     mDeclaration->SetOwningRule(this);
     265          78 :   }
     266             : private:
     267             :   nsCSSKeyframeRule(const nsCSSKeyframeRule& aCopy);
     268             :   ~nsCSSKeyframeRule();
     269             : public:
     270             :   NS_DECL_ISUPPORTS_INHERITED
     271          78 :   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsCSSKeyframeRule,
     272             :                                            mozilla::dom::CSSKeyframeRule)
     273             :   virtual bool IsCCLeaf() const override;
     274             : 
     275             : #ifdef DEBUG
     276             :   virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override;
     277             : #endif
     278             :   virtual already_AddRefed<mozilla::css::Rule> Clone() const override;
     279             : 
     280             :   // nsIDOMCSSKeyframeRule interface
     281             :   NS_IMETHOD GetKeyText(nsAString& aKeyText) final;
     282             :   NS_IMETHOD SetKeyText(const nsAString& aKeyText) final;
     283             : 
     284             :   // WebIDL interface
     285             :   void GetCssTextImpl(nsAString& aCssText) const final;
     286             :   nsICSSDeclaration* Style() final;
     287             : 
     288           0 :   const nsTArray<float>& GetKeys() const     { return mKeys; }
     289           0 :   mozilla::css::Declaration* Declaration()   { return mDeclaration; }
     290             : 
     291             :   void ChangeDeclaration(mozilla::css::Declaration* aDeclaration);
     292             : 
     293             :   virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
     294             : 
     295             :   void DoGetKeyText(nsAString &aKeyText) const;
     296             : 
     297             : private:
     298             :   nsTArray<float>                            mKeys;
     299             :   RefPtr<mozilla::css::Declaration>          mDeclaration;
     300             :   // lazily created when needed:
     301             :   RefPtr<nsCSSKeyframeStyleDeclaration>    mDOMDeclaration;
     302             : };
     303             : 
     304             : class nsCSSKeyframesRule final : public mozilla::dom::CSSKeyframesRule
     305             : {
     306             : public:
     307          31 :   nsCSSKeyframesRule(const nsAString& aName,
     308             :                      uint32_t aLineNumber, uint32_t aColumnNumber)
     309          31 :     : mozilla::dom::CSSKeyframesRule(aLineNumber, aColumnNumber)
     310          31 :     , mName(aName)
     311             :   {
     312          31 :   }
     313             : private:
     314             :   nsCSSKeyframesRule(const nsCSSKeyframesRule& aCopy);
     315             :   ~nsCSSKeyframesRule();
     316             : public:
     317             :   NS_DECL_ISUPPORTS_INHERITED
     318             : 
     319             :   // Rule methods
     320             : #ifdef DEBUG
     321             :   virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override;
     322             : #endif
     323             :   virtual already_AddRefed<mozilla::css::Rule> Clone() const override;
     324             : 
     325             :   // nsIDOMCSSKeyframesRule interface
     326             :   NS_IMETHOD GetName(nsAString& aName) final;
     327             :   NS_IMETHOD SetName(const nsAString& aName) final;
     328             :   NS_IMETHOD AppendRule(const nsAString& aRule) final;
     329             :   NS_IMETHOD DeleteRule(const nsAString& aKey) final;
     330             :   using nsIDOMCSSKeyframesRule::FindRule;
     331             : 
     332             :   // WebIDL interface
     333             :   void GetCssTextImpl(nsAString& aCssText) const final;
     334           0 :   mozilla::dom::CSSRuleList* CssRules() final { return GroupRule::CssRules(); }
     335             :   nsCSSKeyframeRule* FindRule(const nsAString& aKey) final;
     336             : 
     337          93 :   const nsString& GetName() { return mName; }
     338             : 
     339             :   virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
     340             : 
     341             : private:
     342             :   uint32_t FindRuleIndexForKey(const nsAString& aKey);
     343             : 
     344             :   nsString                                   mName;
     345             : };
     346             : 
     347             : class nsCSSPageRule;
     348             : 
     349             : class nsCSSPageStyleDeclaration final : public nsDOMCSSDeclaration
     350             : {
     351             : public:
     352             :   explicit nsCSSPageStyleDeclaration(nsCSSPageRule *aRule);
     353             : 
     354             :   NS_IMETHOD GetParentRule(nsIDOMCSSRule **aParent) override;
     355           0 :   void DropReference() { mRule = nullptr; }
     356             :   virtual mozilla::DeclarationBlock* GetCSSDeclaration(Operation aOperation) override;
     357             :   virtual nsresult SetCSSDeclaration(mozilla::DeclarationBlock* aDecl) override;
     358             :   virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) override;
     359             :   nsDOMCSSDeclaration::ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const final;
     360             :   virtual nsIDocument* DocToUpdate() override;
     361             : 
     362             :   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     363           0 :   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsCSSPageStyleDeclaration,
     364             :                                                          nsICSSDeclaration)
     365             : 
     366             :   virtual nsINode *GetParentObject() override;
     367             : 
     368             : protected:
     369             :   virtual ~nsCSSPageStyleDeclaration();
     370             : 
     371             :   // This reference is not reference-counted. The rule object tells us
     372             :   // when it's about to go away.
     373             :   nsCSSPageRule* MOZ_NON_OWNING_REF mRule;
     374             : };
     375             : 
     376             : class nsCSSPageRule final : public mozilla::dom::CSSPageRule
     377             : {
     378             : public:
     379           0 :   nsCSSPageRule(mozilla::css::Declaration* aDeclaration,
     380             :                 uint32_t aLineNumber, uint32_t aColumnNumber)
     381           0 :     : mozilla::dom::CSSPageRule(aLineNumber, aColumnNumber)
     382           0 :     , mDeclaration(aDeclaration)
     383             :   {
     384           0 :     mDeclaration->SetOwningRule(this);
     385           0 :   }
     386             : private:
     387             :   nsCSSPageRule(const nsCSSPageRule& aCopy);
     388             :   ~nsCSSPageRule();
     389             : public:
     390             :   NS_DECL_ISUPPORTS_INHERITED
     391           0 :   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsCSSPageRule, mozilla::dom::CSSPageRule)
     392             :   virtual bool IsCCLeaf() const override;
     393             : 
     394             : #ifdef DEBUG
     395             :   virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override;
     396             : #endif
     397             :   virtual already_AddRefed<mozilla::css::Rule> Clone() const override;
     398             : 
     399             :   // WebIDL interfaces
     400             :   virtual void GetCssTextImpl(nsAString& aCssText) const override;
     401             :   virtual nsICSSDeclaration* Style() override;
     402             : 
     403           0 :   mozilla::css::Declaration* Declaration()   { return mDeclaration; }
     404             : 
     405             :   void ChangeDeclaration(mozilla::css::Declaration* aDeclaration);
     406             : 
     407             :   virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
     408             : 
     409             : private:
     410             :   RefPtr<mozilla::css::Declaration>     mDeclaration;
     411             :   // lazily created when needed:
     412             :   RefPtr<nsCSSPageStyleDeclaration>     mDOMDeclaration;
     413             : };
     414             : 
     415             : namespace mozilla {
     416             : 
     417             : class CSSSupportsRule final : public dom::CSSSupportsRule
     418             : {
     419             : public:
     420             :   CSSSupportsRule(bool aConditionMet, const nsString& aCondition,
     421             :                   uint32_t aLineNumber, uint32_t aColumnNumber);
     422             :   CSSSupportsRule(const CSSSupportsRule& aCopy);
     423             : 
     424             :   // Rule methods
     425             : #ifdef DEBUG
     426             :   virtual void List(FILE* out = stdout, int32_t aIndent = 0) const override;
     427             : #endif
     428             :   virtual already_AddRefed<mozilla::css::Rule> Clone() const override;
     429             :   virtual bool UseForPresentation(nsPresContext* aPresContext,
     430             :                                   nsMediaQueryResultCacheKey& aKey) override;
     431             : 
     432             :   NS_DECL_ISUPPORTS_INHERITED
     433             : 
     434             :   // nsIDOMCSSConditionRule interface
     435             :   NS_DECL_NSIDOMCSSCONDITIONRULE
     436             : 
     437             :   // WebIDL interface
     438             :   void GetCssTextImpl(nsAString& aCssText) const override;
     439             :   using dom::CSSSupportsRule::SetConditionText;
     440             : 
     441             :   virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
     442             : 
     443             : protected:
     444             :   virtual ~CSSSupportsRule();
     445             : 
     446             :   bool mUseGroup;
     447             :   nsString mCondition;
     448             : };
     449             : 
     450             : } // namespace mozilla
     451             : 
     452             : #endif /* !defined(nsCSSRules_h_) */

Generated by: LCOV version 1.13