diff options
Diffstat (limited to 'layout')
-rw-r--r-- | layout/style/Loader.cpp | 28 | ||||
-rw-r--r-- | layout/style/Loader.h | 13 |
2 files changed, 28 insertions, 13 deletions
diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index 68a7be21e..c21199238 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -1278,7 +1278,8 @@ Loader::PrepareSheet(StyleSheet* aSheet, const nsSubstring& aMediaString, nsMediaList* aMediaList, Element* aScopeElement, - bool isAlternate) + bool isAlternate, + bool isExplicitlyEnabled) { NS_PRECONDITION(aSheet, "Must have a sheet!"); @@ -1307,7 +1308,7 @@ Loader::PrepareSheet(StyleSheet* aSheet, sheet->SetMedia(mediaList); sheet->SetTitle(aTitle); - sheet->SetEnabled(!isAlternate); + sheet->SetEnabled(!isAlternate || isExplicitlyEnabled); sheet->SetScopeElement(aScopeElement); } @@ -1985,7 +1986,8 @@ Loader::LoadInlineStyle(nsIContent* aElement, Element* aScopeElement, nsICSSLoaderObserver* aObserver, bool* aCompleted, - bool* aIsAlternate) + bool* aIsAlternate, + bool* aIsExplicitlyEnabled) { LOG(("css::Loader::LoadInlineStyle")); NS_ASSERTION(mParsingDatas.Length() == 0, "We're in the middle of a parse?"); @@ -2017,8 +2019,9 @@ Loader::LoadInlineStyle(nsIContent* aElement, "Inline sheets should not be cached"); LOG((" Sheet is alternate: %d", *aIsAlternate)); + LOG((" Sheet is explicitly enabled: %d", *aIsExplicitlyEnabled)); - PrepareSheet(sheet, aTitle, aMedia, nullptr, aScopeElement, *aIsAlternate); + PrepareSheet(sheet, aTitle, aMedia, nullptr, aScopeElement, *aIsAlternate, *aIsExplicitlyEnabled); if (aElement->HasFlag(NODE_IS_IN_SHADOW_TREE)) { ShadowRoot* containingShadow = aElement->GetContainingShadow(); @@ -2059,7 +2062,8 @@ Loader::LoadStyleLink(nsIContent* aElement, ReferrerPolicy aReferrerPolicy, const nsAString& aIntegrity, nsICSSLoaderObserver* aObserver, - bool* aIsAlternate) + bool* aIsAlternate, + bool* aIsExplicitlyEnabled) { LOG(("css::Loader::LoadStyleLink")); NS_PRECONDITION(aURL, "Must have URL to load"); @@ -2112,8 +2116,9 @@ Loader::LoadStyleLink(nsIContent* aElement, NS_ENSURE_SUCCESS(rv, rv); LOG((" Sheet is alternate: %d", *aIsAlternate)); + LOG((" Sheet is explicitly enabled: %d", *aIsExplicitlyEnabled)); - PrepareSheet(sheet, aTitle, aMedia, nullptr, nullptr, *aIsAlternate); + PrepareSheet(sheet, aTitle, aMedia, nullptr, nullptr, *aIsAlternate, *aIsExplicitlyEnabled); rv = InsertSheetInDoc(sheet, aElement, mDocument); NS_ENSURE_SUCCESS(rv, rv); @@ -2138,9 +2143,10 @@ Loader::LoadStyleLink(nsIContent* aElement, aObserver, principal, requestingNode); NS_ADDREF(data); - // If we have to parse and it's an alternate non-inline, defer it + // If we have to parse and it's an alternate non-inline, defer it unless + // it's explicitly enabled. if (aURL && state == eSheetNeedsParser && mSheets->mLoadingDatas.Count() != 0 && - *aIsAlternate) { + *aIsAlternate && !*aIsExplicitlyEnabled) { LOG((" Deferring alternate sheet load")); URIPrincipalReferrerPolicyAndCORSModeHashKey key(data->mURI, data->mLoaderPrincipal, @@ -2267,6 +2273,7 @@ Loader::LoadChildSheet(StyleSheet* aParentSheet, state = eSheetComplete; } else { bool isAlternate; + bool isExplicitlyEnabled; const nsSubstring& empty = EmptyString(); // For now, use CORS_NONE for child sheets rv = CreateSheet(aURL, nullptr, principal, @@ -2277,7 +2284,7 @@ Loader::LoadChildSheet(StyleSheet* aParentSheet, false, empty, state, &isAlternate, &sheet); NS_ENSURE_SUCCESS(rv, rv); - PrepareSheet(sheet, empty, empty, aMedia, nullptr, isAlternate); + PrepareSheet(sheet, empty, empty, aMedia, nullptr, isAlternate, isExplicitlyEnabled); } rv = InsertChildSheet(sheet, aParentSheet, aParentRule); @@ -2390,6 +2397,7 @@ Loader::InternalLoadNonDocumentSheet(nsIURI* aURL, StyleSheetState state; bool isAlternate; + bool isExplicitlyEnabled; RefPtr<StyleSheet> sheet; bool syncLoad = (aObserver == nullptr); const nsSubstring& empty = EmptyString(); @@ -2399,7 +2407,7 @@ Loader::InternalLoadNonDocumentSheet(nsIURI* aURL, false, empty, state, &isAlternate, &sheet); NS_ENSURE_SUCCESS(rv, rv); - PrepareSheet(sheet, empty, empty, nullptr, nullptr, isAlternate); + PrepareSheet(sheet, empty, empty, nullptr, nullptr, isAlternate, isExplicitlyEnabled); if (state == eSheetComplete) { LOG((" Sheet already complete")); diff --git a/layout/style/Loader.h b/layout/style/Loader.h index 209783a80..4a3088b6b 100644 --- a/layout/style/Loader.h +++ b/layout/style/Loader.h @@ -230,6 +230,8 @@ public: * @param [out] aCompleted whether parsing of the sheet completed. * @param [out] aIsAlternate whether the stylesheet ended up being an * alternate sheet. + * @param [out] aIsExplicitlyEnabled whether the stylesheet was explicitly + * enabled by having the disabled attribute removed. */ nsresult LoadInlineStyle(nsIContent* aElement, const nsAString& aBuffer, @@ -239,7 +241,8 @@ public: mozilla::dom::Element* aScopeElement, nsICSSLoaderObserver* aObserver, bool* aCompleted, - bool* aIsAlternate); + bool* aIsAlternate, + bool* aIsExplicitlyEnabled); /** * Load a linked (document) stylesheet. If a successful result is returned, @@ -260,6 +263,8 @@ public: * @param [out] aIsAlternate whether the stylesheet actually ended up beinga * an alternate sheet. Note that this need not match * aHasAlternateRel. + * @param [out] aIsExplicitlyEnabled whether the stylesheet was explicitly + * enabled by having the disabled attribute removed. */ nsresult LoadStyleLink(nsIContent* aElement, nsIURI* aURL, @@ -270,7 +275,8 @@ public: ReferrerPolicy aReferrerPolicy, const nsAString& aIntegrity, nsICSSLoaderObserver* aObserver, - bool* aIsAlternate); + bool* aIsAlternate, + bool* aIsExplicitlyEnabled); /** * Load a child (@import-ed) style sheet. In addition to loading the sheet, @@ -476,7 +482,8 @@ private: const nsAString& aMediaString, nsMediaList* aMediaList, dom::Element* aScopeElement, - bool isAlternate); + bool isAlternate, + bool isExplicitlyEnabled); nsresult InsertSheetInDoc(StyleSheet* aSheet, nsIContent* aLinkingContent, |