Commit Graph

3327 Commits

Author SHA1 Message Date
Emilio Cobos Álvarez
5bfce6ebda Bug 1303605: Make LazyFC assertions actually hold. r=bz
The code was trying to assert that we had frames constructed for all the nodes
in the parent chain, but we don't bail out in the
!GetContentInsertionFrameFor(aContainer) in the case that it's a children
element, because they actually have no insertion frame, though their children
do.

Move the LazyFC check after the insertion point check. That makes the previous
check work on the insertion point of the child, which makes it sound.

This also fixes bug 1410020, and with it a Shadow DOM test-case that was failing
because we had two sibling assigned to two different <slot>s, and the second one
wasn't getting properly flagged, and thus the second sibling never got a frame.

The other two test failures in this test are an event dispatch failure, where
the position of the target is not what the test expects (we don't account for
margin and padding). Filed that as bug 1450027.

Also, added a test for which we have wrong layout without these patches, and
that crashes with "Called Servo_Element_IsDisplayNone" with the first patch of
this bug applied but not this one, due to the bogus check mentioned above.

MozReview-Commit-ID: 6OeaVrZhTDv
2018-04-07 15:22:06 +02:00
Emilio Cobos Álvarez
95a825cbf6 Bug 1303605: Remove the undisplayed maps. r=bz,mats
This is mostly code removal, changing GetDisplayContentsStyle(..) checks by an
FFI call to Servo.

The tricky parts are:

 * MaybeCreateLazily, which I fixed to avoid setting bits under display: none
   stuff. This was a pre-existing problem, which was wallpapered by the
   sc->IsInDisplayNoneSubtree() check, which effectively made the whole
   assertion useless (see bug 1381017 for the only crashtest that hit this
   though).

 * ContentRemoved, where we can no longer know for sure whether the element is
   actually display: contents if we're removing it as a response to a style
   change. See the comment there. That kinda sucks, but that case is relatively
   weird, and it's better than adding tons of complexity to handle that.

 * GetParentComputedStyle, which also has a comment there. Also, this function
   has only one caller now, so we should maybe try to remove it.

The different assertions after DestroyFramesForAndRestyle are changed for a
single assertion in the function itself, and the node bit used as an
optimization to avoid hashtable lookups is taken back.

MozReview-Commit-ID: AZm822QnhF9
2018-04-07 15:21:56 +02:00
Bobby Holley
2fd8051265 Bug 1451421 - Stop using Gecko namespace ids in servo. r=xidorn
MozReview-Commit-ID: 2532dHCGPXW
2018-04-06 15:30:58 -07:00
Emilio Cobos Álvarez
42a7bf6fce Bug 1451239: Remove resolved namespace id and tag from FCItems. r=bz
Tag is unused.

This changes how some mixes of MathML and html get wrapped in anonymous table
boxes (in particular, it changes whether it uses a MathML or an HTML table
frame). The main thing this affects is whether the frame responds to certain
attributes. Responding to mathml attributes on its mContent when that mContent
is not a MathML element is weird. So arguably this is also more correct.

However, that seems acceptable to me, and you can already get that mixing
manually. On a few (arguably simple) manual test-cases mixing MathML and HTML
tables I couldn't manage to get the patched build to render differently.

Plus, neither our reftests nor the WPT MathML test-suite upstreamed by Fred Wang
for WebKit rely on this.

MozReview-Commit-ID: 8IV3iF5xIs0
2018-04-06 11:51:47 +02:00
Nicholas Nethercote
9404776d28 Bug 1451169 - Reduce indirection for PseudoParentData::mPseudoType. r=xidorn
MozReview-Commit-ID: CiXGCKrpfCB
2018-04-03 22:15:31 +10:00
Nicholas Nethercote
4060f51911 Bug 1451169 - Reduce indirection for FrameConstructionDataByTag::mTag. r=xidorn
MozReview-Commit-ID: 4qNZF7SS2bS
2018-04-03 22:15:31 +10:00
Nicholas Nethercote
952b996322 Bug 1451169 - Reduce indirection for static atom pointers in nsCSSFrameConstructor.h. r=xidorn
MozReview-Commit-ID: Kt3QfZsk0zD
2018-04-03 22:15:30 +10:00
Emilio Cobos Álvarez
81d8a30302 Bug 1450705: Don't go through the binding manager to see if our parent is an SVG element. r=bz
We don't extend svg elements, except in a lone test, that isn't really impacted
by this.

I agree this should look at the frame btw, though that looks a bit out of scope
for this bug.

MozReview-Commit-ID: MbvIE5TszB
2018-04-04 07:49:21 +02:00
Emilio Cobos Álvarez
b8e134468a Bug 1450617: No need to ResolveTag to disable first-line on fieldsets. r=bz
We don't extend HTML fieldsets with XBL, and I don't think we want to start
doing that now.

MozReview-Commit-ID: GiltTWXUBzZ
2018-04-04 07:48:31 +02:00
Emilio Cobos Álvarez
27c3045a39 Bug 1450617: Only allow extending from / to XUL elements. r=bz
MozReview-Commit-ID: JaFKQDkLGgw
2018-04-04 07:48:31 +02:00
arthur.iakab
759ba40bbf Merge mozilla-central to mozilla-inbound 2018-04-03 12:41:24 +03:00
Nicholas Nethercote
8012e8456e Bug 1448225 - Convert StylePrefs to StaticPrefs. r=emilio
The new StaticPrefs machinery means that StylePrefs can be removed.

Note that this approach mirrors all static prefs into Rust, but I have only
updated structs.rs for the prefs that Stylo uses.

On a CLOSED TREE, since a sheriff closed the tree while I was about to land this
via autoland.

MozReview-Commit-ID: G1SY0987WJ7
2018-04-03 09:06:20 +02:00
Emilio Cobos Álvarez
7dad3fb21c Bug 1450721: Remove special-case in nsCSSFrameConstructor. r=bz
We don't extend these elements, and I don't feel bad making that code depend on
the UA rule at:

  https://hg.mozilla.org/mozilla-central/file/ef717c03ff54d10b2e30df7e63fc11172c69db44/toolkit/content/xul.css#l63

If we don't create frames for these, we bail out due to the lack of an insertion
point. If we do, well, things are buggy already.

MozReview-Commit-ID: DBBo8jBpqFc
2018-04-03 08:07:40 +02:00
Xidorn Quan
ea8b8b1e74 Bug 1449400 part 5 - Remove StyleSetHandle. r=emilio
This patch basically does:
* remove StyleSetHandle and its corresponding files
* revisit #includes of related header files and change correspondingly
* change nsIPresShell::mStyleSet to be UniquePtr<ServoStyleSet>
* change the creating path of ServoStyleSet to pass UniquePtr
* change other mentions of StyleSetHandle to ServoStyleSet*
* remove AsServo() calls on ServoStyleSet

Some unfortunate bits:
* some methods of (Servo)StyleSet only accepts ServoStyleSheet while
  many places call into the methods with StyleSheet, so there are many
  ->AsServo() added to sheets

MozReview-Commit-ID: K4zYnuhOurA
2018-03-29 22:15:46 +11:00
Xidorn Quan
e493ad2ae2 Bug 1449400 part 4 - Split some inline functions from ServoStyleSet.h into an Inlines header. r=emilio
To remove the dependency from ServoStyleSet.h to ServoBindings.h.

MozReview-Commit-ID: 6YJ71AnQklL
2018-03-29 22:15:46 +11:00
Jonathan Watt
44d37e68d5 Bug 1449321 - Remove the IsServo and IsGecko methods from the style system code. r=emilio 2018-03-23 16:01:34 +00:00
Emilio Cobos Álvarez
68ee99d4c8 Bug 1448688: Remove RestyleTracker, ComputedStyle::AsServo, old style system element bits. r=xidorn
MozReview-Commit-ID: ALiOngGqozN
2018-03-26 09:38:07 +02:00
Jonathan Watt
19a102f496 Bug 1448294 - Clean up naming of 'styleContext' variables after the big nsStyleContext rename. r=emilio
Reviewers: emilio

Bug #: 1448294

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

MozReview-Commit-ID: KJq2i9nrg7y
2018-03-25 20:49:58 +02:00
Narcis Beleuzu
2764b805dc Backed out 2 changesets (bug 1448294, bug 1448337) for wpt and reftest failures on /mathml
Backed out changeset 180051cfe357 (bug 1448294)
Backed out changeset c188176f3289 (bug 1448337)
2018-03-25 21:31:08 +03:00
Emilio Cobos Álvarez
0b3a18a950 Bug 1448413: Do a bit of misc cleanup. r=jwatt
Summary: Mostly removing unneeded AsServo() and such.

Reviewers: jwatt

Bug #: 1448413

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

MozReview-Commit-ID: 8muHF7uMA53
2018-03-25 18:14:36 +02:00
Jonathan Watt
68804bb222 Summary: Bug 1448294 - Clean up naming of 'styleContext' variables after the big nsStyleContext rename. r=emilio
Reviewers: emilio

Bug #: 1448294

Differential Revision: https://phabricator.services.mozilla.com/D796
2018-03-22 13:49:21 +00:00
Emilio Cobos Álvarez
f151321934 Bug 1447506: Do LazyFC for anonymous nodes too, and clean up MaybeConstructLazily. r=bz
The old style system used FlattenedTreeIterator for lazy frame construction.
That could not find native anonymous nodes, so we had to construct eagerly in
native anonymous subtrees. Servo uses StyleChildrenIterator for the same
purpose, and that knows about native anonymous content, so we can now do lazy
construction for it.

Also, not check the container to do lazyFC on the children, it's no longer
necessary to check for anon content, and the reason we check for XUL is because
of XBL bindings, and those are loaded for the parent already, if we're about to
construct frames for the children.

Also, assert more tightly, we don't insert NAC lazily, that makes no sense.
Well, to be fair editor does insert anonymous nodes lazily sometimes (see al the
ManualNAC machinery), but it goes through the PostRecreateFramesFor path, not
through ContentInserted / LazyFC.

MozReview-Commit-ID: 2TmRNgpWaM
2018-03-23 16:45:07 +01:00
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