diff --git a/accessible/windows/msaa/LazyInstantiator.cpp b/accessible/windows/msaa/LazyInstantiator.cpp index 72368baebdfe..608812ebcb1f 100644 --- a/accessible/windows/msaa/LazyInstantiator.cpp +++ b/accessible/windows/msaa/LazyInstantiator.cpp @@ -195,7 +195,7 @@ static const DllBlockInfo gBlockedInprocDlls[] = { * This is the blocklist for known "bad" remote clients that instantiate a11y. */ static const char* gBlockedRemoteClients[] = { - "tbnnotifier.exe" // Ask.com Toolbar, bug 1421018 + "tbnotifier.exe" // Ask.com Toolbar, bug 1453876 }; /** diff --git a/editor/libeditor/EditorBase.cpp b/editor/libeditor/EditorBase.cpp index a93850579968..2b44aa2a5fab 100644 --- a/editor/libeditor/EditorBase.cpp +++ b/editor/libeditor/EditorBase.cpp @@ -4397,7 +4397,9 @@ EditorBase::DeleteSelectionAndPrepareToCreateNode() { RefPtr selection = GetSelection(); NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER); - MOZ_ASSERT(selection->GetAnchorFocusRange()); + if (NS_WARN_IF(!selection->GetAnchorFocusRange())) { + return NS_OK; + } if (!selection->GetAnchorFocusRange()->Collapsed()) { nsresult rv = DeleteSelection(nsIEditor::eNone, nsIEditor::eStrip); diff --git a/editor/libeditor/HTMLEditRules.cpp b/editor/libeditor/HTMLEditRules.cpp index 2d4a668034bc..98f96fbec9dd 100644 --- a/editor/libeditor/HTMLEditRules.cpp +++ b/editor/libeditor/HTMLEditRules.cpp @@ -7784,8 +7784,7 @@ HTMLEditRules::JoinNodesSmart(nsIContent& aNodeLeft, } } - EditorDOMPoint ret; - ret.SetToEndOf(&aNodeRight); + EditorDOMPoint ret(&aNodeRight, aNodeLeft.Length()); // Separate join rules for differing blocks if (HTMLEditUtils::IsList(&aNodeLeft) || aNodeLeft.GetAsText()) { diff --git a/editor/libeditor/tests/mochitest.ini b/editor/libeditor/tests/mochitest.ini index efa847a31a4f..f10b316b7169 100644 --- a/editor/libeditor/tests/mochitest.ini +++ b/editor/libeditor/tests/mochitest.ini @@ -250,6 +250,7 @@ skip-if = toolkit == 'android' # bug 1315898 [test_bug1355792.html] [test_bug1358025.html] [test_bug1361008.html] +[test_bug1361052.html] [test_bug1368544.html] [test_bug1385905.html] [test_bug1390562.html] diff --git a/editor/libeditor/tests/test_bug1361052.html b/editor/libeditor/tests/test_bug1361052.html new file mode 100644 index 000000000000..a49629cbce76 --- /dev/null +++ b/editor/libeditor/tests/test_bug1361052.html @@ -0,0 +1,50 @@ + + + + Test for Bug 1361052 + + + + + +Mozilla Bug 1361052 +

+ +
+
+
+ + diff --git a/servo/components/style/properties/data.py b/servo/components/style/properties/data.py index 823f611638b0..b7da420dd9ec 100644 --- a/servo/components/style/properties/data.py +++ b/servo/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/servo/components/style/properties/longhand/box.mako.rs b/servo/components/style/properties/longhand/box.mako.rs index ddd0bd67baf8..f671144b1264 100644 --- a/servo/components/style/properties/longhand/box.mako.rs +++ b/servo/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}; +<% 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/servo/components/style/properties/longhand/column.mako.rs b/servo/components/style/properties/longhand/column.mako.rs index 5ed8164e7ebc..3b2a3ec38ed2 100644 --- a/servo/components/style/properties/longhand/column.mako.rs +++ b/servo/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/servo/components/style/properties/longhand/font.mako.rs b/servo/components/style/properties/longhand/font.mako.rs index 50a12c9efdda..0d246d3b3587 100644 --- a/servo/components/style/properties/longhand/font.mako.rs +++ b/servo/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/servo/components/style/properties/longhand/position.mako.rs b/servo/components/style/properties/longhand/position.mako.rs index 2afa38499f8e..5d64159654c8 100644 --- a/servo/components/style/properties/longhand/position.mako.rs +++ b/servo/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/servo/components/style/properties/shorthand/border.mako.rs b/servo/components/style/properties/shorthand/border.mako.rs index da3f8abbf332..2a675a2c523e 100644 --- a/servo/components/style/properties/shorthand/border.mako.rs +++ b/servo/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/servo/components/style/properties/shorthand/box.mako.rs b/servo/components/style/properties/shorthand/box.mako.rs index 1bf868b1bd57..1d3bab6eaa41 100644 --- a/servo/components/style/properties/shorthand/box.mako.rs +++ b/servo/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 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 diff --git a/testing/web-platform/mozilla/meta/MANIFEST.json b/testing/web-platform/mozilla/meta/MANIFEST.json index a3e0d7512e12..7a915250d5ed 100644 --- a/testing/web-platform/mozilla/meta/MANIFEST.json +++ b/testing/web-platform/mozilla/meta/MANIFEST.json @@ -475,6 +475,12 @@ {} ] ], + "editor/joining_nodes.html": [ + [ + "/_mozilla/editor/joining_nodes.html", + {} + ] + ], "fetch/api/redirect/redirect-referrer.https.html": [ [ "/_mozilla/fetch/api/redirect/redirect-referrer.https.html", @@ -1032,6 +1038,10 @@ "06948dbf72160a7de5a0baaa2f6cf1bb54fbeb8f", "testharness" ], + "editor/joining_nodes.html": [ + "048cf7d99acdecb927f97c4554c4d04ca8b15a8a", + "testharness" + ], "fetch/api/redirect/redirect-referrer-mixed-content.js": [ "f9d7ec9cf9fa8c847e45664b05482e3f8c191385", "support" diff --git a/testing/web-platform/mozilla/meta/editor/joining_nodes.html.ini b/testing/web-platform/mozilla/meta/editor/joining_nodes.html.ini new file mode 100644 index 000000000000..8a52821e8068 --- /dev/null +++ b/testing/web-platform/mozilla/meta/editor/joining_nodes.html.ini @@ -0,0 +1,86 @@ +[joining_nodes.html] + type: testharness + [Joining
and
nodes, delete command] + expected: FAIL + + [Joining
and
nodes, forwarddelete command] + expected: FAIL + + [Joining
and
nodes, delete command] + expected: FAIL + + [Joining
and
nodes, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + + [Joining

and

elements, delete command] + expected: FAIL + + [Joining

and

elements, forwarddelete command] + expected: FAIL + diff --git a/testing/web-platform/mozilla/tests/editor/joining_nodes.html b/testing/web-platform/mozilla/tests/editor/joining_nodes.html new file mode 100644 index 000000000000..2dd3b68ca58b --- /dev/null +++ b/testing/web-platform/mozilla/tests/editor/joining_nodes.html @@ -0,0 +1,256 @@ + + + + +Joining nodes with delete/forwardDelete command + + + + + + +