Bug 1321754 Part 1 - Add an enum value to SheetParsingMode for agent sheets that use no unsafe rules.
scrollbars.css is the only sheet which is parsed as author level, but later
added as agent level in [1]. Add a new enum value so that it can be parsed
as author level in gecko (nsCSSParser::AgentRulesEnabled() will exclude it),
but servo can recognize it as agent level sheet when the sheet is created.
Delete UserRulesEnabled() because no one uses it.
[1] http://searchfox.org/mozilla-central/rev/7419b368156a6efa24777b21b0e5706be89a9c2f/layout/base/nsDocumentViewer.cpp#2326
MozReview-Commit-ID: 2lrV4ogfnHM
--- a/layout/style/SheetParsingMode.h
+++ b/layout/style/SheetParsingMode.h
@@ -19,25 +19,35 @@ namespace css {
* Author sheets are the normal case: styles embedded in or linked
* from HTML pages. They are also the most restricted.
*
* User sheets can do anything author sheets can do, and also get
* access to a few CSS extensions that are not yet suitable for
* exposure on the public Web, but are very useful for expressing
* user style overrides, such as @-moz-document rules.
*
+ * XXX: eUserSheetFeatures was added in bug 1035091, but some patches in
+ * that bug never landed to use this enum value. Currently, all the features
+ * in user sheet are also available in author sheet.
+ *
* Agent sheets have access to all author- and user-sheet features
* plus more extensions that are necessary for internal use but,
* again, not yet suitable for exposure on the public Web. Some of
* these are outright unsafe to expose; in particular, incorrect
* styling of anonymous box pseudo-elements can violate layout
* invariants.
+ *
+ * Agent sheets that do not use any unsafe rules could use
+ * eSafeAgentSheetFeatures when creating the sheet. This enum value allows
+ * Servo backend to recognize the sheets as the agent level, but Gecko
+ * backend will parse it under _author_ level.
*/
enum SheetParsingMode {
eAuthorSheetFeatures = 0,
eUserSheetFeatures,
- eAgentSheetFeatures
+ eAgentSheetFeatures,
+ eSafeAgentSheetFeatures,
};
} // namespace css
} // namespace mozilla
#endif // mozilla_css_SheetParsingMode_h
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -358,30 +358,26 @@ public:
uint32_t aLineOffset);
bool AgentRulesEnabled() const {
return mParsingMode == css::eAgentSheetFeatures;
}
bool ChromeRulesEnabled() const {
return mIsChrome;
}
- bool UserRulesEnabled() const {
- return mParsingMode == css::eAgentSheetFeatures ||
- mParsingMode == css::eUserSheetFeatures;
- }
CSSEnabledState EnabledState() const {
static_assert(int(CSSEnabledState::eForAllContent) == 0,
"CSSEnabledState::eForAllContent should be zero for "
"this bitfield to work");
CSSEnabledState enabledState = CSSEnabledState::eForAllContent;
if (AgentRulesEnabled()) {
enabledState |= CSSEnabledState::eInUASheets;
}
- if (mIsChrome) {
+ if (ChromeRulesEnabled()) {
enabledState |= CSSEnabledState::eInChrome;
}
return enabledState;
}
nsCSSPropertyID LookupEnabledProperty(const nsAString& aProperty) {
return nsCSSProps::LookupProperty(aProperty, EnabledState());
}
--- a/layout/style/nsLayoutStylesheetCache.cpp
+++ b/layout/style/nsLayoutStylesheetCache.cpp
@@ -74,17 +74,17 @@ nsLayoutStylesheetCache::Observe(nsISupp
}
StyleSheet*
nsLayoutStylesheetCache::ScrollbarsSheet()
{
if (!mScrollbarsSheet) {
// Scrollbars don't need access to unsafe rules
LoadSheetURL("chrome://global/skin/scrollbars.css",
- &mScrollbarsSheet, eAuthorSheetFeatures, eCrash);
+ &mScrollbarsSheet, eSafeAgentSheetFeatures, eCrash);
}
return mScrollbarsSheet;
}
StyleSheet*
nsLayoutStylesheetCache::FormsSheet()
{