зеркало из https://github.com/mozilla/gecko-dev.git
Make min-/max- prefixed media features without values be parse errors, per http://lists.w3.org/Archives/Public/www-style/2008Sep/0002.html . (Bug 453759) r+sr=bzbarsky
This commit is contained in:
Родитель
b4c73c1583
Коммит
4627664235
|
@ -133,4 +133,5 @@ PEMQExpectedExpressionStart=Expected '(' to start media query expression but fou
|
|||
PEMQExpressionEOF=contents of media query expression
|
||||
PEMQExpectedFeatureName=Expected media feature name but found '%1$S'.
|
||||
PEMQExpectedFeatureNameEnd=Expected ':' or ')' after media feature name but found '%1$S'.
|
||||
PEMQNoMinMaxWithoutValue=Media features with min- or max- must have a value.
|
||||
PEMQExpectedFeatureValue=Found invalid value for media feature.
|
||||
|
|
|
@ -1659,7 +1659,12 @@ PRBool CSSParserImpl::ParseMediaQueryExpression(nsresult& aErrorCode, nsMediaQue
|
|||
}
|
||||
|
||||
if (mToken.mSymbol == PRUnichar(')')) {
|
||||
// All query expressions can be given without a value.
|
||||
// Query expressions for any feature can be given without a value.
|
||||
// However, min/max prefixes are not allowed.
|
||||
if (expr->mRange != nsMediaExpression::eEqual) {
|
||||
REPORT_UNEXPECTED(PEMQNoMinMaxWithoutValue);
|
||||
return PR_FALSE;
|
||||
}
|
||||
expr->mValue.Reset();
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
|
|
@ -103,16 +103,6 @@ function run() {
|
|||
"expression " + e + " should not be parseable");
|
||||
}
|
||||
|
||||
function todo_expression_should_be_parseable(e) {
|
||||
todo(expression_is_parseable(e),
|
||||
"expression " + e + " should be parseable");
|
||||
}
|
||||
|
||||
function todo_expression_should_not_be_parseable(e) {
|
||||
todo(!expression_is_parseable(e),
|
||||
"expression " + e + " should not be parseable");
|
||||
}
|
||||
|
||||
// The no-type syntax doesn't mix with the not and only keywords.
|
||||
query_should_be_parseable("(orientation)");
|
||||
query_should_not_be_parseable("not (orientation)");
|
||||
|
@ -139,6 +129,8 @@ function run() {
|
|||
expression_should_not_be_parseable("max-" + feature + ": -1px");
|
||||
expression_should_not_be_parseable(feature + ": -0.00001mm");
|
||||
expression_should_not_be_parseable(feature + ": -100000em");
|
||||
expression_should_not_be_parseable("min-" + feature);
|
||||
expression_should_not_be_parseable("max-" + feature);
|
||||
}
|
||||
|
||||
var content_div = document.getElementById("content");
|
||||
|
@ -232,18 +224,21 @@ function run() {
|
|||
should_not_apply("(aspect-ratio: 5899/8000)");
|
||||
should_not_apply("(aspect-ratio: 5900/8001)");
|
||||
should_not_apply("(aspect-ratio: 5900/7999)");
|
||||
should_apply("(aspect-ratio)");
|
||||
|
||||
should_apply("(min-aspect-ratio: 59/80)");
|
||||
should_apply("(min-aspect-ratio: 58/80)");
|
||||
should_apply("(min-aspect-ratio: 59/81)");
|
||||
should_not_apply("(min-aspect-ratio: 60/80)");
|
||||
should_not_apply("(min-aspect-ratio: 59/79)");
|
||||
expression_should_not_be_parseable("min-aspect-ratio");
|
||||
|
||||
should_apply("(max-aspect-ratio: 59/80)");
|
||||
should_not_apply("(max-aspect-ratio: 58/80)");
|
||||
should_not_apply("(max-aspect-ratio: 59/81)");
|
||||
should_apply("(max-aspect-ratio: 60/80)");
|
||||
should_apply("(max-aspect-ratio: 59/79)");
|
||||
expression_should_not_be_parseable("max-aspect-ratio");
|
||||
|
||||
let real_dar = device_width + "/" + device_height;
|
||||
let high_dar_1 = (device_width + 1) + "/" + device_height;
|
||||
|
@ -255,18 +250,21 @@ function run() {
|
|||
should_not_apply("all and (device-aspect-ratio: " + high_dar_2 + ")");
|
||||
should_not_apply("all and (device-aspect-ratio: " + low_dar_1 + ")");
|
||||
should_apply("not all and (device-aspect-ratio: " + low_dar_2 + ")");
|
||||
should_apply("(device-aspect-ratio)");
|
||||
|
||||
should_apply("(min-device-aspect-ratio: " + real_dar + ")");
|
||||
should_not_apply("all and (min-device-aspect-ratio: " + high_dar_1 + ")");
|
||||
should_apply("not all and (min-device-aspect-ratio: " + high_dar_2 + ")");
|
||||
should_not_apply("not all and (min-device-aspect-ratio: " + low_dar_1 + ")");
|
||||
should_apply("all and (min-device-aspect-ratio: " + low_dar_2 + ")");
|
||||
expression_should_not_be_parseable("min-device-aspect-ratio");
|
||||
|
||||
should_apply("all and (max-device-aspect-ratio: " + real_dar + ")");
|
||||
should_apply("(max-device-aspect-ratio: " + high_dar_1 + ")");
|
||||
should_apply("(max-device-aspect-ratio: " + high_dar_2 + ")");
|
||||
should_not_apply("all and (max-device-aspect-ratio: " + low_dar_1 + ")");
|
||||
should_apply("not all and (max-device-aspect-ratio: " + low_dar_2 + ")");
|
||||
expression_should_not_be_parseable("max-device-aspect-ratio");
|
||||
|
||||
for each (let feature in [ "max-aspect-ratio", "device-aspect-ratio" ]) {
|
||||
expression_should_be_parseable(feature + ": 1/1");
|
||||
|
@ -312,23 +310,15 @@ function run() {
|
|||
should_apply(depth_query("max-", depth + 1));
|
||||
|
||||
(is_color ? should_apply : should_not_apply)("all and (color)");
|
||||
(is_color ? should_apply : should_not_apply)("all and (max-color)");
|
||||
(is_color ? should_apply : should_not_apply)("all and (min-color)");
|
||||
expression_should_not_be_parseable("max-color");
|
||||
expression_should_not_be_parseable("min-color");
|
||||
(is_color ? should_not_apply : should_apply)("all and (monochrome)");
|
||||
(is_color ? should_not_apply : should_apply)("all and (max-monochrome)");
|
||||
(is_color ? should_not_apply : should_apply)("all and (min-monochrome)");
|
||||
expression_should_not_be_parseable("max-monochrome");
|
||||
expression_should_not_be_parseable("min-monochrome");
|
||||
(is_color ? should_apply : should_not_apply)("not all and (monochrome)");
|
||||
(is_color ? should_apply : should_not_apply)("not all and (max-monochrome)");
|
||||
(is_color ? should_apply : should_not_apply)("not all and (min-monochrome)");
|
||||
(is_color ? should_not_apply : should_apply)("not all and (color)");
|
||||
(is_color ? should_not_apply : should_apply)("not all and (max-color)");
|
||||
(is_color ? should_not_apply : should_apply)("not all and (min-color)");
|
||||
(is_color ? should_apply : should_not_apply)("only all and (color)");
|
||||
(is_color ? should_apply : should_not_apply)("only all and (max-color)");
|
||||
(is_color ? should_apply : should_not_apply)("only all and (min-color)");
|
||||
(is_color ? should_not_apply : should_apply)("only all and (monochrome)");
|
||||
(is_color ? should_not_apply : should_apply)("only all and (max-monochrome)");
|
||||
(is_color ? should_not_apply : should_apply)("only all and (min-monochrome)");
|
||||
|
||||
for each (let feature in [ "color", "min-monochrome", "max-color-index" ]) {
|
||||
expression_should_be_parseable(feature + ": 1");
|
||||
|
@ -406,6 +396,7 @@ function run() {
|
|||
expression_should_not_be_parseable("min-scan:interlace");
|
||||
expression_should_not_be_parseable("scan: 1");
|
||||
expression_should_not_be_parseable("max-scan");
|
||||
expression_should_not_be_parseable("max-scan: progressive");
|
||||
// Assume we don't support tv devices.
|
||||
should_not_apply("(scan)");
|
||||
should_not_apply("(scan: progressive)");
|
||||
|
@ -419,6 +410,7 @@ function run() {
|
|||
expression_should_be_parseable("grid: 1");
|
||||
expression_should_be_parseable("grid: 1");
|
||||
expression_should_not_be_parseable("min-grid");
|
||||
expression_should_not_be_parseable("min-grid:0");
|
||||
expression_should_not_be_parseable("max-grid: 1");
|
||||
expression_should_not_be_parseable("grid: 2");
|
||||
expression_should_not_be_parseable("grid: -1");
|
||||
|
|
Загрузка…
Ссылка в новой задаче