зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1221677 - "[css-grid] Put the 'subgrid' support behind a pref, disabled by default". r=mats
This commit is contained in:
Родитель
b0130333d6
Коммит
1262c58ac3
|
@ -171,3 +171,4 @@ PEExpectedVariableNameEOF=identifier for variable name
|
||||||
PEExpectedVariableName=Expected identifier for variable name but found '%1$S'.
|
PEExpectedVariableName=Expected identifier for variable name but found '%1$S'.
|
||||||
PEExpectedVariableFallback=Expected variable reference fallback after ','.
|
PEExpectedVariableFallback=Expected variable reference fallback after ','.
|
||||||
PEExpectedVariableCommaOrCloseParen=Expected ',' or ')' after variable name in variable reference but found '%1$S'.
|
PEExpectedVariableCommaOrCloseParen=Expected ',' or ')' after variable name in variable reference but found '%1$S'.
|
||||||
|
PESubgridNotSupported=Support for the 'subgrid' keyword of CSS Grid is not enabled.
|
||||||
|
|
|
@ -131,6 +131,7 @@ using namespace mozilla::layout;
|
||||||
using namespace mozilla::gfx;
|
using namespace mozilla::gfx;
|
||||||
|
|
||||||
#define GRID_ENABLED_PREF_NAME "layout.css.grid.enabled"
|
#define GRID_ENABLED_PREF_NAME "layout.css.grid.enabled"
|
||||||
|
#define GRID_TEMPLATE_SUBGRID_ENABLED_PREF_NAME "layout.css.grid-template-subgrid-value.enabled"
|
||||||
#define RUBY_ENABLED_PREF_NAME "layout.css.ruby.enabled"
|
#define RUBY_ENABLED_PREF_NAME "layout.css.ruby.enabled"
|
||||||
#define STICKY_ENABLED_PREF_NAME "layout.css.sticky.enabled"
|
#define STICKY_ENABLED_PREF_NAME "layout.css.sticky.enabled"
|
||||||
#define DISPLAY_CONTENTS_ENABLED_PREF_NAME "layout.css.display-contents.enabled"
|
#define DISPLAY_CONTENTS_ENABLED_PREF_NAME "layout.css.display-contents.enabled"
|
||||||
|
@ -730,6 +731,22 @@ nsLayoutUtils::UnsetValueEnabled()
|
||||||
return sUnsetValueEnabled;
|
return sUnsetValueEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
nsLayoutUtils::IsGridTemplateSubgridValueEnabled()
|
||||||
|
{
|
||||||
|
static bool sGridTemplateSubgridValueEnabled;
|
||||||
|
static bool sGridTemplateSubgridValueEnabledPrefCached = false;
|
||||||
|
|
||||||
|
if (!sGridTemplateSubgridValueEnabledPrefCached) {
|
||||||
|
sGridTemplateSubgridValueEnabledPrefCached = true;
|
||||||
|
Preferences::AddBoolVarCache(&sGridTemplateSubgridValueEnabled,
|
||||||
|
GRID_TEMPLATE_SUBGRID_ENABLED_PREF_NAME,
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sGridTemplateSubgridValueEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
nsLayoutUtils::IsTextAlignTrueValueEnabled()
|
nsLayoutUtils::IsTextAlignTrueValueEnabled()
|
||||||
{
|
{
|
||||||
|
|
|
@ -2308,6 +2308,12 @@ public:
|
||||||
*/
|
*/
|
||||||
static bool UnsetValueEnabled();
|
static bool UnsetValueEnabled();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether support for the CSS grid-template-{columns,rows} 'subgrid X'
|
||||||
|
* value is enabled.
|
||||||
|
*/
|
||||||
|
static bool IsGridTemplateSubgridValueEnabled();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether support for the CSS text-align (and -moz-text-align-last)
|
* Checks whether support for the CSS text-align (and -moz-text-align-last)
|
||||||
* 'true' value is enabled.
|
* 'true' value is enabled.
|
||||||
|
|
|
@ -8775,6 +8775,10 @@ CSSParserImpl::ParseGridTemplateColumnsRows(nsCSSProperty aPropID)
|
||||||
nsSubstring* ident = NextIdent();
|
nsSubstring* ident = NextIdent();
|
||||||
if (ident) {
|
if (ident) {
|
||||||
if (ident->LowerCaseEqualsLiteral("subgrid")) {
|
if (ident->LowerCaseEqualsLiteral("subgrid")) {
|
||||||
|
if (!nsLayoutUtils::IsGridTemplateSubgridValueEnabled()) {
|
||||||
|
REPORT_UNEXPECTED(PESubgridNotSupported);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!ParseOptionalLineNameListAfterSubgrid(value)) {
|
if (!ParseOptionalLineNameListAfterSubgrid(value)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -8946,6 +8950,10 @@ CSSParserImpl::ParseGridTemplate()
|
||||||
nsSubstring* ident = NextIdent();
|
nsSubstring* ident = NextIdent();
|
||||||
if (ident) {
|
if (ident) {
|
||||||
if (ident->LowerCaseEqualsLiteral("subgrid")) {
|
if (ident->LowerCaseEqualsLiteral("subgrid")) {
|
||||||
|
if (!nsLayoutUtils::IsGridTemplateSubgridValueEnabled()) {
|
||||||
|
REPORT_UNEXPECTED(PESubgridNotSupported);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!ParseOptionalLineNameListAfterSubgrid(value)) {
|
if (!ParseOptionalLineNameListAfterSubgrid(value)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -9019,6 +9027,10 @@ CSSParserImpl::ParseGridTemplateAfterSlash(bool aColumnsIsTrackList)
|
||||||
nsSubstring* ident = NextIdent();
|
nsSubstring* ident = NextIdent();
|
||||||
if (ident) {
|
if (ident) {
|
||||||
if (ident->LowerCaseEqualsLiteral("subgrid")) {
|
if (ident->LowerCaseEqualsLiteral("subgrid")) {
|
||||||
|
if (!nsLayoutUtils::IsGridTemplateSubgridValueEnabled()) {
|
||||||
|
REPORT_UNEXPECTED(PESubgridNotSupported);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!ParseOptionalLineNameListAfterSubgrid(rowsValue)) {
|
if (!ParseOptionalLineNameListAfterSubgrid(rowsValue)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5703,6 +5703,9 @@ if (IsCSSPropertyPrefEnabled("layout.css.ruby.enabled")) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsCSSPropertyPrefEnabled("layout.css.grid.enabled")) {
|
if (IsCSSPropertyPrefEnabled("layout.css.grid.enabled")) {
|
||||||
|
var isGridTemplateSubgridValueEnabled =
|
||||||
|
IsCSSPropertyPrefEnabled("layout.css.grid-template-subgrid-value.enabled");
|
||||||
|
|
||||||
gCSSProperties["display"].other_values.push("grid", "inline-grid");
|
gCSSProperties["display"].other_values.push("grid", "inline-grid");
|
||||||
gCSSProperties["grid-auto-flow"] = {
|
gCSSProperties["grid-auto-flow"] = {
|
||||||
domProp: "gridAutoFlow",
|
domProp: "gridAutoFlow",
|
||||||
|
@ -5797,15 +5800,7 @@ if (IsCSSPropertyPrefEnabled("layout.css.grid.enabled")) {
|
||||||
"[a] 2.5fr [z] Repeat(4, [a] 20px [] auto [b c]) [d]",
|
"[a] 2.5fr [z] Repeat(4, [a] 20px [] auto [b c]) [d]",
|
||||||
"[a] 2.5fr [z] Repeat(4, [a] 20px [] auto) [d]",
|
"[a] 2.5fr [z] Repeat(4, [a] 20px [] auto) [d]",
|
||||||
"[a] 2.5fr [z] Repeat(4, 20px [b c] auto [b c]) [d]",
|
"[a] 2.5fr [z] Repeat(4, 20px [b c] auto [b c]) [d]",
|
||||||
"[a] 2.5fr [z] Repeat(4, 20px auto) [d]",
|
"[a] 2.5fr [z] Repeat(4, 20px auto) [d]"
|
||||||
|
|
||||||
// See https://bugzilla.mozilla.org/show_bug.cgi?id=981300
|
|
||||||
"[none auto subgrid min-content max-content foo] 40px",
|
|
||||||
|
|
||||||
"subgrid",
|
|
||||||
"subgrid [] [foo bar]",
|
|
||||||
"subgrid repeat(1, [])",
|
|
||||||
"subgrid Repeat(4, [a] [b c] [] [d])",
|
|
||||||
],
|
],
|
||||||
invalid_values: [
|
invalid_values: [
|
||||||
"",
|
"",
|
||||||
|
@ -5842,6 +5837,23 @@ if (IsCSSPropertyPrefEnabled("layout.css.grid.enabled")) {
|
||||||
"repeat(2.5, 20px)",
|
"repeat(2.5, 20px)",
|
||||||
"repeat(2, (foo))",
|
"repeat(2, (foo))",
|
||||||
"repeat(2, foo)",
|
"repeat(2, foo)",
|
||||||
|
"40px calc(0px + rubbish)"
|
||||||
|
],
|
||||||
|
unbalanced_values: [
|
||||||
|
"(foo] 40px",
|
||||||
|
]
|
||||||
|
};
|
||||||
|
if (isGridTemplateSubgridValueEnabled) {
|
||||||
|
gCSSProperties["grid-template-columns"].other_values.push(
|
||||||
|
// See https://bugzilla.mozilla.org/show_bug.cgi?id=981300
|
||||||
|
"[none auto subgrid min-content max-content foo] 40px",
|
||||||
|
|
||||||
|
"subgrid",
|
||||||
|
"subgrid [] [foo bar]",
|
||||||
|
"subgrid repeat(1, [])",
|
||||||
|
"subgrid Repeat(4, [a] [b c] [] [d])"
|
||||||
|
);
|
||||||
|
gCSSProperties["grid-template-columns"].invalid_values.push(
|
||||||
"subgrid (foo) 40px",
|
"subgrid (foo) 40px",
|
||||||
"subgrid (foo 40px)",
|
"subgrid (foo 40px)",
|
||||||
"(foo) subgrid",
|
"(foo) subgrid",
|
||||||
|
@ -5854,13 +5866,9 @@ if (IsCSSPropertyPrefEnabled("layout.css.grid.enabled")) {
|
||||||
"subgrid repeat(1)",
|
"subgrid repeat(1)",
|
||||||
"subgrid repeat(1, )",
|
"subgrid repeat(1, )",
|
||||||
"subgrid repeat(2, (40px))",
|
"subgrid repeat(2, (40px))",
|
||||||
"subgrid repeat(2, foo)",
|
"subgrid repeat(2, foo)"
|
||||||
"40px calc(0px + rubbish)",
|
);
|
||||||
],
|
}
|
||||||
unbalanced_values: [
|
|
||||||
"(foo] 40px",
|
|
||||||
]
|
|
||||||
};
|
|
||||||
gCSSProperties["grid-template-rows"] = {
|
gCSSProperties["grid-template-rows"] = {
|
||||||
domProp: "gridTemplateRows",
|
domProp: "gridTemplateRows",
|
||||||
inherited: false,
|
inherited: false,
|
||||||
|
@ -5910,18 +5918,11 @@ if (IsCSSPropertyPrefEnabled("layout.css.grid.enabled")) {
|
||||||
"none / none",
|
"none / none",
|
||||||
],
|
],
|
||||||
other_values: [
|
other_values: [
|
||||||
"subgrid",
|
|
||||||
// <'grid-template-columns'> / <'grid-template-rows'>
|
// <'grid-template-columns'> / <'grid-template-rows'>
|
||||||
"40px / 100px",
|
"40px / 100px",
|
||||||
"[foo] 40px [bar] / [baz] 100px [fizz]",
|
"[foo] 40px [bar] / [baz] 100px [fizz]",
|
||||||
" none/100px",
|
" none/100px",
|
||||||
"40px/none",
|
"40px/none",
|
||||||
"subgrid/40px 20px",
|
|
||||||
"subgrid [foo] [] [bar baz] / 40px 20px",
|
|
||||||
"40px 20px/subgrid",
|
|
||||||
"40px 20px/subgrid [foo] [] repeat(3, [a] [b]) [bar baz]",
|
|
||||||
"subgrid/subgrid",
|
|
||||||
"subgrid [foo] [] [bar baz]/subgrid [foo] [] [bar baz]",
|
|
||||||
// [ <track-list> / ]? [ <line-names>? <string> <track-size>? <line-names>? ]+
|
// [ <track-list> / ]? [ <line-names>? <string> <track-size>? <line-names>? ]+
|
||||||
"'fizz'",
|
"'fizz'",
|
||||||
"[bar] 'fizz'",
|
"[bar] 'fizz'",
|
||||||
|
@ -5933,15 +5934,28 @@ if (IsCSSPropertyPrefEnabled("layout.css.grid.enabled")) {
|
||||||
"[foo] 40px / [bar] 'fizz' 100px [buzz] \n [a] '.' 200px [b]",
|
"[foo] 40px / [bar] 'fizz' 100px [buzz] \n [a] '.' 200px [b]",
|
||||||
],
|
],
|
||||||
invalid_values: [
|
invalid_values: [
|
||||||
"subgrid []",
|
|
||||||
"subgrid [] / 'fizz'",
|
|
||||||
"subgrid / 'fizz'",
|
|
||||||
"[foo] [bar] 40px / 100px",
|
"[foo] [bar] 40px / 100px",
|
||||||
"40px / [fizz] [buzz] 100px",
|
"40px / [fizz] [buzz] 100px",
|
||||||
"40px / [fizz] [buzz] 'foo'",
|
"40px / [fizz] [buzz] 'foo'",
|
||||||
"none / 'foo'"
|
"none / 'foo'"
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
if (isGridTemplateSubgridValueEnabled) {
|
||||||
|
gCSSProperties["grid-template"].other_values.push(
|
||||||
|
"subgrid",
|
||||||
|
"subgrid/40px 20px",
|
||||||
|
"subgrid [foo] [] [bar baz] / 40px 20px",
|
||||||
|
"40px 20px/subgrid",
|
||||||
|
"40px 20px/subgrid [foo] [] repeat(3, [a] [b]) [bar baz]",
|
||||||
|
"subgrid/subgrid",
|
||||||
|
"subgrid [foo] [] [bar baz]/subgrid [foo] [] [bar baz]"
|
||||||
|
);
|
||||||
|
gCSSProperties["grid-template"].invalid_values.push(
|
||||||
|
"subgrid []",
|
||||||
|
"subgrid [] / 'fizz'",
|
||||||
|
"subgrid / 'fizz'"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
gCSSProperties["grid"] = {
|
gCSSProperties["grid"] = {
|
||||||
domProp: "grid",
|
domProp: "grid",
|
||||||
|
|
|
@ -12,6 +12,9 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
var isGridTemplateSubgridValueEnabled =
|
||||||
|
SpecialPowers.getBoolPref("layout.css.grid-template-subgrid-value.enabled");
|
||||||
|
|
||||||
var initial_values = {
|
var initial_values = {
|
||||||
gridTemplateAreas: "none",
|
gridTemplateAreas: "none",
|
||||||
gridTemplateColumns: "none",
|
gridTemplateColumns: "none",
|
||||||
|
@ -139,37 +142,39 @@ var grid_template_test_cases = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
specified: "subgrid",
|
specified: "subgrid",
|
||||||
gridTemplateColumns: "subgrid",
|
gridTemplateColumns: isGridTemplateSubgridValueEnabled ? "subgrid" : "none",
|
||||||
gridTemplateRows: "subgrid",
|
gridTemplateRows: isGridTemplateSubgridValueEnabled ? "subgrid" : "none",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
specified: "subgrid / subgrid",
|
specified: "subgrid / subgrid",
|
||||||
gridTemplateColumns: "subgrid",
|
gridTemplateColumns: isGridTemplateSubgridValueEnabled ? "subgrid" : "none",
|
||||||
gridTemplateRows: "subgrid",
|
gridTemplateRows: isGridTemplateSubgridValueEnabled ? "subgrid" : "none",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
specified: "subgrid / subgrid [foo]",
|
specified: "subgrid / subgrid [foo]",
|
||||||
gridTemplateColumns: "subgrid",
|
gridTemplateColumns: isGridTemplateSubgridValueEnabled ? "subgrid" : "none",
|
||||||
gridTemplateRows: "subgrid [foo]",
|
gridTemplateRows: isGridTemplateSubgridValueEnabled ? "subgrid [foo]" : "none",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
specified: "subgrid / subgrid [foo] repeat(3, [] [a b] [c])",
|
specified: "subgrid / subgrid [foo] repeat(3, [] [a b] [c])",
|
||||||
gridTemplateColumns: "subgrid",
|
gridTemplateColumns: isGridTemplateSubgridValueEnabled ? "subgrid" : "none",
|
||||||
gridTemplateRows: "subgrid [foo] [] [a b] [c] [] [a b] [c] [] [a b] [c]",
|
gridTemplateRows: isGridTemplateSubgridValueEnabled ?
|
||||||
|
"subgrid [foo] [] [a b] [c] [] [a b] [c] [] [a b] [c]" : "none",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=978478#c1
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=978478#c1
|
||||||
// The number of repetitions is clamped to
|
// The number of repetitions is clamped to
|
||||||
// #define GRID_TEMPLATE_MAX_REPETITIONS 10000
|
// #define GRID_TEMPLATE_MAX_REPETITIONS 10000
|
||||||
specified: "subgrid / subgrid [foo] repeat(999999999, [a])",
|
specified: "subgrid / subgrid [foo] repeat(999999999, [a])",
|
||||||
gridTemplateColumns: "subgrid",
|
gridTemplateColumns: isGridTemplateSubgridValueEnabled ? "subgrid" : "none",
|
||||||
// Array(n + 1).join(s) is a hack for the non-standard s.repeat(n)
|
// Array(n + 1).join(s) is a hack for the non-standard s.repeat(n)
|
||||||
gridTemplateRows: "subgrid [foo]" + Array(10000 + 1).join(" [a]"),
|
gridTemplateRows: isGridTemplateSubgridValueEnabled ?
|
||||||
|
"subgrid [foo]" + Array(10000 + 1).join(" [a]") : "none",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
specified: "subgrid [] [foo]/ subgrid [bar",
|
specified: "subgrid [] [foo]/ subgrid [bar",
|
||||||
gridTemplateColumns: "subgrid [] [foo]",
|
gridTemplateColumns: isGridTemplateSubgridValueEnabled ? "subgrid [] [foo]" : "none",
|
||||||
gridTemplateRows: "subgrid [bar]",
|
gridTemplateRows: isGridTemplateSubgridValueEnabled ? "subgrid [bar]" : "none",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,9 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
var isGridTemplateSubgridValueEnabled =
|
||||||
|
SpecialPowers.getBoolPref("layout.css.grid-template-subgrid-value.enabled");
|
||||||
|
|
||||||
var initial_values = {
|
var initial_values = {
|
||||||
gridTemplateAreas: "none",
|
gridTemplateAreas: "none",
|
||||||
gridTemplateColumns: "none",
|
gridTemplateColumns: "none",
|
||||||
|
@ -37,7 +40,7 @@ var grid_template_test_cases = [
|
||||||
{
|
{
|
||||||
gridTemplateColumns: "40px",
|
gridTemplateColumns: "40px",
|
||||||
gridTemplateRows: "subgrid",
|
gridTemplateRows: "subgrid",
|
||||||
shorthand: "40px / subgrid",
|
shorthand: isGridTemplateSubgridValueEnabled ? "40px / subgrid" : "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
gridTemplateColumns: "[foo] 40px [bar]",
|
gridTemplateColumns: "[foo] 40px [bar]",
|
||||||
|
|
|
@ -2382,6 +2382,9 @@ pref("layout.css.grid.enabled", false);
|
||||||
pref("layout.css.grid.enabled", true);
|
pref("layout.css.grid.enabled", true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Is support for CSS "grid-template-{columns,rows}: subgrid X" enabled?
|
||||||
|
pref("layout.css.grid-template-subgrid-value.enabled", false);
|
||||||
|
|
||||||
// Is support for CSS contain enabled?
|
// Is support for CSS contain enabled?
|
||||||
pref("layout.css.contain.enabled", false);
|
pref("layout.css.contain.enabled", false);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче