From b0f09723145adfadef5ea3a94adc4e6396365312 Mon Sep 17 00:00:00 2001 From: Francis Dominic Fajardo Date: Thu, 3 Jul 2025 17:13:32 +0800 Subject: [PATCH] Issue #2045 - Part 3: Implement cascade origin tracking to CSS parser The CSS parser already knows the cascade origin, but it is using a different enum for storing it. --- layout/style/nsCSSParser.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp index f9a2bc9f50..b33167af76 100644 --- a/layout/style/nsCSSParser.cpp +++ b/layout/style/nsCSSParser.cpp @@ -1525,6 +1525,9 @@ protected: // enum type be signed. css::SheetParsingMode mParsingMode : 3; + // Indicates the cascade origin of the sheet. + mozilla::SheetType mLevel; + // True if we are in parsing rules for the chrome. bool mIsChrome : 1; @@ -1656,6 +1659,7 @@ CSSParserImpl::CSSParserImpl() mHashlessColorQuirk(false), mUnitlessLengthQuirk(false), mParsingMode(css::eAuthorSheetFeatures), + mLevel(mozilla::SheetType::Doc), mIsChrome(false), mViewportUnitsEnabled(true), mHTMLMediaMode(false), @@ -1799,6 +1803,22 @@ CSSParserImpl::ParseSheet(const nsAString& aInput, } mParsingMode = mSheet->ParsingMode(); + switch (mParsingMode) { + case css::eAgentSheetFeatures: + mLevel = mozilla::SheetType::Agent; + break; + + case css::eUserSheetFeatures: + mLevel = mozilla::SheetType::User; + break; + + case css::eAuthorSheetFeatures: + mLevel = mozilla::SheetType::Doc; + break; + + default: + MOZ_CRASH("impossible value for aType"); + } mIsChrome = dom::IsChromeURI(aSheetURI); mReusableSheets = aReusableSheets; @@ -1824,6 +1844,7 @@ CSSParserImpl::ParseSheet(const nsAString& aInput, ReleaseScanner(); mParsingMode = css::eAuthorSheetFeatures; + mLevel = mozilla::SheetType::Doc; mIsChrome = false; mReusableSheets = nullptr;