Commit Graph

3105 Commits

Author SHA1 Message Date
Emilio Cobos Álvarez
1d4859a89a Bug 1447483: Merge nsStyleContext and ServoStyleContext, rename to ComputedStyle. r=jwatt on a CLOSED TREE
MozReview-Commit-ID: JPopq0LudD
2018-03-22 20:06:24 +01:00
Emilio Cobos Álvarez
97286b35c8 Back out changeset b683bb3f22a1 (Bug 1447483) for not landing with all the files. r=me on a CLOSED TREE
This reverts commit 1808914126bb9f9e4a82d2c3d7ac961885fe7d62.

MozReview-Commit-ID: 5skESBseEvo
2018-03-22 20:05:22 +01:00
Emilio Cobos Álvarez
1f5d8de5cc Bug 1447483: Merge nsStyleContext and ServoStyleContext, rename to ComputedStyle. r=jwatt
MozReview-Commit-ID: JPopq0LudD
2018-03-22 19:48:42 +01:00
Boris Zbarsky
152cd3ba6e Bug 1447098 part 1. Rename FromContent on various DOM classes to FromNode. r=mystor
MozReview-Commit-ID: 202nkbmkwfR
2018-03-21 17:39:04 -04:00
Emilio Cobos Álvarez
7b56cf8dbc Bug 1447476: Simplify ResolveStyleContext. r=xidorn,bz
We don't need the parent style context, nor the pseudo-element dance or anything
like that. All end up in the same place, Servo_ResolveStyle.

We cannot assert for text style resolution because of non-lazy frame
construction, and we cannot remove non-lazy frame construction because of XBL.

This is effectively the same code, since the old code passed the parent style
around from the frame tree / display contents map, which didn't have a similar
assertion either...  Slow steps.

I'll improve and cleanup LazyFC in bug 1447506.

MozReview-Commit-ID: Ck4RCoFLGOi
2018-03-21 17:22:56 +01:00
Emilio Cobos Álvarez
d5a532f665 Bug 1447476: Remove TreeMatchContext. r=xidorn
MozReview-Commit-ID: ETK0uGXytqb
2018-03-21 17:20:59 +01:00
Emilio Cobos Álvarez
b1a35fbef7 Bug 1447358: Unifdef the old style system code. r=jwatt
Summary:
This has been automatically generated using:

  http://dotat.at/prog/unifdef/

And:

find $OBJDIR -type f -name '*.h' |
while read FILE; do
  echo "$FILE"
  unifdef -m -DMOZ_STYLO -UMOZ_OLD_STYLE "$FILE";
done

find $OBJDIR -type f -name '*.cpp' |
while read FILE; do
  echo "$FILE"
  unifdef -m -DMOZ_STYLO -UMOZ_OLD_STYLE "$FILE";
done

MozReview-Commit-ID: I4NdKqbMXzJ

Reviewers: jwatt

Bug #: 1447358

Differential Revision: https://phabricator.services.mozilla.com/D779
2018-03-21 10:20:34 +01:00
Boris Zbarsky
79c3ebc9f6 Bug 1446533 part 12. Remove nsIDOMCharacterData. r=mystor
MozReview-Commit-ID: KXex3Rjcire
2018-03-19 15:47:42 -04:00
Boris Zbarsky
498444cacf Bug 1446533 part 2. Rename nsGenericDOMDataNode.{h,cpp} to CharacterData. r=mystor
The DOMMatrix.cpp changes are because it was sneaking in headers via another
unified file.

MozReview-Commit-ID: GPp9WOywI5D
2018-03-19 15:18:07 -04:00
Boris Zbarsky
8dd8d25044 Bug 1446533 part 1. Rename nsGenericDOMDataNode to CharacterData. r=mystor
This is not renaming the files yet; that will be a separate changeset.

MozReview-Commit-ID: 5TxkEiQlaKF
2018-03-19 15:18:06 -04:00
Emilio Cobos Álvarez
249bc337d5 Bug 1443339: Stop observing the refresh driver when inserting into the BFCache. r=bz
The nsCSSFrameConstructor bits are now handled in PresShell::Destroy along with
the other refresh driver observers.

I cleaned up the nsRefreshDriver methods because they were using infallible
append anyway, and that simplified the logic.

MozReview-Commit-ID: 1eDUUXjUUS9
2018-03-17 16:11:52 +01:00
Emilio Cobos Álvarez
923d990216 Bug 1444905: Remove scoped style support from the old style system. r=xidorn,smaug
Summary: It uses two node bits that can be better suited for something else.

Reviewers: xidorn, smaug

Bug #: 1444905

Differential Revision: https://phabricator.services.mozilla.com/D709

MozReview-Commit-ID: HIPDtHm6xpM
2018-03-13 10:26:13 +01:00
Emilio Cobos Álvarez
367a73df8a Bug 1024082: Remove PresShell::FrameManager(), use PresShell::FrameConstructor instead. r=dholbert
Unfortunately this means that we need to export a couple more headers, but that
should be ok.

In particular, we have to export some headers that are #included by
nsCSSFrameConstructor.h, because nsCSSFrameConstructor.h itself will now be
included in more places outside of layout/, by .cpp files that don't necessarily
have the ability to indirectly #include its other headers, unless we export
them.

MozReview-Commit-ID: 2n9KHW6Yjrd
2018-03-07 10:17:52 +01:00
Emilio Cobos Álvarez
c67cd5178d Bug 1437155: Avoid giving a first-letter frame to a display: contents element. r=mats
It doesn't make sense, since they have no frame themselves, and it breaks
invariants other code relies on. Use the parent frame instead.

The stack overflow happens because we give the first-letter frame to the
display: contents element, then we reframe it.

Removing a display: contents node calls ContentRemoved on all the children. One
of these children is this text-node inside the first-letter frame. Since it was
split by bidi resolution we go ahead and reframe the parent in:

  https://searchfox.org/mozilla-central/rev/d2b4b40901c15614fad2fa34718eea428774306e/layout/base/nsCSSFrameConstructor.cpp#9688

But the parent is the display: contents node, which results in infinite
recursion.

The usage of GetParent() is wrong anyway too, since it doesn't handle XBL or
Shadow DOM in any way.

MozReview-Commit-ID: JFD16at316V
2018-03-05 11:42:12 +01:00
Emilio Cobos Álvarez
c075c812d9 Bug 1422653: Make FindSiblingInternal take the iterator by ref to please the static analysis on the next patch. r=mats
MozReview-Commit-ID: XCNVrTNihM
2018-02-28 23:15:31 +01:00
Brian Grinstead
fcccebabcc Bug 1431522 - Remove the 'thumb' binding;r=enndeakin+6102+6102
MozReview-Commit-ID: JioZr8WAuPw
2018-01-19 08:08:49 -08:00
Emilio Cobos Álvarez
7a79ccba52 Bug 1441547: Make character data change notifications use a const reference for the info parameter. r=smaug
It's not intended to be mutated.

MozReview-Commit-ID: 5nkD1YkidlV
2018-02-27 15:30:27 +01:00
Emilio Cobos Álvarez
7f747f2669 Bug 1440682: Make the XUL tooltip stuff saner. r=enn
We never removed the event listeners (the code was there, lol, but the function
that was supposed to call into the tooltip listener returned
NS_ERROR_NOT_IMPLEMENTED instead).

Furthermore, we added an event listener each time we reframed an element, which
is insane. Basically, each time an element with tooltip / tooltiptext gets its
frame tree reconstructed, we add the even listener, again, and we never free it.

Xidorn pointed out that this is not such a huge deal because we deduplicate
event listeners per spec, but still...

Move the code from the RestyleManager and the frame constructor to AfterSetAttr
/ BindToTree / UnbindFromTree in nsXULElement to hopefully make this saner.

MozReview-Commit-ID: 6BQbIQJ87qt
2018-02-26 15:44:48 +01:00
Xidorn Quan
c29c014e29 Bug 1440221 - Track stale computed values and style structs held by undisplayed maps in memory report. r=emilio,njn
MozReview-Commit-ID: 8eXowQvUjyi
2018-02-22 23:19:50 +11:00
Emilio Cobos Álvarez
eec5c11ba9 Bug 1438467: Don't reconstruct the parent when tearing down display: contents nodes with pseudo-elements. r=mats,bz
We just need to use the existing StyleChildrenIterator which iterates over them.

We need to be a bit careful though, since ::before and ::after are owned by
their own frame, and thus could be unbound from the tree or even dead after
removing the frame.

Hopefully the only access to the node being removed is unnecessary (anon roots
don't have siblings anyway).

There's also the weird thing of the thing we're iterating changing under the
hood. It works fine for this case, but maybe it would be better to handle them
explicitly like:

  if (Element* before = nsLayoutUtils::GetBeforePseudo(aChild)) {
    bool didReconstruct = ContentRemoved(aChild, ...);
    if (didReconstruct) {
      return true;
    }
    MOZ_ASSERT(!nsLayoutUtils::GetBeforePseudo(aChild));
  }

  // Same for ::after.

  StyleChildrenIterator iter(aChild);
  for (..) {
    // Do the rest of the kids, which can't get unbound.
  }

That'd repeat a bunch of code, so not a fan neither... I pointed this out more
explicitly in a comment instead.

MozReview-Commit-ID: HBsjLH01Db3
2018-02-25 02:06:05 +01:00
Xidorn Quan
0019b587fe Bug 1440141 part 1 - Move GeckoStyleContext::TakeRef to nsStyleContextInlines.h so that header doesn't depend on the Inlines.h. r=emilio
MozReview-Commit-ID: GdARP4HUAIY
2018-02-22 11:51:38 +11:00
J. Ryan Stinnett
e9c275365c Bug 1361618 - Remove unnecessary calls to FlushPendingLinkUpdates. r=dbaron
This removes the two calls to `FlushPendingLinkUpdates` in nsCSSFrameConstructor
and GeckoRestyleManager, which appear to have no effect.
Looking through what the pending link code is attempting to do:
* When a new anchor is bound in `BindToTree` we do:
  1. Link::ResetLinkState(false, Link::ElementHasHref());
    * Set link's mLinkState to default (either unvisited or not link)
    * Set element's link mState bits to default (either unvisited or not link)
  2. doc->RegisterPendingLinkUpdate(this);
    * Schedules idle dispatch to run `FlushPendingLinkUpdates` within 1 sec
* In `FlushPendingLinkUpdates`:
  * For each pending link, call element->UpdateLinkState(link->LinkState());
    1. Register link for async history update to get potential future visited
       state
    2. mLinkState is still unvisited / not link until we hear from history, so
       element state is unchanged

Thus, there seems to be no need to call `FlushPendingLinkUpdates` outside of
`BindToTree`, since visited state is always applied async anyway (so it doesn't
work as an optimization to avoid restyling if visited, since that will trigger
later).

MozReview-Commit-ID: ADwsYz8vNyd
2018-02-12 15:45:02 -08:00
Andreea Pavel
db8df043a2 Merge mozilla-central to mozilla-inbound. on a CLOSED TREE 2018-02-15 12:37:30 +02:00
Emilio Cobos Álvarez
10f606c165 Bug 1435566: Make sure to drop frames for manual NAC from display: contents nodes. r=bz
MozReview-Commit-ID: 9CQIueSPwCV
2018-02-15 11:22:39 +01:00
Emilio Cobos Álvarez
927195108e Bug 1429962: Don't add frames / reframe text that is going to get reframed anyway. r=bz
MozReview-Commit-ID: GuWjYYP0dBR
2018-02-14 12:35:43 +01:00
Noemi Erli
632740c63b Backed out changeset c074e2c4b2ed (bug 1435658) for failing in layout/generic/test/test_bug632379.xul on a CLOSED TREE 2018-02-05 22:39:07 +02:00
Emilio Cobos Álvarez
c4c4eeffc6 Bug 1435658: Deal with appearance changes from / to none correctly. r=mats
MozReview-Commit-ID: Fl6VY0rAIiD
2018-02-05 14:55:31 +01:00
Emilio Cobos Álvarez
2d123d1e39 Bug 1435015: Unbreak display: contents on unknown MathML elements. r=mats
Bug 1427292 broke display: contents on non-special MathML elements.

Just for reference, I've manually audited calls to nsIFrame::GetContent() in
MathML and turns out that MathML is pretty well-behaved in that sense (it
inspects the frame tree, then gets the content), so it should work fine with
display: contents / ShadowDOM.

Only exception to that is[1], but that one seems harmless.

[1]: https://searchfox.org/mozilla-central/rev/eeb7190f9ad6f1a846cd6df09986325b3f2c3117/layout/mathml/nsMathMLmactionFrame.cpp#301

So we can enable or implement when the CSSWG pleases.

MozReview-Commit-ID: 8N6kiGyjE4i
2018-02-02 20:52:54 +01:00
Emilio Cobos Álvarez
af71a91978 Bug 1435366: Move <svg:text> frame construction data getter to the generic path. r=mats
It's the last thing we check before looking into the array, modulo other two
tags, so there should be no need for something more fancy.

MozReview-Commit-ID: 4Wi1fe7jBlN
2018-02-02 20:58:21 +01:00
Boris Zbarsky
6b0d86d490 Bug 1434686 part 3. Use IgnoreErrors() outside of dom/. r=mystor
I left some IgnoredErrorResults for now where people warn on failure.  We could
consider adding a WarnOnError() thing or something.

MozReview-Commit-ID: L5ttZ9CGKg0
2018-02-01 14:21:14 -05:00
Cameron McCormack
34288f7f48 Bug 1430014 - Part 5: Stop building old style system classes when MOZ_OLD_STYLE is not defined. r=xidorn
MozReview-Commit-ID: CIHyPdF7Exl
2018-02-01 15:04:04 +11:00
Cameron McCormack
02c617875f Bug 1430014 - Part 4: #ifdef out unnecessary code when the old style system is not built. r=xidorn
MozReview-Commit-ID: 1FZ9VzjcPzN
2018-02-01 15:04:04 +11:00
Boris Zbarsky
889fa1df76 Bug 1434273. Make nsGenConImageContent's inheritance match the way it's used. r=mccr8
MozReview-Commit-ID: AYL4iZkMJiH
2018-01-30 14:48:26 -05:00
Boris Zbarsky
a86373f271 Bug 1418076 part 11. Eliminate the nsIDOMHTMLDocument interface. r=mystor
MozReview-Commit-ID: 4lEcUeenbg3
2018-01-26 01:03:25 -05:00
Boris Zbarsky
a04420f06a Bug 1432186 part 19. Remove the nsIDOMNode::*_NODE constants. r=mccr8
MozReview-Commit-ID: KvKjeKIOB9K
2018-01-29 23:10:53 -05:00
Emilio Cobos Álvarez
631f8eec7e Bug 1426649: Remove nsCSSFrameConstructor updates. r=mats
They used to do quote updates and such but they where moved long ago, and do
nothing now.

MozReview-Commit-ID: 188vzGctbty
2017-12-21 19:34:48 +01:00
Emilio Cobos Álvarez
c617825580 Bug 1426649: Stop tracking DOM changes from painting. r=dbaron
I'm pretty sure this is not a problem now, since we don't mutate the DOM from
painting, and we don't have legacy extensions anymore.

Just to confirm, I did a try run with a RELEASE_ASSERT(!CheckDOMModified()), and
it passed.

MozReview-Commit-ID: HTekD8tsz9v
2017-12-21 14:09:32 +01:00
KuoE0
9726342c40 Bug 1428297 - (Part 2) Ignore the widget/view usage that is used to show the dropdown menu when content-select is enabled. r=mats
MozReview-Commit-ID: 68HYWmniXwt
2018-01-08 11:43:51 +08:00
KuoE0
da575c9d20 Bug 1428297 - (Part 1) Add an nsLayoutUtils function to check whether content-select is enabled r=mats
MozReview-Commit-ID: KVQ25Dhl9xl
2018-01-11 10:37:41 +08:00
Coroiu Cristina
56d935855a Backed out 1 changesets (bug 1429088) for crashes, e.g. in reftest/tests/layout/reftests/bugs/309914-1.xul on a CLOSED TREE
Backed out changeset 7647a5900c99 (bug 1429088)
2018-01-13 12:50:05 +02:00
Emilio Cobos Álvarez
ba70e77323 Bug 1429088: Only style children on non-lazy frame construction after we found an insertion point. r=bz
Servo tries to keep this invariant that stuff under a display: none element
subtree doesn't get styled.

This invariant isn't checked in StyleNewChildRange, but we can fix this by just
doing the work after finding an insertion point, which guarantees that.

Do the same for listboxes, since we also style early for them without knowing
whether they actually have a listbox parent frame.

MozReview-Commit-ID: Glyx24wQ6qY
2018-01-09 17:19:00 +01:00
Daniel Holbert
5974c6309d Bug 1430297: Use AddRef() instead of NS_ADDREF (when keeping generated content alive in nsCSSFrameConstructor). r=mats
MozReview-Commit-ID: ECz1SCYO4ia
2018-01-12 15:33:01 -08:00
Emilio Cobos Álvarez
86eb34976c Bug 1429088, Bug 1429125: Add a comment about why we can't remove the XUL check, at least yet. r=me
MozReview-Commit-ID: wzzzGQpXVV
2018-01-10 05:50:31 +01:00
Emilio Cobos Álvarez
09e057ec1f Bug 1429125: Enable lazy frame construction in the browser chrome, but not XUL yet. r=heycam,tnikkel
This is on top of the patch to re-enable them in shadow trees for bug 1429088.

MozReview-Commit-ID: 3dwQ9J5nFcS
2018-01-10 05:47:13 +01:00
Emilio Cobos Álvarez
651bc21310 Bug 1429088: Enable lazy frame construction for shadow trees. r=bz
There's no reason it wouldn't work after bug 1404789.

MozReview-Commit-ID: 28X5x2rDqYn
2018-01-10 05:47:05 +01:00
Emilio Cobos Álvarez
5791ce7eb5 Bug 1427677: Get rid of nsContentUtils::HasDistributedChildren. r=bz
The whole function doesn't have much sense.

I killed its only DOM use in bug 1427511.

Now it only has two callers in nsCSSFrameConstructor, which basically only want
to know whether the children of the same node can have different flattened tree
parents.

So let's check that directly instead (checking whether the element has a binding
or a shadow root), and simplify a bit other surrounding code while at it.

Leave the XUL popup / menubar code doing the broken thing they were doing
beforehand, because it doesn't look to me like it's trivial to fix... They're
effectively assuming that the children of the menupopup end up in a single
insertion point, which is true, but doesn't need to be. Maybe they should walk
the DOM tree? Don't want to dig into that right now, since XUL insertion points
can be filtered and all that... Not fun.

Also, this removes the broken optimization that used to check
mParentFrame->GetContent()->HasChildren(), because it's pretty broken. It used
to be relevant before bug 653881, because <children> element used to not exist,
but now the insertion point at least needs to contain the <children> element all
the time.

There even used to be a XXX comment saying that the optimization didn't work,
which was removed in:

  https://hg.mozilla.org/mozilla-central/rev/2d8585ec74b3

We could still check for "no insertion points", and optimize that, but it
doesn't seem worth it.

MozReview-Commit-ID: L4lspkxKENr
2018-01-09 20:50:17 +01:00
KuoE0
ac615c361d Bug 1425088 - (Part 3) Put the dropdown frame's placeholder into the principal child list of the combobox frame when content-select is enabled. r=mats
MozReview-Commit-ID: HJrltVmJCOj
2018-01-05 17:50:38 +08:00
KuoE0
28b5155923 Bug 1425088 - (Part 2) Change the dropdown frame to a top-level absolute frame when content-select is enabled. r=mats
MozReview-Commit-ID: E77XdiELqhm
2017-12-13 17:59:29 -06:00
Emilio Cobos Álvarez
abf75f306c Bug 1427292: [css-display] Update display: contents on Unusual Elements to the spec. r=mats
This will pass[1] whenever the next WPT sync happens.

See: https://drafts.csswg.org/css-display/#unbox-html

[1]: https://github.com/w3c/web-platform-tests/blob/master/css/css-display/display-contents-unusual-html-elements-none.html

MozReview-Commit-ID: 19dqDSxVm7A
2018-01-06 21:52:51 +01:00
Emilio Cobos Álvarez
54b8b3b3f5 Backout two changesets (Bug 1427677) until I prove they have no negative performance implication. r=backout
MozReview-Commit-ID: 3xuUAXVfEHd
2018-01-06 19:01:48 +01:00