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:
L. David Baron 2008-09-06 07:04:28 -07:00
Родитель b4c73c1583
Коммит 4627664235
3 изменённых файлов: 21 добавлений и 23 удалений

Просмотреть файл

@ -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");