Bug 1364260 - Don't require whitespace between keywords and parens in supports rule condition. r=dbaron

MozReview-Commit-ID: B7GsrDQ6NuO

--HG--
extra : rebase_source : 1e768a6d9baeae290d35221520a28487f705f50a
This commit is contained in:
Xidorn Quan 2017-07-20 15:33:09 +10:00
Родитель 267881f1f1
Коммит 6bd73cdf47
3 изменённых файлов: 11 добавлений и 21 удалений

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

@ -4480,7 +4480,7 @@ CSSParserImpl::ParseSupportsCondition(bool& aConditionMet)
}
// supports_condition_negation
// : 'not' S+ supports_condition_in_parens
// : 'not' supports_condition_in_parens
// ;
bool
CSSParserImpl::ParseSupportsConditionNegation(bool& aConditionMet)
@ -4496,11 +4496,6 @@ CSSParserImpl::ParseSupportsConditionNegation(bool& aConditionMet)
return false;
}
if (!RequireWhitespace()) {
REPORT_UNEXPECTED(PESupportsWhitespaceRequired);
return false;
}
if (ParseSupportsConditionInParens(aConditionMet)) {
aConditionMet = !aConditionMet;
return true;
@ -4662,14 +4657,14 @@ CSSParserImpl::ParseSupportsConditionInParensInsideParens(bool& aConditionMet)
}
// supports_condition_terms
// : S+ 'and' supports_condition_terms_after_operator('and')
// | S+ 'or' supports_condition_terms_after_operator('or')
// : 'and' supports_condition_terms_after_operator('and')
// | 'or' supports_condition_terms_after_operator('or')
// |
// ;
bool
CSSParserImpl::ParseSupportsConditionTerms(bool& aConditionMet)
{
if (!RequireWhitespace() || !GetToken(false)) {
if (!GetToken(true)) {
return true;
}
@ -4691,18 +4686,13 @@ CSSParserImpl::ParseSupportsConditionTerms(bool& aConditionMet)
}
// supports_condition_terms_after_operator(operator)
// : S+ supports_condition_in_parens ( <operator> supports_condition_in_parens )*
// : supports_condition_in_parens ( <operator> supports_condition_in_parens )*
// ;
bool
CSSParserImpl::ParseSupportsConditionTermsAfterOperator(
bool& aConditionMet,
CSSParserImpl::SupportsConditionTermOperator aOperator)
{
if (!RequireWhitespace()) {
REPORT_UNEXPECTED(PESupportsWhitespaceRequired);
return false;
}
const char* token = aOperator == eAnd ? "and" : "or";
for (;;) {
bool termConditionMet = false;

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

@ -50,7 +50,7 @@ to mochitest command.
* test_bug798843_pref.html [3]
* Incorrect parsing
* different parsing bug 1364260
* test_supports_rules.html [6]
* test_supports_rules.html [1]
* test_condition_text.html [1]
* Incorrect serialization
* place-{content,items,self} shorthands bug 1363971

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

@ -63,19 +63,19 @@ function runTest() {
check_balanced_condition("not(color: green)", false);
check_balanced_condition("not(colour: green)", false);
check_balanced_condition("not/* */(color: green)", false);
check_balanced_condition("not/* */(colour: green)", false);
check_balanced_condition("not/* */(colour: green)", true);
check_balanced_condition("not /* */ (color: green)", false);
check_balanced_condition("not /* */ (colour: green)", true);
check_balanced_condition("(color: green) and (color: blue)", true);
check_balanced_condition("(color: green) /* */ /* */ and /* */ /* */ (color: blue)", true);
check_balanced_condition("(color: green) and(color: blue)", false);
check_balanced_condition("(color: green) and/* */(color: blue)", false);
check_balanced_condition("(color: green)and (color: blue)", false);
check_balanced_condition("(color: green) and/* */(color: blue)", true);
check_balanced_condition("(color: green)and (color: blue)", true);
check_balanced_condition("(color: green) or (color: blue)", true);
check_balanced_condition("(color: green) /* */ /* */ or /* */ /* */ (color: blue)", true);
check_balanced_condition("(color: green) or(color: blue)", false);
check_balanced_condition("(color: green) or/* */(color: blue)", false);
check_balanced_condition("(color: green)or (color: blue)", false);
check_balanced_condition("(color: green) or/* */(color: blue)", true);
check_balanced_condition("(color: green)or (color: blue)", true);
SimpleTest.finish();
}