Bug 1321754 - Add an enum value to SheetParsingMode for agent sheets that use no unsafe rules. r=heycam

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

--HG--
extra : rebase_source : 9d80a146f2ec5629999076ea1587e7d36f06afe7
This commit is contained in:
Ting-Yu Lin 2017-03-28 18:06:26 +08:00
parent 7137918b7e
commit 0119bb6b75
4 changed files with 15 additions and 7 deletions

View File

@ -24,17 +24,27 @@ namespace css {
* 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

View File

@ -363,10 +363,6 @@ public:
bool ChromeRulesEnabled() const {
return mIsChrome;
}
bool UserRulesEnabled() const {
return mParsingMode == css::eAgentSheetFeatures ||
mParsingMode == css::eUserSheetFeatures;
}
CSSEnabledState EnabledState() const {
static_assert(int(CSSEnabledState::eForAllContent) == 0,
@ -376,7 +372,7 @@ public:
if (AgentRulesEnabled()) {
enabledState |= CSSEnabledState::eInUASheets;
}
if (mIsChrome) {
if (ChromeRulesEnabled()) {
enabledState |= CSSEnabledState::eInChrome;
}
return enabledState;

View File

@ -79,7 +79,7 @@ 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;

View File

@ -327,6 +327,7 @@ pub extern "C" fn Servo_StyleSheet_Empty(mode: SheetParsingMode) -> RawServoStyl
SheetParsingMode::eAuthorSheetFeatures => Origin::Author,
SheetParsingMode::eUserSheetFeatures => Origin::User,
SheetParsingMode::eAgentSheetFeatures => Origin::UserAgent,
SheetParsingMode::eSafeAgentSheetFeatures => Origin::UserAgent,
};
let shared_lock = global_style_data.shared_lock.clone();
Arc::new(Stylesheet::from_str(
@ -349,6 +350,7 @@ pub extern "C" fn Servo_StyleSheet_FromUTF8Bytes(loader: *mut Loader,
SheetParsingMode::eAuthorSheetFeatures => Origin::Author,
SheetParsingMode::eUserSheetFeatures => Origin::User,
SheetParsingMode::eAgentSheetFeatures => Origin::UserAgent,
SheetParsingMode::eSafeAgentSheetFeatures => Origin::UserAgent,
};
let url_data = unsafe { RefPtr::from_ptr_ref(&extra_data) };