Commit Graph

3360 Commits

Author SHA1 Message Date
Mats Palmgren
e52af45a97 Bug 1567773 - [css-lists] Look for an inside ::marker frame too when searching for a suitable sibling. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D38902
2019-07-22 15:43:16 +02:00
Ting-Yu Lin
e1f1b89eb9 Bug 1566672 - Handle the {ib}-split reframing in multicol subtree properly. r=dholbert
Delete `return false` at the end of the if-statement block that handling
the multicol subtree reframing, and let it fall though the bottom of
WipeContainingBlock() where there is a complete logic for ib-split
reframing.

Differential Revision: https://phabricator.services.mozilla.com/D38548
2019-07-19 19:38:05 +00:00
L. David Baron
ca88671959 Bug 1566945 - Add a parameter to nsContainerFrame::InsertFrames for aPrevFrame's line box. r=dholbert
For now, always pass null, except when passing it through from one
overload to another.

Differential Revision: https://phabricator.services.mozilla.com/D38389
2019-07-17 23:34:45 +00:00
Ting-Yu Lin
d5edb44536 Bug 1565136 - Move some reframing logic out of WipeContainingBlock to make it done earlier. r=dholbert
Also move the duplicate logic for reframing MathML in ContentAppended()
and ContentRangeInserted() into WipeInsertionParent().

Differential Revision: https://phabricator.services.mozilla.com/D38417
2019-07-18 04:55:03 +00:00
Emilio Cobos Álvarez
4d7b885efc Bug 1564366 - Update animations when a pseudo-element had animations but no longer has, and has been re-framed in the meantime. r=birtles
This is the easy fix.

The hard fix (outlined in the comment) would be nice, but I don't think this bug
alone justifies it.

Differential Revision: https://phabricator.services.mozilla.com/D38184
2019-07-16 15:42:08 +00:00
Sylvestre Ledru
3bf4f867df Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D38057
2019-07-16 07:33:44 +00:00
Ting-Yu Lin
3ee8927821 Bug 1562701 - Move the reframing logic of <details> element into WipeContainingBlock. r=dbaron
We don't need to treat a details frame as if it has multiple content
insertion points in order to reframe it. We can just put the logic into
WipeContainingBlock().

The reftests layout/reftests/details-summary/dynamic-add-*.html also
cover adding <summary> into a <details> in various situations.

Differential Revision: https://phabricator.services.mozilla.com/D36529
2019-07-11 05:34:24 +00:00
Cameron McCormack
87ea9b4aa7 Bug 1554571 - Part 3: Cache computed styles of scrollbar part anonymous content. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D33123
2019-06-27 07:22:22 +00:00
Cameron McCormack
e738e1249d Bug 1554571 - Part 1: Remove unused argument from Servo_ResolveStyle. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D33121
2019-06-27 07:22:13 +00:00
Mihai Alexandru Michis
67c201f6ab Backed out 4 changesets (bug 1554571) for causing failures in minimal-xul.css
Backed out changeset 1cc4e6374b8a (bug 1554571)
Backed out changeset 30728685499e (bug 1554571)
Backed out changeset c14e9c381345 (bug 1554571)
Backed out changeset a2143551d7bc (bug 1554571)
2019-06-27 07:09:55 +03:00
Cameron McCormack
af626c09dc Bug 1554571 - Part 3: Cache computed styles of scrollbar part anonymous content. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D33123
2019-06-27 00:25:03 +00:00
Cameron McCormack
d883ec22a0 Bug 1554571 - Part 1: Remove unused argument from Servo_ResolveStyle. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D33121
2019-06-27 00:24:54 +00:00
Ting-Yu Lin
8b884c7f33 Bug 1523595 Part 2 - Add missing NS_FRAME_HAS_MULTI_COLUMN_ANCESTOR for nested ColumnSetWrapper. r=dbaron
Bug 1507244 changes how NS_FRAME_HAS_MULTI_COLUMN_ANCESTOR is propagated
to the child, but I forget to add the bit for nested ColumnSetWrapper.

Currently, no other code depends on this bit being set on nested
ColumnSetWrapper, but Part 3 will. Without this patch,
testing/web-platform/tests/css/css-multicol/multicol-nested-margin-002.xht
will fail with Part 3.

Differential Revision: https://phabricator.services.mozilla.com/D31675
2019-06-19 17:05:18 +00:00
Emilio Cobos Álvarez
eb9d659a69 Bug 1558352 - Ensure canvas anonymous content is always created before constructing the document element frame's children. r=TYLin
Right now that doesn't happen, so you can run into problems like the one
described in bug 1492582 comment 30 for popups.

This is a bit annoying, but it's more consistent with how regular anonymous
content works already:

  https://searchfox.org/mozilla-central/rev/0da35261b6789eec65476dbdd4913df6e235af6d/layout/base/nsCSSFrameConstructor.cpp#9644

It's still not 100% consistent, since the root element's frame would still end
up first in the frame tree, but I think that's both less important and harder to
change. I've left a comment to that effect in the code.

Differential Revision: https://phabricator.services.mozilla.com/D34434
2019-06-12 10:09:28 +00:00
Boris Zbarsky
8e16a497d9 Bug 1557793 part 3. Change the signatures of various nsContentUtils localization methods to play nicer with the new stringbundle API. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D34201
2019-06-08 21:26:12 +00:00
Emilio Cobos Álvarez
36577351db Bug 1487216 - Measure memory usage of RDL. r=mattwoodrow,miko
For now I added everything to the same bucket, but I wrote this so it should be
easy to add more buckets as needed (either to mArenaSizes, or more specific ones
like the style system has). But this is probably enough for now.

Differential Revision: https://phabricator.services.mozilla.com/D34126
2019-06-09 22:58:24 +00:00
Jonathan Watt
d17e754362 Bug 1557104. Merge nsIPageSequenceFrame and nsSimplePageSequenceFrame. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D33817
2019-05-22 13:01:33 +01:00
Neil Deakin
8a103f89a4 Bug 1519948, remove XUL box objects, r=bzbarsky 2019-06-04 12:45:55 -04:00
Emilio Cobos Álvarez
a3b32df884 Bug 1555216 - Change the signature of BindToTree to be (BindContext&, nsINode& aParentNode). r=bzbarsky
BindContext was going to have way more information at first, but then I realized
that most of the things I wanted to know were basically a flag away using the
parent node.

Still I think it's worth it, now experimenting with BindToTree will only mean
adding a field to a struct that's included from a couple cpp files, instead of a
massive pain.

I also think this is clearer, and doing this highlights quite a few
inconsistencies in our code which I've left untouched, but commented with
FIXMEs.

Steps are:

$ for file in $(rg 'nsresult BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#nsresult BindToTree(Document\* aDocument, nsIContent\* aParent,#nsresult BindToTree(BindContext\&, nsINode\& aParent)#g' $file; done
$ for file in $(rg 'nsresult BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#                      nsIContent\* aBindingParent) override#override#g' $file; done
$ for file in $(rg '::BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#::BindToTree(Document\* aDocument, nsIContent\* aParent,#::BindToTree(BindContext\& aContext, nsINode\& aParent)#g' $file; done
$ for file in $(rg '::BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#nsIContent\* aBindingParent)##g' $file; done
$ for file in $(rg '::BindToTree\(' | cut -d : -f 1 | sort | uniq); do sed -i 's#::BindToTree(aDocument, aParent, aBindingParent)#::BindToTree(aContext, aParent)#g' $file; done
$ ./mach clang-format

Then manual fixups.

Depends on D32948

Differential Revision: https://phabricator.services.mozilla.com/D32949
2019-05-31 23:31:52 +02:00
Emilio Cobos Álvarez
ab26c3cce3 Bug 1552708 - Use cbindgen for URIs. r=heycam
This doesn't clean up as much as a whole, but it's a step in the right
direction. In particular, it allows us to start using simple bindings for:

 * Filters
 * Shapes and images, almost. Need to:
   * Get rid of the complex -moz- gradient parsing (let
     layout.css.simple-moz-gradient.enabled get to release).
 * Counters, almost. Need to:
   * Share the Attr representation with Gecko, by not using Option<>.
     * Just another variant should be enough (ContentItem::{Attr,Prefixedattr},
       maybe).

Which in turn allows us to remove a whole lot of bindings in followups to this.

The setup changes a bit. This also removes the double pointer I complained about
while reviewing the shared UA sheet patches. The old setup is:

```
SpecifiedUrl
 * CssUrl
   * Arc<CssUrlData>
     * String
     * UrlExtraData
 * UrlValueSource
   * Arc<CssUrlData>
   * load id
   * resolved uri
   * CORS mode.
   * ...
```

The new one removes the double reference to the url data via URLValue, and looks
like:

```
SpecifiedUrl
 * CssUrl
   * Arc<CssUrlData>
     * String
     * UrlExtraData
     * CorsMode
     * LoadData
       * load id
       * resolved URI
```

The LoadData is the only mutable bit that C++ can change, and is not used from
Rust. Ideally, in the future, we could just use rust-url to resolve the URL
after parsing or something, and make it all immutable. Maybe.

I've verified that this approach still works with the UA sheet patches (via the
LoadDataSource::Lazy).

The reordering of mWillChange is to avoid nsStyleDisplay from going over the
size limit. We want to split it up anyway in bug 1552587, but mBinding gains a
tag member, which means that we were having a bit of extra padding.

One thing I want to explore is to see if we can abuse rustc's non-zero
optimizations to predict the layout from C++, but that's something to explore at
some other point in time and with a lot of care and help from Michael (who sits
next to me and works on rustc ;)).

Differential Revision: https://phabricator.services.mozilla.com/D31742
2019-05-29 21:22:04 +02:00
Brindusan Cristian
ff5dcfd738 Backed out 3 changesets (bug 1552708, bug 1552878) for build bustages and compiler issues. CLOSED TREE
Backed out changeset 9d4f178bfcbd (bug 1552878)
Backed out changeset 80db9f845237 (bug 1552708)
Backed out changeset 1bdbfbb5b342 (bug 1552708)
2019-05-27 17:00:03 +03:00
Emilio Cobos Álvarez
306823667b Bug 1552708 - Use cbindgen for URIs. r=heycam
This doesn't clean up as much as a whole, but it's a step in the right
direction. In particular, it allows us to start using simple bindings for:

 * Filters
 * Shapes and images, almost. Need to:
   * Get rid of the complex -moz- gradient parsing (let
     layout.css.simple-moz-gradient.enabled get to release).
 * Counters, almost. Need to:
   * Share the Attr representation with Gecko, by not using Option<>.
     * Just another variant should be enough (ContentItem::{Attr,Prefixedattr},
       maybe).

Which in turn allows us to remove a whole lot of bindings in followups to this.

The setup changes a bit. This also removes the double pointer I complained about
while reviewing the shared UA sheet patches. The old setup is:

```
SpecifiedUrl
 * CssUrl
   * Arc<CssUrlData>
     * String
     * UrlExtraData
 * UrlValueSource
   * Arc<CssUrlData>
   * load id
   * resolved uri
   * CORS mode.
   * ...
```

The new one removes the double reference to the url data via URLValue, and looks
like:

```
SpecifiedUrl
 * CssUrl
   * Arc<CssUrlData>
     * String
     * UrlExtraData
     * CorsMode
     * LoadData
       * load id
       * resolved URI
```

The LoadData is the only mutable bit that C++ can change, and is not used from
Rust. Ideally, in the future, we could just use rust-url to resolve the URL
after parsing or something, and make it all immutable. Maybe.

I've verified that this approach still works with the UA sheet patches (via the
LoadDataSource::Lazy).

The reordering of mWillChange is to avoid nsStyleDisplay from going over the
size limit. We want to split it up anyway in bug 1552587, but mBinding gains a
tag member, which means that we were having a bit of extra padding.

One thing I want to explore is to see if we can abuse rustc's non-zero
optimizations to predict the layout from C++, but that's something to explore at
some other point in time and with a lot of care and help from Michael (who sits
next to me and works on rustc ;)).

Differential Revision: https://phabricator.services.mozilla.com/D31742
2019-05-27 11:45:12 +00:00
Cameron McCormack
8dec0f541b Bug 1553378 - Devirtualize calls to GetText() / TextLength() when we know we have a Text node. r=smaug,jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D32100
2019-05-22 15:18:48 +10:00
Razvan Maries
8ac19c8776 Backed out changeset 82b18d61da00 (bug 1553378) for build bustages. CLOSED TREE 2019-05-24 06:50:14 +03:00
Cameron McCormack
2db2a234a8 Bug 1553378 - Devirtualize calls to GetText() / TextLength() when we know we have a Text node. r=smaug,jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D32100
2019-05-24 03:18:44 +00:00
Emilio Cobos Álvarez
433868d057 Bug 1544242 - Cleanup selector-matching for nested pseudo-elements, match ::slotted correctly when there's no selector before it, and add tests. r=heycam,mats
D29542 fixed the bogus checks that was making nested pseudo-elements match
author rules. This adds tests and ends up being just a cleanup, though as it
turns out we it also fixes an issue with ::slotted() matched from
Element.matches.

Differential Revision: https://phabricator.services.mozilla.com/D27529
2019-05-24 01:09:15 +00:00
Emilio Cobos Álvarez
ddc619433b Bug 1552719 - Make nsBulletFrame::Ordinal() O(1) again. r=mats
I did this instead of just (ab)using the fact that every list item has at least
one counter-increment node because:

 * I don't have the bullet frame around by the time we initially compute the
   counter increment, which means that I'd need to grow nsBlockFrame / add a
   frame property for the list item ordinal, which I think would be unfortunate.

 * It feels more consistent with the way regular CSS counters work and with the
   way we want ::marker to eventually work.

Differential Revision: https://phabricator.services.mozilla.com/D31990
2019-05-21 17:30:42 +00:00
Emilio Cobos Álvarez
b1b893efab Bug 1552719 - Do some cleanup in the counter initializer code. r=mats
I thought I was going to need it but turns out I don't. Still this is worth it I
think.

Differential Revision: https://phabricator.services.mozilla.com/D31987
2019-05-21 17:29:06 +00:00
Noemi Erli
35ebb8f0ff Backed out changeset 8c89fd37b79d (bug 1544242) for failures in browser_rules_shadowdom_slot_rules.js CLOSED TREE 2019-05-01 22:03:06 +03:00
Emilio Cobos Álvarez
538690d819 Bug 1544242 - Fix selector-matching for nested pseudo-elements. r=heycam,mats
We always include the combinator for pseudo-elements now (not including it was
just an optimization) in order to not match when nested pseudo-elements are
involved.

We could add a more generic check in `matches_simple_selector` like:

```
if element.is_pseudo_element() {
    match *selector {
        Component::PseudoElement(..) |
        Component::NonTSPseudoClass(..) => {},
        _ => return false,
    }
}
```

But even that wouldn't be enough to make selectors like `:hover::marker` not
match on the `::before::marker` pseudo-element, plus that code is really hot.

So for now do the check on the `next_element_for_combinator` function. It's a
bit hacky but it's the best I could came up with...

While at it, simplify some checks to use is_pseudo_element() instead of
implemented_pseudo_element() directly.

Only the Rust patch as-is would make markers for ::before and ::after on list
items not show up, so we also need to switch ::marker to use ProbeMarkerStyle()
rather than ProbePseudoElementStyle(), since the marker should exist even if it
matches no rules.

Differential Revision: https://phabricator.services.mozilla.com/D27529
2019-05-01 17:19:08 +00:00
Masayuki Nakano
7f6bfb8791 Bug 1547535 - Move all a11y code in nsIPresShell to mozilla::PresShell r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D29196
2019-04-30 07:53:20 +00:00
Masayuki Nakano
70415b08f2 Bug 1547621 - Move all inline methods of nsIPresShell into mozilla::PresShell r=smaug
And also this patch moves some related methods which use the inline methods
and member variables used only by them.

Differential Revision: https://phabricator.services.mozilla.com/D29201
2019-04-30 01:52:53 +00:00
Masayuki Nakano
12b5544904 Bug 1545342 - part 2: Make some public enum of nsIPresShell move to mozilla namespace and defined as enum class in PresShellForwards.h r=smaug
This patch moves some `enum` in `nsIPresShell` which are in public scope into
`mozilla` namespace and change them as `enum class`es.

Unfortunately, only "where to scroll" enum is just defines constants of
percentages of scroll destination.  Therefore, this patch makes only them
as `static const`.

Differential Revision: https://phabricator.services.mozilla.com/D28606
2019-04-25 05:04:15 +00:00
Emilio Cobos Álvarez
fb0ce77605 Bug 1546046 - Remove support for XBL resources. r=TYLin
So much unsound code going away :-)

Differential Revision: https://phabricator.services.mozilla.com/D28380
2019-04-23 16:43:15 +00:00
Bogdan Tara
76d9bb886c Backed out changeset e85cb54e5944 (bug 1546046) complementary backout after 1470880 was backed out CLOSED TREE 2019-04-23 06:55:29 +03:00
Emilio Cobos Álvarez
e74cdacc5c Bug 1546046 - Remove support for XBL resources. r=TYLin
So much unsound code going away :-)

Differential Revision: https://phabricator.services.mozilla.com/D28380
2019-04-22 21:57:22 +00:00
Masayuki Nakano
394fc8aa9f Bug 1544343 - part 3: Make layout use mozilla::PresShell instead of nsIPresShell as far as possible r=emilio
This patch changes remaining things under `layout/`.  However, there are some
places which still need to use `nsIPresShell`.  That will be fixed in a
follow up bug.

Differential Revision: https://phabricator.services.mozilla.com/D27477
2019-04-16 07:25:10 +00:00
Masayuki Nakano
ad09cbb08f Bug 1544343 - part 2: Make factory methods take mozilla::PresShell instead of nsIPresShell r=emilio
Additionally, this patch makes `nsFrame.h` stop including `nsIPresShell.h`
and makes each users include `mozilla/PresShell.h` instead.  So, this improves
rebuild performance of `nsIPresShell.h` (and `mozilla/PresShell.h` in the
future).

Note that due to `nsIFrame::PresShell()`, `mozilla::` prefix is necessary for
`PresShell` in a lot of classes which are derived from `nsIFrame` even in
`.cpp` files.

Differential Revision: https://phabricator.services.mozilla.com/D27476
2019-04-16 07:24:49 +00:00
Masayuki Nakano
07eac02be2 Bug 1544343 - part 1: Make nsFrameManager, nsCSSFrameConstructor and nsFrameConstructorState use mozilla::PresShell directly rather than via nsIPresShell r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D27475
2019-04-16 07:24:29 +00:00
Ting-Yu Lin
0aba7bc866 Bug 1541679 - Skip pseudo frames when finding multicol containing block for reframing. r=bzbarsky
This patch does something similar to GetIBContainingBlockFor() because
pseudo frames are not good reframe target.

Differential Revision: https://phabricator.services.mozilla.com/D26858
2019-04-16 05:35:51 +00:00
Emilio Cobos Álvarez
c045432df4 Bug 1543672 - The counters code should use atoms rather than strings. r=mats,boris
Servo already atomizes the counter names, it makes no sense to copy the string
rather than bumping the refcount.

Differential Revision: https://phabricator.services.mozilla.com/D27061
2019-04-15 20:11:45 +00:00
Masayuki Nakano
5430c16991 Bug 1543013 - part 2: Make accessible use mozilla::PresShell directly rather than via nsIPresShell r=Jamie
This patch makes accessible module use `mozilla::PresShell` directly rather
than via `nsIPresShell`.  Additionally, renames `DocAccessible::PresShell()`
to `DocAccessible::PresShellPtr()` for avoiding conflict with using
`PresShell` in it and its sub classes.

Differential Revision: https://phabricator.services.mozilla.com/D26663
2019-04-13 12:13:15 +00:00
Masayuki Nakano
dbcabe5901 Bug 1540990 - Get rid of unnecessary nsIPresShell.h inclusions r=emilio
A lot of files include `nsIPresShell.h` even though currently they don't
need it.  This patch removes the unnecessary inclusions.

Differential Revision: https://phabricator.services.mozilla.com/D25744
2019-04-04 00:19:48 +00:00
Razvan Maries
5e691f8a46 Backed out changeset 3b94c20ba873 (bug 1540990) for build bustages. CLOSED TREE 2019-04-04 02:44:00 +03:00
Masayuki Nakano
0fd36d1719 Bug 1540990 - Get rid of unnecessary nsIPresShell.h inclusions r=emilio
A lot of files include `nsIPresShell.h` even though currently they don't
need it.  This patch removes the unnecessary inclusions.

Differential Revision: https://phabricator.services.mozilla.com/D25744
2019-04-03 23:29:38 +00:00
Ting-Yu Lin
804d391ad2 Bug 1540337 - Assert blockFrame is valid in the beginning of ConstructBlock(). r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D25490
2019-03-30 22:06:06 +00:00
Sylvestre Ledru
d42e742a3e Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D24168
2019-03-31 15:12:55 +00:00
Narcis Beleuzu
2d89ecb98a Merge autoland to mozilla-central. a=merge 2019-03-30 23:43:56 +02:00
Ting-Yu Lin
38fbc00ef0 Bug 1517080 Part 6 - Remove nsFrameItems alias, and rename variables with suffix "Items" to "List". r=mats
Differential Revision: https://phabricator.services.mozilla.com/D15556
2019-03-30 04:45:47 +00:00
Ting-Yu Lin
19fa1c0774 Bug 1517080 Part 5 - Rename nsAbsoluteItems to mozilla::AbsoluteFrameList. r=mats
Also, rename variables that have suffix "Items" to "List".

Differential Revision: https://phabricator.services.mozilla.com/D15555
2019-03-30 04:45:40 +00:00