mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
stylo: Add a mechanism to restrict media-features to UA and chrome sheets.
Reviewed-by: xidorn Bug: 1396066 MozReview-Commit-ID: 38jRV6mPbE3
This commit is contained in:
parent
04b7386070
commit
b0706d5cf0
2 changed files with 16 additions and 2 deletions
|
@ -32,6 +32,7 @@ use string_cache::Atom;
|
||||||
use style_traits::{CSSPixel, DevicePixel};
|
use style_traits::{CSSPixel, DevicePixel};
|
||||||
use style_traits::{ToCss, ParseError, StyleParseError};
|
use style_traits::{ToCss, ParseError, StyleParseError};
|
||||||
use style_traits::viewport::ViewportConstraints;
|
use style_traits::viewport::ViewportConstraints;
|
||||||
|
use stylesheets::Origin;
|
||||||
use values::{CSSFloat, CustomIdent, serialize_dimension};
|
use values::{CSSFloat, CustomIdent, serialize_dimension};
|
||||||
use values::computed::{self, ToComputedValue};
|
use values::computed::{self, ToComputedValue};
|
||||||
use values::specified::Length;
|
use values::specified::Length;
|
||||||
|
@ -584,8 +585,10 @@ impl Expression {
|
||||||
/// ```
|
/// ```
|
||||||
/// (media-feature: media-value)
|
/// (media-feature: media-value)
|
||||||
/// ```
|
/// ```
|
||||||
pub fn parse<'i, 't>(context: &ParserContext, input: &mut Parser<'i, 't>)
|
pub fn parse<'i, 't>(
|
||||||
-> Result<Self, ParseError<'i>> {
|
context: &ParserContext,
|
||||||
|
input: &mut Parser<'i, 't>,
|
||||||
|
) -> Result<Self, ParseError<'i>> {
|
||||||
input.expect_parenthesis_block().map_err(|err|
|
input.expect_parenthesis_block().map_err(|err|
|
||||||
match err {
|
match err {
|
||||||
BasicParseError::UnexpectedToken(t) => StyleParseError::ExpectedIdentifier(t),
|
BasicParseError::UnexpectedToken(t) => StyleParseError::ExpectedIdentifier(t),
|
||||||
|
@ -606,6 +609,12 @@ impl Expression {
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut flags = 0;
|
let mut flags = 0;
|
||||||
|
|
||||||
|
if context.in_chrome_stylesheet() ||
|
||||||
|
context.stylesheet_origin == Origin::UserAgent {
|
||||||
|
flags |= nsMediaFeature_RequirementFlags::eUserAgentAndChromeOnly as u8;
|
||||||
|
}
|
||||||
|
|
||||||
let result = {
|
let result = {
|
||||||
let mut feature_name = &**ident;
|
let mut feature_name = &**ident;
|
||||||
|
|
||||||
|
|
|
@ -130,6 +130,11 @@ impl<'a> ParserContext<'a> {
|
||||||
};
|
};
|
||||||
context.error_reporter.report_error(self.url_data, location, error)
|
context.error_reporter.report_error(self.url_data, location, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns whether this is a chrome stylesheets.
|
||||||
|
pub fn in_chrome_stylesheet(&self) -> bool {
|
||||||
|
self.url_data.is_chrome()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXXManishearth Replace all specified value parse impls with impls of this
|
// XXXManishearth Replace all specified value parse impls with impls of this
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue