Skip to content

Commit

Permalink
Bug 1321754 - Add an enum value to SheetParsingMode for agent sheets …
Browse files Browse the repository at this point in the history
…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
  • Loading branch information
aethanyc committed Mar 28, 2017
1 parent 7137918 commit 0119bb6
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 7 deletions.
12 changes: 11 additions & 1 deletion layout/style/SheetParsingMode.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 1 addition & 5 deletions layout/style/nsCSSParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -363,10 +363,6 @@ class CSSParserImpl {
bool ChromeRulesEnabled() const {
return mIsChrome;
}
bool UserRulesEnabled() const {
return mParsingMode == css::eAgentSheetFeatures ||
mParsingMode == css::eUserSheetFeatures;
}

CSSEnabledState EnabledState() const {
static_assert(int(CSSEnabledState::eForAllContent) == 0,
Expand All @@ -376,7 +372,7 @@ class CSSParserImpl {
if (AgentRulesEnabled()) {
enabledState |= CSSEnabledState::eInUASheets;
}
if (mIsChrome) {
if (ChromeRulesEnabled()) {
enabledState |= CSSEnabledState::eInChrome;
}
return enabledState;
Expand Down
2 changes: 1 addition & 1 deletion layout/style/nsLayoutStylesheetCache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions servo/ports/geckolib/glue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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) };
Expand Down

0 comments on commit 0119bb6

Please sign in to comment.