Commit graph

7157 commits

Author SHA1 Message Date
Emilio Cobos Álvarez
fd73f1665a style: Move BorderStyle to border.rs.
Differential Revision: https://phabricator.services.mozilla.com/D12858
2018-12-02 14:17:26 -05:00
Emilio Cobos Álvarez
374249fa54 style: Implement page-break-{before,after} as legacy shorthands for {before,after}.
This is all the style-system work needed for this.

This implements the concept of legacy shorthands, teaches tests to understand
it, and adds a few more tests for these properties in particular.

The WPT even caught a few WebKit / Blink bugs:

  https://bugs.chromium.org/p/chromium/issues/detail?id=906336
  https://bugs.webkit.org/show_bug.cgi?id=191803

This doesn't change the layout behavior for page-break-before: always, since
it'd stop breaking in multicol and such. Similarly, break-before / break-after:
column and page still behave the same, I'll file followups for those given
comment 22.

Differential Revision: https://phabricator.services.mozilla.com/D12211
2018-12-02 14:17:26 -05:00
Emilio Cobos Álvarez
a427e4f763 style: Introduce the concept of legacy shorthands.
We need this because there's a weird mapping between these properties' values
('always' maps to 'page').

See https://drafts.csswg.org/css-cascade-4/#legacy-shorthand.

Differential Revision: https://phabricator.services.mozilla.com/D12213
2018-12-02 14:17:25 -05:00
Emilio Cobos Álvarez
d0ac1b06d1 style: Introduce break-inside, and alias page-break-inside to it.
This property has no weird value mapping, so we can just do this.

Differential Revision: https://phabricator.services.mozilla.com/D12212
2018-12-02 14:17:24 -05:00
Shubham Kumaram
67414f4002 style: Change Text Rendering constants to enum classes in nsStyleConsts.h.
Differential Revision: https://phabricator.services.mozilla.com/D12839
2018-12-02 14:17:23 -05:00
Emilio Cobos Álvarez
dca315e648 style: Prevent exponential blowup of custom properties.
Put a hard cap on the value length instead of counting substitutions, because it
works best, see the comment.

Differential Revision: https://phabricator.services.mozilla.com/D13352
2018-12-02 14:17:22 -05:00
Hiroyuki Ikezoe
f6b6825c31 style: Run background-color animations on the compositor.
Changes for nsIDOMWindowUtils.getOMTAValue is in the next commit with come test
cases.

Differential Revision: https://phabricator.services.mozilla.com/D13001
2018-12-02 14:17:21 -05:00
Emilio Cobos Álvarez
8bed8ae122 style: Remove the display: -moz-box overrides display: -webkit-box hack.
display: -moz-box is no longer exposed to content so this is not necessary.

See bug 1407701 for context.

Differential Revision: https://phabricator.services.mozilla.com/D12961
2018-12-02 14:17:21 -05:00
Emilio Cobos Álvarez
2e388e860d style: Align user-select behavior more with other UAs.
There's a few subtle behavior changes here, which I'll try to break down in the
commit message.

The biggest one is the EditableDescendantCount stuff going away. This
was added in bug 1181130, to prevent clicking on the non-editable div from
selecting the editable div inside. This is problematic for multiple reasons:

 * First, I don't think non-editable regions of an editable element should
   be user-select: all.

 * Second, it just doesn't work in Shadow DOM (the editable descendant count is
   not kept up-to-date when not in the uncomposed doc), so nested
   contenteditables behave differently inside vs. outside a Shadow Tree.

 * Third, I think it's user hostile to just entirely disable selection if you
   have a contenteditable descendant as a child of a user-select: all thing.

   WebKit behaves like this patch in the following test-case (though not Blink):

     https://crisal.io/tmp/user-select-all-contenteditable-descendant.html

   Edge doesn't seem to support user-select: all at all (no pun intended).

   But we don't allow to select anything at all which looks wrong.

 * Fourth, it's not tested at all (which explains how we broke it in Shadow DOM
   and not even notice...).

In any case I've verified that this doesn't regress the editor from that bug. If
this regresses anything we can fix it as outlined in the first bullet point
above, which should also make us more compatible with other UAs in that
test-case.

The other change is `all` not overriding everything else. So, something like:

  <div style="-webkit-user-select: all">All <div style="-webkit-user-select: none">None</div></div>

Totally ignores the -webkit-user-select: none declaration in Firefox before this
change. This doesn't match any other UA nor the spec, and this patch aligns us
with WebKit / Blink.

This in turn makes us not need -moz-text anymore, whose only purpose was to
avoid this.

This also fixes a variety of bugs uncovered by the previous changes, like the
SetIgnoreUserModify(false) call in editor being completely useless, since
presShell->SetCaretEnabled ended in nsCaret::SetVisible, which overrode it.

This in turn uncovered even more bugs, from bugs in the caret painting code,
like not checking -moz-user-modify on the right frame if you're the last frame
of a line, to even funnier bits where before this patch you show the caret but
can't write at all...

In any case, the new setup I came up with is that when you're editing (the
selection is focused on an editable node) moving the caret forces it to end up
in an editable node, thus jumping over non-editable ones.

This has the nice effect of not completely disabling selection of
-moz-user-select: all elements that have editable descendants (which was a very
ad-hoc hack for bug 1181130, and somewhat broken per the above), and also
not needing the -moz-user-select: all for non-editable bits in contenteditable.css
at all.

This also fixes issues with br-skipping like not being able to insert content in
the following test-case:

  <div contenteditable="true"><span contenteditable="false">xyz </span><br>editable</div>

If you start moving to the left from the second line, for example.

I think this yields way better behavior in all the relevant test-cases from bug
1181130 / bug 1109968 / bug 1132768, shouldn't cause any regression, and the
complexity is significantly reduced in some places.

There's still some other broken bits that this patch doesn't fix, but I'll file
follow-ups for those.

Differential Revision: https://phabricator.services.mozilla.com/D12687
2018-12-02 14:17:20 -05:00
Hiroyuki Ikezoe
2639916d7d style: Set the important rule change flag when a newly important rule is inserted.
Without this change an assertion checking IsInStyleRefresh() in
EffectCompositor::PostRestyleForAnimation will be hit when we call
FindAnimationsForCompositor from RestyleManager::DoProcessPendingRestyles
that will be introduced in a subsequent commit in this series.

I wrote a crash test which causes an assertion in KeyframeEffect::CanThrottle()
without the subsequent commit, but we need more work in display item stuff to
make the assertion won't happen (bug 1508466).

Differential Revision: https://phabricator.services.mozilla.com/D12368
2018-12-02 14:17:20 -05:00
Mats Palmgren
2ebad8de36 style: Add -webkit-appearance:textarea and make that the default for <textarea> for compatibility with other UAs.
Bug: 1507905
Reviewed-by: jwatt
2018-12-02 14:17:19 -05:00
Boris Chiou
4f7a3ae533 style: Add comments for the calculation of Procedure::Add on Scale and transform list.
Add more comments to let people know the intention of the special case.

Differential Revision: https://phabricator.services.mozilla.com/D12070
2018-12-02 14:17:18 -05:00
Boris Chiou
c81e1d82d5 style: Expand the mako code of Matrix3D and move them into transform.rs.
Although the methods of Matrix3D in animated_properties.mako.rs could be
simplified by mako, it's a little bit hard to read because they are far
from the usage and definition. Therefore, we move them to the definition of
computed::Matrix3D and expand the mako.

Differential Revision: https://phabricator.services.mozilla.com/D11961
2018-12-02 14:17:18 -05:00
Boris Chiou
7f3b23126a style: Implement ComputeSquaredDistance for individual transforms.
We manually implement ComputeSquaredDistance for Translate, Rotate, and
Scale because we have to handle mismatch cases, and actually we don't
need to implement it for specified types.

Differential Revision: https://phabricator.services.mozilla.com/D11935
2018-12-02 14:17:17 -05:00
Boris Chiou
e83f5629ff style: Move the animation code of transform into a different file.
Basically, most of the animation code of transform don't need mako, so
we could move them into values/animated/transform.rs.

However, we still use mako to generate some code to make the methods of
Matrix3D simpler, so I still leave them in animated_properties.mako.rs.

Differential Revision: https://phabricator.services.mozilla.com/D11934
2018-12-02 14:17:17 -05:00
Boris Chiou
8e47e7f134 style: Factor the mako code out from transform functions.
I'm trying to put all the mako code together, so we could move transform
code into a different file.

Differential Revision: https://phabricator.services.mozilla.com/D11933
2018-12-02 14:17:10 -05:00
Kristen Wright
149815ab3b style: Conversion from NS_STYLE_BORDER_STYLE_* macro to enum class.
Converted NS_STYLE_BORDER_STYLE_* consts to enum class. Updated corresponding
values to enum class. reduced BCCornerInfo struct values to fit StyleBorderStyle
values inside struct. Added defaults to switches that do not fully cover all
instances of StyleBorderStyle.

Bug: 1460439
Reviewed-by: emilio
2018-12-02 08:44:44 -06:00
Bastien Orivel
e94de4e1bd Update syn and related dependencies 2018-11-30 17:48:41 +01:00
bors-servo
482923cec2
Auto merge of #22221 - Eijebong:random-depup, r=nox
Update dependencies

Those are all easy and unrelated dependency updates, hence the single PR

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22221)
<!-- Reviewable:end -->
2018-11-27 11:27:54 -05:00
Jan Andre Ikenmeyer
1d6fe65401
Update MPL license to https (part 4) 2018-11-19 14:47:27 +01:00
Bastien Orivel
053070e63b Update encoding_rs 2018-11-19 12:06:32 +01:00
Bastien Orivel
5fdcd8a850 Update bindgen 2018-11-19 12:06:28 +01:00
Bastien Orivel
9a7eeb349a Update crossbeam-channel to 0.3 2018-11-18 19:33:19 +01:00
Emilio Cobos Álvarez
06fe0a1fc0
style: Fix formatting. 2018-11-17 09:56:05 +01:00
Alex Gaynor
cd75cd6a86
style: fixed an unused import warning.
Differential Revision: https://phabricator.services.mozilla.com/D12028
2018-11-17 09:56:05 +01:00
Emilio Cobos Álvarez
ebb57eff22
style: Add a mechanism to serialize shorthands for getComputedStyle().
This implements the mechanism reusing the animation machinery for now, so it
asserts in a few cases that this wouldn't handle correctly.

For shorthands that have colors and other bits we'd need a more sophisticated
mechanism with a bit more code (that resolves colors and such), but it'd look
something like this regardless, and we should have this in any case.

Differential Revision: https://phabricator.services.mozilla.com/D11944
2018-11-17 09:56:05 +01:00
Emilio Cobos Álvarez
60331f01d0
style: Make the serialization of the mask shorthand more compact.
This helps to preserve the old longhand form when possible (mask used to be a
longhand), which will be relevant when we serialize this for the computed
value.

Differential Revision: https://phabricator.services.mozilla.com/D11943
2018-11-17 09:56:04 +01:00
Emilio Cobos Álvarez
0e7adcf18a
style: Simplify background-repeat.
This way we always serialize in the shortest form, and take less space.

This is useful because when serializing uncomputed values we'd like to compare
to the initial value to avoid serializing parts of a shorthand, but with the
existing implementation we would generate always a second keyword, which means
that we'll never match it.

This also matches Chrome and WebKit, incidentally, so I'm pretty confident the
behavior change when serializing specified style is web-compatible.

Differential Revision: https://phabricator.services.mozilla.com/D11941
2018-11-17 09:56:04 +01:00
Emilio Cobos Álvarez
a5f0eb9205
style: Also move page-break-inside outside of mako.
Differential Revision: https://phabricator.services.mozilla.com/D11876
2018-11-17 09:56:04 +01:00
Emilio Cobos Álvarez
d9de68ad6a
style: Move the page-break-{before,after} properties to not use mako.
And respect the computed value of `left` / `right` / etc.

Differential Revision: https://phabricator.services.mozilla.com/D11872
2018-11-17 09:56:03 +01:00
Timothy Guan-tin Chien
9f28242def
Remove dom.webcomponents.customelements.enabled pref.
This patch removes the following functions:

* nsContentUtils::IsCustomElementsEnabled()
* CustomElementRegistry::IsCustomElementEnabled(JSContext* aCx, JSObject* aObject)
* CustomElementRegistry::IsCustomElementEnabled(nsIDocument* aDoc)

and all references of the pref.

Depends on D11183

Differential Revision: https://phabricator.services.mozilla.com/D11249
2018-11-17 09:56:03 +01:00
Timothy Guan-tin Chien
3977854ee2
Remove dom.webcomponents.shadowdom.enabled.
This patch removes the dom.webcomponents.shadowdom.enabled pref and all its
references, including the following functions:

* nsContentUtils::IsShadowDOMEnabled()
* nsIDocument::IsShadowDOMEnabled()
* nsDocument::IsShadowDOMEnabled(JSContext* aCx, JSObject* aGlobal)
* nsDocument::IsShadowDOMEnabled(const nsINode* aNode)
* nsTextNode::IsShadowDOMEnabled(JSContext* aCx, JSObject* aObject)

This function is renamed and updated to nsDocument::IsCallerChromeOrAddon():

* nsDocument::IsShadowDOMEnabledAndCallerIsChromeOrAddon(JSContext* aCx, JSObject* aObject)

I didn't change the tests that load Shadow DOM tests in an iframe, in the interest of keeping hg annotation history.

Differential Revision: https://phabricator.services.mozilla.com/D11183
2018-11-17 09:56:02 +01:00
Cameron McCormack
dad9ad6b31
style: Store MediaFeatureDescription references as an index into the MEDIA_FEATURES array.
The current use of a static reference is incompatible with sharing style sheet data
across processes.

Differential Revision: https://phabricator.services.mozilla.com/D11845
2018-11-17 09:56:02 +01:00
Cameron McCormack
1576dd4c5b
style: Store variable references with a boxed slice rather than a PrecomputedHashSet.
Once we've parsed the variable references, there is no need to keep an entire HashSet
object around, as all we do is iterate over the values.

Differential Revision: https://phabricator.services.mozilla.com/D11735
2018-11-17 09:56:01 +01:00
Boris Chiou
41d2f7f3a2
style: Support keywords [x|y|z] on rotate.
Update the parser and the serialization to support the keywords, [x|y|z].

Differential Revision: https://phabricator.services.mozilla.com/D11531
2018-11-17 09:56:01 +01:00
Emilio Cobos Álvarez
f486ef7e47
style: Add an atom bit to know whether we're ascii lowercase.
And thus massively speed up ascii-case-insensitive atom comparisons when both
atoms are lowercase (which is the common case by far).

This removes almost all the slow selector-matching in this page, and it seems
an easier fix than storing the lowercased version of all class-names in quirks
mode in elements and selectors...

Differential Revision: https://phabricator.services.mozilla.com/D10945
2018-11-17 09:56:01 +01:00
Boris Chiou
d8bd29292e
style: Parse any order of number and angle for Rotate.
Rotate accepts rotate axis and angle in any order
(i.e. <number>{3} <angle> or <angle> <number>{3}), so we rewrite the
parser.

Differential Revision: https://phabricator.services.mozilla.com/D11417
2018-11-17 09:56:00 +01:00
Boris Chiou
0b9ecbccfe
style: Rewrite the interpolation of Rotate to return correct type.
The original implementation always returns Rotate::Rotate3D, but it is
not correct, so we have to rewrite it:
1. If both from value and to value are none, we don't have to convert it
   into identity value, so just return None.
2. If one of the value is none, we replace it with an identity value based on
   the other one's rotate axis.
3. If we only have 2D rotation, we just animate the <angle>.
4. Otherwise, we do interpolation by 3D rotation.

Differential Revision: https://phabricator.services.mozilla.com/D11247
2018-11-17 09:56:00 +01:00
Emilio Cobos Álvarez
c75a3e4db1
style: Remove serialize_basicshape_position.
Per https://github.com/w3c/csswg-drafts/issues/2274. There's a whole lot of new failures, but those need to be updated along with the spec changes in that issue.

We did resolve that position serialized the same everywhere though.

Differential Revision: https://phabricator.services.mozilla.com/D1933
2018-11-17 09:55:59 +01:00
Emilio Cobos Álvarez
6b5117d82d
style: Remove outdated comment. 2018-11-17 09:55:59 +01:00
Emilio Cobos Álvarez
4c3646eff0
style: Allow user-select: -moz-text on user-agent stylesheets only.
It's only used in contenteditable.css, and same usage in comm-central. That
sheet is loaded as a ua sheet so let's restrict it to that. No relevant
external usage either. This value was introduced in bug 1181130.

Differential Revision: https://phabricator.services.mozilla.com/D11584
2018-11-17 09:55:59 +01:00
Emilio Cobos Álvarez
4bc9bc11e1
style: Remove user-select: -moz-all.
It's an attempt of an alias to `all`, except it doesn't get handled in all
places.

Seems unused both in comm-central and mozilla-central, and all external usage I
could find is followed by -webkit-user-select: all.

Differential Revision: https://phabricator.services.mozilla.com/D11582
2018-11-17 09:55:55 +01:00
Emilio Cobos Álvarez
0c8b1a9004
style: Remove unimplemented values of the user-select property.
Can't believe we literally had no code to handle them.

Differential Revision: https://phabricator.services.mozilla.com/D11581
2018-11-17 09:55:51 +01:00
Emilio Cobos Álvarez
1aa6725f9a
style: Move user-select outside of mako.
This is the first step to unprefix user-select.

This has no behavior change, it's just a nicer way to do the same thing which
allows us to unship individual values more easily using parse(condition).

Differential Revision: https://phabricator.services.mozilla.com/D11580
2018-11-17 09:55:47 +01:00
Emilio Cobos Álvarez
fcada8a71e
style: Remove outdated comment. 2018-11-17 09:52:52 +01:00
CYBAI
db008b9393 Fix wrong spec link 2018-11-11 14:26:06 +08:00
Emilio Cobos Álvarez
bd9c53c5da
style: Manually extinguish multi-line use statements. 2018-11-10 21:42:24 +01:00
Emilio Cobos Álvarez
212b3e1311
style: Revert try -> r#try change.
Since we're in an inconsistent state because mako files weren't updated, and
it's really really ugly.
2018-11-10 21:42:17 +01:00
Emilio Cobos Álvarez
155caba595
style: Cargo fix + ./mach fmt. 2018-11-10 21:11:47 +01:00
Boris Chiou
c6ead1dc0e
style: Percentage values of translate are serialized as percent for computed values.
Basically, we rewrite the type of generics::transform::Translate and its
ToCss to match the spec. Besides, we always serialize Translate by servo,
so we could drop a lot of duplicated code.

Differential Revision: https://phabricator.services.mozilla.com/D11206
2018-11-10 21:11:36 +01:00