1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
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 #ifndef mozilla_StyleSheetInlines_h
8 #define mozilla_StyleSheetInlines_h
9 
10 #include "mozilla/StyleSheetInfo.h"
11 #include "mozilla/ServoStyleSheet.h"
12 #include "mozilla/CSSStyleSheet.h"
13 
14 namespace mozilla {
15 
MOZ_DEFINE_STYLO_METHODS(StyleSheet,CSSStyleSheet,ServoStyleSheet)16 MOZ_DEFINE_STYLO_METHODS(StyleSheet, CSSStyleSheet, ServoStyleSheet)
17 
18 StyleSheetInfo&
19 StyleSheet::SheetInfo()
20 {
21   if (IsServo()) {
22     return AsServo()->mSheetInfo;
23   }
24   return *AsGecko()->mInner;
25 }
26 
27 const StyleSheetInfo&
SheetInfo()28 StyleSheet::SheetInfo() const
29 {
30   if (IsServo()) {
31     return AsServo()->mSheetInfo;
32   }
33   return *AsGecko()->mInner;
34 }
35 
36 bool
IsInline()37 StyleSheet::IsInline() const
38 {
39   return !SheetInfo().mOriginalSheetURI;
40 }
41 
42 nsIURI*
GetSheetURI()43 StyleSheet::GetSheetURI() const
44 {
45   return SheetInfo().mSheetURI;
46 }
47 
48 nsIURI*
GetOriginalURI()49 StyleSheet::GetOriginalURI() const
50 {
51   return SheetInfo().mOriginalSheetURI;
52 }
53 
54 nsIURI*
GetBaseURI()55 StyleSheet::GetBaseURI() const
56 {
57   return SheetInfo().mBaseURI;
58 }
59 
60 void
SetURIs(nsIURI * aSheetURI,nsIURI * aOriginalSheetURI,nsIURI * aBaseURI)61 StyleSheet::SetURIs(nsIURI* aSheetURI, nsIURI* aOriginalSheetURI,
62                     nsIURI* aBaseURI)
63 {
64   NS_PRECONDITION(aSheetURI && aBaseURI, "null ptr");
65   StyleSheetInfo& info = SheetInfo();
66   MOZ_ASSERT(!HasRules() && !info.mComplete,
67              "Can't call SetURIs on sheets that are complete or have rules");
68   info.mSheetURI = aSheetURI;
69   info.mOriginalSheetURI = aOriginalSheetURI;
70   info.mBaseURI = aBaseURI;
71 }
72 
73 bool
IsApplicable()74 StyleSheet::IsApplicable() const
75 {
76   return !mDisabled && SheetInfo().mComplete;
77 }
78 
79 bool
HasRules()80 StyleSheet::HasRules() const
81 {
82   MOZ_STYLO_FORWARD(HasRules, ())
83 }
84 
85 void
SetOwningDocument(nsIDocument * aDocument)86 StyleSheet::SetOwningDocument(nsIDocument* aDocument)
87 {
88   MOZ_STYLO_FORWARD(SetOwningDocument, (aDocument))
89 }
90 
91 StyleSheet*
GetParentSheet()92 StyleSheet::GetParentSheet() const
93 {
94   MOZ_STYLO_FORWARD(GetParentSheet, ())
95 }
96 
97 StyleSheet*
GetParentStyleSheet()98 StyleSheet::GetParentStyleSheet() const
99 {
100   return GetParentSheet();
101 }
102 
103 dom::ParentObject
GetParentObject()104 StyleSheet::GetParentObject() const
105 {
106   if (mOwningNode) {
107     return dom::ParentObject(mOwningNode);
108   }
109   return dom::ParentObject(GetParentSheet());
110 }
111 
112 void
AppendStyleSheet(StyleSheet * aSheet)113 StyleSheet::AppendStyleSheet(StyleSheet* aSheet)
114 {
115   MOZ_STYLO_FORWARD_CONCRETE(AppendStyleSheet,
116                              (aSheet->AsGecko()), (aSheet->AsServo()))
117 }
118 
119 nsIPrincipal*
Principal()120 StyleSheet::Principal() const
121 {
122   return SheetInfo().mPrincipal;
123 }
124 
125 void
SetPrincipal(nsIPrincipal * aPrincipal)126 StyleSheet::SetPrincipal(nsIPrincipal* aPrincipal)
127 {
128   StyleSheetInfo& info = SheetInfo();
129   NS_PRECONDITION(!info.mPrincipalSet, "Should only set principal once");
130   if (aPrincipal) {
131     info.mPrincipal = aPrincipal;
132 #ifdef DEBUG
133     info.mPrincipalSet = true;
134 #endif
135   }
136 }
137 
138 CORSMode
GetCORSMode()139 StyleSheet::GetCORSMode() const
140 {
141   return SheetInfo().mCORSMode;
142 }
143 
144 net::ReferrerPolicy
GetReferrerPolicy()145 StyleSheet::GetReferrerPolicy() const
146 {
147   return SheetInfo().mReferrerPolicy;
148 }
149 
150 void
GetIntegrity(dom::SRIMetadata & aResult)151 StyleSheet::GetIntegrity(dom::SRIMetadata& aResult) const
152 {
153   aResult = SheetInfo().mIntegrity;
154 }
155 
156 size_t
SizeOfIncludingThis(MallocSizeOf aMallocSizeOf)157 StyleSheet::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
158 {
159   MOZ_STYLO_FORWARD(SizeOfIncludingThis, (aMallocSizeOf))
160 }
161 
162 #ifdef DEBUG
163 void
List(FILE * aOut,int32_t aIndex)164 StyleSheet::List(FILE* aOut, int32_t aIndex) const
165 {
166   MOZ_STYLO_FORWARD(List, (aOut, aIndex))
167 }
168 #endif
169 
WillDirty()170 void StyleSheet::WillDirty() { MOZ_STYLO_FORWARD(WillDirty, ()) }
DidDirty()171 void StyleSheet::DidDirty() { MOZ_STYLO_FORWARD(DidDirty, ()) }
172 
173 
174 }
175 
176 #endif // mozilla_StyleSheetInlines_h
177