aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXidorn Quan <me@upsuper.org>2018-04-12 10:27:43 +1000
committerEmilio Cobos Álvarez <emilio@crisal.io>2018-04-16 20:15:13 +0200
commit7403ec8b70846d07b44e1538a6086a60472efa2e (patch)
tree3691799db91da51d622e73733d353c5619357bd6
parent441f1cd231b2471039e2d08b951b32f3ca06d38e (diff)
downloadservo-7403ec8b70846d07b44e1538a6086a60472efa2e.tar.gz
servo-7403ec8b70846d07b44e1538a6086a60472efa2e.zip
style: Support prefs for aliases.
Bug: 1453521 Reviewed-by: heycam MozReview-Commit-ID: 8DAFmLDVYlR
-rw-r--r--components/style/properties/data.py35
-rw-r--r--components/style/properties/longhand/box.mako.rs42
-rw-r--r--components/style/properties/longhand/column.mako.rs2
-rw-r--r--components/style/properties/longhand/font.mako.rs4
-rw-r--r--components/style/properties/longhand/position.mako.rs8
-rw-r--r--components/style/properties/shorthand/border.mako.rs3
-rw-r--r--components/style/properties/shorthand/box.mako.rs6
7 files changed, 63 insertions, 37 deletions
diff --git a/components/style/properties/data.py b/components/style/properties/data.py
index 823f611638b..b7da420dd9e 100644
--- a/components/style/properties/data.py
+++ b/components/style/properties/data.py
@@ -145,6 +145,17 @@ def arg_to_bool(arg):
return arg == "True"
+def parse_property_aliases(alias_list):
+ result = []
+ if alias_list:
+ for alias in alias_list.split():
+ (name, _, pref) = alias.partition(":")
+ if name.startswith("-webkit-") and not pref:
+ pref = "layout.css.prefixes.webkit"
+ result.append((name, pref))
+ return result
+
+
class Longhand(object):
def __init__(self, style_struct, name, spec=None, animation_value_type=None, keyword=None,
predefined_type=None, servo_pref=None, gecko_pref=None,
@@ -178,8 +189,8 @@ class Longhand(object):
self.gecko_ffi_name = gecko_ffi_name or "m" + self.camel_case
self.cast_type = cast_type
self.logical = arg_to_bool(logical)
- self.alias = alias.split() if alias else []
- self.extra_prefixes = extra_prefixes.split() if extra_prefixes else []
+ self.alias = parse_property_aliases(alias)
+ self.extra_prefixes = parse_property_aliases(extra_prefixes)
self.boxed = arg_to_bool(boxed)
self.flags = flags.split() if flags else []
self.allowed_in_page_rule = arg_to_bool(allowed_in_page_rule)
@@ -322,8 +333,8 @@ class Shorthand(object):
self.sub_properties = sub_properties
assert enabled_in in ["", "ua", "chrome", "content"]
self.enabled_in = enabled_in
- self.alias = alias.split() if alias else []
- self.extra_prefixes = extra_prefixes.split() if extra_prefixes else []
+ self.alias = parse_property_aliases(alias)
+ self.extra_prefixes = parse_property_aliases(extra_prefixes)
self.allowed_in_page_rule = arg_to_bool(allowed_in_page_rule)
self.flags = flags.split() if flags else []
@@ -373,13 +384,13 @@ class Shorthand(object):
class Alias(object):
- def __init__(self, name, original):
+ def __init__(self, name, original, gecko_pref):
self.name = name
self.ident = to_rust_ident(name)
self.camel_case = to_camel_case(self.ident)
self.enabled_in = original.enabled_in
self.servo_pref = original.servo_pref
- self.gecko_pref = original.gecko_pref
+ self.gecko_pref = gecko_pref
self.allowed_in_page_rule = original.allowed_in_page_rule
self.allowed_in_keyframe_block = original.allowed_in_keyframe_block
@@ -462,8 +473,12 @@ class PropertiesData(object):
# FIXME Servo's DOM architecture doesn't support vendor-prefixed properties.
# See servo/servo#14941.
if self.product == "gecko":
- for prefix in property.extra_prefixes:
- property.alias.append('-%s-%s' % (prefix, property.name))
+ for (prefix, pref) in property.extra_prefixes:
+ # All webkit prefixed properties are currently under
+ # control of this pref in Gecko currently.
+ if prefix == "webkit" and not pref:
+ pref = "layout.css.prefixes.webkit"
+ property.alias.append(('-%s-%s' % (prefix, property.name), pref))
def declare_longhand(self, name, products="gecko servo", **kwargs):
products = products.split()
@@ -472,7 +487,7 @@ class PropertiesData(object):
longhand = Longhand(self.current_style_struct, name, **kwargs)
self.add_prefixed_aliases(longhand)
- longhand.alias = list(map(lambda x: Alias(x, longhand), longhand.alias))
+ longhand.alias = list(map(lambda (x, p): Alias(x, longhand, p), longhand.alias))
self.longhand_aliases += longhand.alias
self.current_style_struct.longhands.append(longhand)
self.longhands.append(longhand)
@@ -488,7 +503,7 @@ class PropertiesData(object):
sub_properties = [self.longhands_by_name[s] for s in sub_properties]
shorthand = Shorthand(name, sub_properties, *args, **kwargs)
self.add_prefixed_aliases(shorthand)
- shorthand.alias = list(map(lambda x: Alias(x, shorthand), shorthand.alias))
+ shorthand.alias = list(map(lambda (x, p): Alias(x, shorthand, p), shorthand.alias))
self.shorthand_aliases += shorthand.alias
self.shorthands.append(shorthand)
return shorthand
diff --git a/components/style/properties/longhand/box.mako.rs b/components/style/properties/longhand/box.mako.rs
index ddd0bd67baf..f671144b126 100644
--- a/components/style/properties/longhand/box.mako.rs
+++ b/components/style/properties/longhand/box.mako.rs
@@ -226,6 +226,8 @@ ${helpers.single_keyword("overflow-x", "visible hidden scroll auto",
pub use super::overflow_x::{SpecifiedValue, parse, get_initial_value, computed_value};
</%helpers:longhand>
+<% transition_extra_prefixes = "moz:layout.css.prefixes.transitions webkit" %>
+
${helpers.predefined_type("transition-duration",
"Time",
"computed::Time::zero()",
@@ -234,7 +236,7 @@ ${helpers.predefined_type("transition-duration",
vector=True,
need_index=True,
animation_value_type="none",
- extra_prefixes="moz webkit",
+ extra_prefixes=transition_extra_prefixes,
spec="https://drafts.csswg.org/css-transitions/#propdef-transition-duration")}
${helpers.predefined_type("transition-timing-function",
@@ -244,7 +246,7 @@ ${helpers.predefined_type("transition-timing-function",
vector=True,
need_index=True,
animation_value_type="none",
- extra_prefixes="moz webkit",
+ extra_prefixes=transition_extra_prefixes,
spec="https://drafts.csswg.org/css-transitions/#propdef-transition-timing-function")}
${helpers.predefined_type(
@@ -257,7 +259,7 @@ ${helpers.predefined_type(
need_index=True,
needs_context=False,
animation_value_type="none",
- extra_prefixes="moz webkit",
+ extra_prefixes=transition_extra_prefixes,
spec="https://drafts.csswg.org/css-transitions/#propdef-transition-property",
)}
@@ -268,10 +270,12 @@ ${helpers.predefined_type("transition-delay",
vector=True,
need_index=True,
animation_value_type="none",
- extra_prefixes="moz webkit",
+ extra_prefixes=transition_extra_prefixes,
spec="https://drafts.csswg.org/css-transitions/#propdef-transition-delay")}
+<% animation_extra_prefixes = "moz:layout.css.prefixes.animations webkit" %>
+
${helpers.predefined_type(
"animation-name",
"AnimationName",
@@ -280,7 +284,7 @@ ${helpers.predefined_type(
vector=True,
need_index=True,
animation_value_type="none",
- extra_prefixes="moz webkit",
+ extra_prefixes=animation_extra_prefixes,
allowed_in_keyframe_block=False,
spec="https://drafts.csswg.org/css-animations/#propdef-animation-name",
)}
@@ -293,7 +297,7 @@ ${helpers.predefined_type("animation-duration",
vector=True,
need_index=True,
animation_value_type="none",
- extra_prefixes="moz webkit",
+ extra_prefixes=animation_extra_prefixes,
spec="https://drafts.csswg.org/css-transitions/#propdef-transition-duration")}
// animation-timing-function is the exception to the rule for allowed_in_keyframe_block:
@@ -305,7 +309,7 @@ ${helpers.predefined_type("animation-timing-function",
vector=True,
need_index=True,
animation_value_type="none",
- extra_prefixes="moz webkit",
+ extra_prefixes=animation_extra_prefixes,
allowed_in_keyframe_block=True,
spec="https://drafts.csswg.org/css-transitions/#propdef-animation-timing-function")}
@@ -317,7 +321,7 @@ ${helpers.predefined_type(
vector=True,
need_index=True,
animation_value_type="none",
- extra_prefixes="moz webkit",
+ extra_prefixes=animation_extra_prefixes,
allowed_in_keyframe_block=False,
spec="https://drafts.csswg.org/css-animations/#propdef-animation-iteration-count",
)}
@@ -330,7 +334,7 @@ ${helpers.single_keyword("animation-direction",
vector=True,
gecko_enum_prefix="PlaybackDirection",
custom_consts=animation_direction_custom_consts,
- extra_prefixes="moz webkit",
+ extra_prefixes=animation_extra_prefixes,
spec="https://drafts.csswg.org/css-animations/#propdef-animation-direction",
allowed_in_keyframe_block=False)}
@@ -339,7 +343,7 @@ ${helpers.single_keyword("animation-play-state",
need_index=True,
animation_value_type="none",
vector=True,
- extra_prefixes="moz webkit",
+ extra_prefixes=animation_extra_prefixes,
spec="https://drafts.csswg.org/css-animations/#propdef-animation-play-state",
allowed_in_keyframe_block=False)}
@@ -349,7 +353,7 @@ ${helpers.single_keyword("animation-fill-mode",
animation_value_type="none",
vector=True,
gecko_enum_prefix="FillMode",
- extra_prefixes="moz webkit",
+ extra_prefixes=animation_extra_prefixes,
spec="https://drafts.csswg.org/css-animations/#propdef-animation-fill-mode",
allowed_in_keyframe_block=False)}
@@ -360,7 +364,7 @@ ${helpers.predefined_type("animation-delay",
vector=True,
need_index=True,
animation_value_type="none",
- extra_prefixes="moz webkit",
+ extra_prefixes=animation_extra_prefixes,
spec="https://drafts.csswg.org/css-animations/#propdef-animation-delay",
allowed_in_keyframe_block=False)}
@@ -397,9 +401,11 @@ ${helpers.predefined_type(
allow_empty="NotInitial"
)}
+<% transform_extra_prefixes = "moz:layout.css.prefixes.transforms webkit" %>
+
${helpers.predefined_type("transform", "Transform",
"generics::transform::Transform::none()",
- extra_prefixes="webkit moz",
+ extra_prefixes=transform_extra_prefixes,
animation_value_type="ComputedValue",
gecko_ffi_name="mSpecifiedTransform",
flags="CREATES_STACKING_CONTEXT FIXPOS_CB",
@@ -517,7 +523,7 @@ ${helpers.predefined_type(
"computed::Perspective::none()",
gecko_ffi_name="mChildPerspective",
spec="https://drafts.csswg.org/css-transforms/#perspective",
- extra_prefixes="moz webkit",
+ extra_prefixes=transform_extra_prefixes,
flags="CREATES_STACKING_CONTEXT FIXPOS_CB",
animation_value_type="AnimatedPerspective",
servo_restyle_damage = "reflow_out_of_flow",
@@ -527,7 +533,7 @@ ${helpers.predefined_type("perspective-origin",
"position::Position",
"computed::position::Position::center()",
boxed=True,
- extra_prefixes="moz webkit",
+ extra_prefixes=transform_extra_prefixes,
spec="https://drafts.csswg.org/css-transforms-2/#perspective-origin-property",
animation_value_type="ComputedValue",
servo_restyle_damage = "reflow_out_of_flow")}
@@ -535,7 +541,7 @@ ${helpers.predefined_type("perspective-origin",
${helpers.single_keyword("backface-visibility",
"visible hidden",
spec="https://drafts.csswg.org/css-transforms/#backface-visibility-property",
- extra_prefixes="moz webkit",
+ extra_prefixes=transform_extra_prefixes,
animation_value_type="discrete")}
${helpers.single_keyword("transform-box",
@@ -553,7 +559,7 @@ ${helpers.predefined_type(
"computed::TransformStyle::" + ("Auto" if product == "servo" else "Flat"),
spec="https://drafts.csswg.org/css-transforms-2/#transform-style-property",
needs_context=False,
- extra_prefixes="moz webkit",
+ extra_prefixes=transform_extra_prefixes,
flags="CREATES_STACKING_CONTEXT FIXPOS_CB",
animation_value_type="discrete",
servo_restyle_damage = "reflow_out_of_flow",
@@ -563,7 +569,7 @@ ${helpers.predefined_type("transform-origin",
"TransformOrigin",
"computed::TransformOrigin::initial_value()",
animation_value_type="ComputedValue",
- extra_prefixes="moz webkit",
+ extra_prefixes=transform_extra_prefixes,
gecko_ffi_name="mTransformOrigin",
boxed=True,
spec="https://drafts.csswg.org/css-transforms/#transform-origin-property",
diff --git a/components/style/properties/longhand/column.mako.rs b/components/style/properties/longhand/column.mako.rs
index 5ed8164e7eb..3b2a3ec38ed 100644
--- a/components/style/properties/longhand/column.mako.rs
+++ b/components/style/properties/longhand/column.mako.rs
@@ -73,7 +73,7 @@ ${helpers.single_keyword("column-span", "none all",
products="gecko", animation_value_type="discrete",
gecko_pref="layout.css.column-span.enabled",
spec="https://drafts.csswg.org/css-multicol/#propdef-column-span",
- extra_prefixes="moz")}
+ extra_prefixes="moz:layout.css.column-span.enabled")}
${helpers.single_keyword("column-rule-style",
"none hidden dotted dashed solid double groove ridge inset outset",
diff --git a/components/style/properties/longhand/font.mako.rs b/components/style/properties/longhand/font.mako.rs
index 50a12c9efdd..0d246d3b358 100644
--- a/components/style/properties/longhand/font.mako.rs
+++ b/components/style/properties/longhand/font.mako.rs
@@ -150,7 +150,7 @@ ${helpers.predefined_type("font-feature-settings",
products="gecko",
initial_value="computed::FontFeatureSettings::normal()",
initial_specified_value="specified::FontFeatureSettings::normal()",
- extra_prefixes="moz",
+ extra_prefixes="moz:layout.css.prefixes.font-features",
animation_value_type="discrete",
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
spec="https://drafts.csswg.org/css-fonts/#propdef-font-feature-settings")}
@@ -178,7 +178,7 @@ ${helpers.predefined_type("font-language-override",
initial_value="computed::FontLanguageOverride::zero()",
initial_specified_value="specified::FontLanguageOverride::normal()",
animation_value_type="discrete",
- extra_prefixes="moz",
+ extra_prefixes="moz:layout.css.prefixes.font-features",
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER",
spec="https://drafts.csswg.org/css-fonts-3/#propdef-font-language-override")}
diff --git a/components/style/properties/longhand/position.mako.rs b/components/style/properties/longhand/position.mako.rs
index 2afa38499f8..5d64159654c 100644
--- a/components/style/properties/longhand/position.mako.rs
+++ b/components/style/properties/longhand/position.mako.rs
@@ -57,12 +57,14 @@ ${helpers.predefined_type(
// Flex container properties
${helpers.single_keyword("flex-direction", "row row-reverse column column-reverse",
spec="https://drafts.csswg.org/css-flexbox/#flex-direction-property",
- extra_prefixes="webkit", animation_value_type="discrete",
+ extra_prefixes="webkit",
+ animation_value_type="discrete",
servo_restyle_damage = "reflow")}
${helpers.single_keyword("flex-wrap", "nowrap wrap wrap-reverse",
spec="https://drafts.csswg.org/css-flexbox/#flex-wrap-property",
- extra_prefixes="webkit", animation_value_type="discrete",
+ extra_prefixes="webkit",
+ animation_value_type="discrete",
servo_restyle_damage = "reflow")}
% if product == "servo":
@@ -267,7 +269,7 @@ ${helpers.predefined_type(
${helpers.single_keyword("box-sizing",
"content-box border-box",
- extra_prefixes="moz webkit",
+ extra_prefixes="moz:layout.css.prefixes.box-sizing webkit",
spec="https://drafts.csswg.org/css-ui/#propdef-box-sizing",
gecko_enum_prefix="StyleBoxSizing",
custom_consts={ "content-box": "Content", "border-box": "Border" },
diff --git a/components/style/properties/shorthand/border.mako.rs b/components/style/properties/shorthand/border.mako.rs
index da3f8abbf33..2a675a2c523 100644
--- a/components/style/properties/shorthand/border.mako.rs
+++ b/components/style/properties/shorthand/border.mako.rs
@@ -246,7 +246,8 @@ pub fn parse_border<'i, 't>(
<%helpers:shorthand name="border-image" sub_properties="border-image-outset
border-image-repeat border-image-slice border-image-source border-image-width"
- extra_prefixes="moz webkit" spec="https://drafts.csswg.org/css-backgrounds-3/#border-image">
+ extra_prefixes="moz:layout.css.prefixes.border-image webkit"
+ spec="https://drafts.csswg.org/css-backgrounds-3/#border-image">
use properties::longhands::{border_image_outset, border_image_repeat, border_image_slice};
use properties::longhands::{border_image_source, border_image_width};
diff --git a/components/style/properties/shorthand/box.mako.rs b/components/style/properties/shorthand/box.mako.rs
index 1bf868b1bd5..1d3bab6eaa4 100644
--- a/components/style/properties/shorthand/box.mako.rs
+++ b/components/style/properties/shorthand/box.mako.rs
@@ -117,7 +117,8 @@ macro_rules! try_parse_one {
};
}
-<%helpers:shorthand name="transition" extra_prefixes="moz webkit"
+<%helpers:shorthand name="transition"
+ extra_prefixes="moz:layout.css.prefixes.transitions webkit"
sub_properties="transition-property transition-duration
transition-timing-function
transition-delay"
@@ -257,7 +258,8 @@ macro_rules! try_parse_one {
}
</%helpers:shorthand>
-<%helpers:shorthand name="animation" extra_prefixes="moz webkit"
+<%helpers:shorthand name="animation"
+ extra_prefixes="moz:layout.css.prefixes.animations webkit"
sub_properties="animation-name animation-duration
animation-timing-function animation-delay
animation-iteration-count animation-direction