Commit graph

85 commits

Author SHA1 Message Date
Martin Robinson
8dece05980
fonts: Add support for WOFF2 and properly load web fonts from @imports (#31879)
This change also makes two fixes that are necessary to get WOFF2 fonts
working:

1. It adds support for loading web fonts from stylesheets included via
   @import rules.
2. It ensure that when web fonts are loaded synchronusly they invalidate
   the font cache. This led to incorrect font rendering when running
   tests before.

Fixes #31598.
2024-03-26 20:31:52 +00:00
Oriol Brufau
39f660f520
Allow pre-wrap whitespace to hang at the end of the line (#31681)
* Allow pre-wrap whitespace to hang at the end of the line

* Use bitflags
2024-03-15 16:12:41 +00:00
Oriol Brufau
99c14c83ed
Obey white-space when intrinsically sizing an IFC (#31660)
The old logic was assuming that all whitespace was a break opportunity,
and that no newlines would be preserved.

Note that text shaping considers the advance of a newline to be the same
as a space. This was problematic because if we have a segment with a
preserved space and newline, only the advance of the space should
contrinute to the size of the block container. Therefore, I'm changing
the breaker logic in other to have newline characters in their own
segment.

Then glyph_run_is_whitespace_ending_with_preserved_newline can just be
renamed to glyph_run_is_preserved_newline.

This patch is still not perfect because it doesn't check allow_wrap(),
so `nowrap` is treated like `normal`, and `pre-wrap` like `pre`.
2024-03-15 12:45:23 +00:00
Servo WPT Sync
60e4c1adb4
Update web-platform-tests to revision b'd9a5cc25fc5f520bde022cee67e9e6a6f0b588f9' (#31599) 2024-03-10 05:11:24 +00:00
Oriol Brufau
007a31c1b5
Enable CSS Tables by default (#31470)
And remove the pref `layout.tables.enabled`.
2024-03-07 10:09:10 +00:00
Mukilan Thiyagarajan
8f3e1bcabe
Enable css-text explicitly in include.ini (#31502)
* Enable `css-text` explicitly in include.ini

The WPT test runner has some strange logic for determining
the key's value for a node like `[css]` or `[css-text]`.
In this logic, if the node doesn't have an explicit value for
a key (here `skip`), then the implicit root node's setting
(i.e key/value pair at the top of the file that is not nested
under a heading) is used as the default fallback value [1]. Only
when the implicit root node doesn't have an explicit value set
does the logic starts looking at the current node's parent [2].

In our case, in `include.ini` the default value for `skip`
is `true` as that is the first line in the file.
Since `[css-text]` doesn't have `skip` set explicitly, the
default value of `true` is used even though the parent's
value is `false`.

[1]: 2bafcf9f18/tests/wpt/tests/tools/wptrunner/wptrunner/wptmanifest/backends/conditional.py (L265)
[2]: 2bafcf9f18/tests/wpt/tests/tools/wptrunner/wptrunner/manifestinclude.py (L59)

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

* Update text expectations

---------

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2024-03-05 10:56:18 +00:00
Servo WPT Sync
32f1d07323
Update web-platform-tests to revision b'a39b23cb150d1ca3eddf7f2097ffe792a5f911e5' (#31425) 2024-02-25 06:16:30 +00:00
Martin Robinson
d8b326528b
layout: Add initial support for text-transform (#31396)
This adds basic support for `text-transform` in a way that is more
complete than legacy layout. There are still many missing elements of
proper `text-transform` support such as:

1. Support for `full-width` and `full-size-kana`
2. Support for grapheme based uppercasing, lowercasing, and
   capitalization. These are all done per-code point right now.
3. Support for the language-specific `SpecialCasing.txt` cases for case
   mapping such as the ones for Irish and Turkish.

Co-authored-by: Rakhi Sharma <atbrakhi@igalia.com>
2024-02-22 14:15:59 +00:00
Martin Robinson
cdc3c369f0
layout: Implement support for font fallback (#31254)
This adds an initial implementation of font fallback, on part with the
one used in legacy layout. There are still issues. For instance, font
matching is done per unicode character rather than based on graphemes or
the shape first approach of Chrome. The idea is that these changes can
be made later.
2024-02-11 10:08:49 +00:00
Servo WPT Sync
03ac032798
Sync WPT with upstream (11-02-2024) (#31309)
* Update web-platform-tests to revision b'33d11f1db34802fda00e64ddeb0b7ef040cf65be'

* Update expectations

---------

Co-authored-by: sagudev <16504129+sagudev@users.noreply.github.com>
2024-02-11 08:01:56 +00:00
Servo WPT Sync
29c206a702
Sync WPT with upstream (04-02-2024) (#31256)
* Update web-platform-tests to revision b'faa6d42ce21d126155dee771786ad7c74efbcba5'

* Update test expectation

---------

Co-authored-by: cybai <cyb.ai.815@gmail.com>
2024-02-05 06:17:23 +00:00
Servo WPT Sync
20136cad7f
Sync WPT with upstream (28-01-2024) (#31204)
* Update web-platform-tests to revision b'bdd3b533e8c995e416630422ad64f4c70086b42f'

* Update expectations

---------

Co-authored-by: sagudev <16504129+sagudev@users.noreply.github.com>
2024-01-28 18:33:58 +00:00
Servo WPT Sync
23a4a750be
Update web-platform-tests to revision b'a10b8c0164b4c4521040898ee9394738aca488b0' (#31144) 2024-01-21 06:53:06 +00:00
Servo WPT Sync
e7d2d23e1e
Update web-platform-tests to revision b'5049a31d2a7eebd7bca08317e56664021a8bd36c' (#31085) 2024-01-14 04:22:04 +00:00
Servo WPT Sync
cad3ca2512
Sync WPT with upstream (25-12-2023) (#30938)
* Update web-platform-tests to revision b'73caf716542762aab6646f0a02de208bc0ec4124'

* Update expectations

---------

Co-authored-by: sagudev <16504129+sagudev@users.noreply.github.com>
2023-12-26 08:08:45 +00:00
Martin Robinson
74798c4b7b
layout: Add support for text-align-last (#30905)
This change adds support for `text-align-last` as well as ensuring that
it also applies to lines before forced line breaks. Two tests start to
fail because they rely on right-to-left text to pass:

 - /css/css-text/text-align/text-align-last-010.html.ini
 - /css/css-text/text-align/text-align-last-011.html.ini
2023-12-21 14:45:34 +00:00
Martin Robinson
ccf0b739df
Add basic support for text-align: justify (#30807)
This also enables parsing of `text-justify` for non-legacy layout,
though only None is supported (disabling justification).
2023-12-15 14:00:13 +00:00
Martin Robinson
cdbd60fe53
Extend character-based soft wrap prevention to before atomics (#30800)
The changes in #30740, fixed an issue where certain characters should
prevent line break opportunity after atomics. This change extends that
to also apply to before atomics, which is what the specification says
should happen.
2023-12-01 09:26:49 +00:00
Martin Robinson
f1c291853e
Stop sending " " to linebreaker for replaced content (#30740)
We previously sent a " " to the linebreaker in order to ensure that the
next text had a soft wrap opportunity at the start. Calling `next(" ")`
without waiting until the returned index was 1, violated some
invariants of linebreaker ultimately causing a panic.

Instead of using the linebreaker for this, simply keep a flag in the
IFC layout state, which avoids the problem entirely.

Fixes #30703.
2023-11-30 14:46:14 +00:00
Servo WPT Sync
3fc584d1a1
Sync WPT with upstream (12-11-2023) (#30724)
* Update web-platform-tests to revision b'46476776fdbf0a62522621002ba8af68e4d478b6'

* wpt import: update expectation

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

---------

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2023-11-15 05:55:31 +00:00
Martin Robinson
6c4f098d41
Add better support for line breaking across inline box boundaries (#30628)
Earlier versions of inline layout in the new layout system did not
properly support line breaking when unbreakable segments spanned
multiple inline boxes. This change updates inline layout to add support
for that. Now items are added to an unbreakable segment before being
committed to a line.

Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2023-11-01 13:27:14 +00:00
Servo WPT Sync
4ea042cb14
Sync WPT with upstream (29-10-2023) (#30641)
* Update web-platform-tests to revision b'9f24a7061dc47c00ffe3f0f6dda5822a9b15c2a5'

* Update expectations

---------

Co-authored-by: sagudev <16504129+sagudev@users.noreply.github.com>
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2023-10-31 05:06:17 +00:00
Servo WPT Sync
65beca94cd
Sync WPT with upstream (24-10-2023) (#30607)
* wpt sync: adapt code for new TestRoot class

Fixes #30558

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

* temp change to allow wpt sync build to pass

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

* Update web-platform-tests to revision b'0d5028f200c8651b17bb224657d6e1065adcff37'

* Revert "temp change to allow wpt sync build to pass"

This reverts commit bad72c7f87.

* revert metadata update for intermittent timeouts

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

---------

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2023-10-25 07:26:53 +00:00
Martin Robinson
d7207122c0
Don't panic when no font is found for a TextRun (#30581)
Instead of panicking when no found is found for a TextRun, instead print
a warning. This prevents panics on pages with very large font sizes.
2023-10-19 16:59:54 +00:00
Martin Robinson
8a12b4c957
Improve line box block size calculation (#30519)
Improve the calculation of the block size of line boxes and all their
component elements. Even empty spans can increase the size of the line
based on their font-size. Elements that have a line-height should
increase the block size of the line, but that setting should not effect
their own size.

In addition to the new passes there are some new failures

Failing because a progression exposes the real issue these tests are
testing:

- css/css-color/t32-opacity-offscreen-multiple-boxes-1-c.xht
- css/css-color/t32-opacity-offscreen-multiple-boxes-2-c.xht

Likely failing because of vertical-align and another sizing issue:

- css/css-transforms/perspective-untransformable-no-stacking-context.html

Failing because a progression reveals another failure:

 - html/rendering/non-replaced-elements/hidden-elements.html

Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2023-10-18 09:35:19 +00:00
Servo WPT Sync
5eed4e978c
Sync WPT with upstream (08-10-2023) (#30516)
* Update web-platform-tests to revision b'3d46548c5fbeb3c1b5f6bc5ae0854e0a1a0462ff'

* Revert expectation for column-count-crash.https.html

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

---------

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2023-10-08 16:57:16 +00:00
Servo WPT Sync
c06ec90151
Sync WPT with upstream (04-10-2023) (#30493)
* Update web-platform-tests to revision b'dfda99176a5d552fb1129fa353b7e4c69f6ed92c'

* fix linter errors after WPT import

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

* Update expectations

---------

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: sagudev <16504129+sagudev@users.noreply.github.com>
2023-10-06 00:51:48 +00:00
Martin Robinson
38d9a5eae0
Improve intrinsic sizing and white-space handling around forced line breaks (#30351)
* Take forced line breaks into account for intrinsic size

Fixes #30350.

* Don't linebreak on collapsible whitespace

This whitespace can hang off the end of the line, because it will be
trimmed LineItem layout.

* Update float placement after line breakage

Also don't ever line break for collapsible whitespace.

* Fix a few more test cases and clean up

* Renaming according to review comments
2023-09-15 11:12:59 +00:00
Martin Robinson
ea09c5ba5a
Fix handling of white-space property for wrapping (#30259)
This still fails some tests because on element boundaries we want the
`white-space` property of the first shared ancestor.
2023-09-04 09:38:40 +00:00
Martin Robinson
96c51ba2e7
Flow inlines around floats (#30243)
This implements the rest of the bulk of float support. Now inline
element flow around floats and floats can be pushed down by inline
elements before them.

Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2023-08-31 10:54:54 +00:00
Servo WPT Sync
5cfa80e86f
Sync WPT with upstream (20-08-2023) (#30143)
* Update web-platform-tests to revision b'50e91f3cfd1140cafc188516488f2dca289239af'

* Delete flaky result for css2/linebox/vertical-align-baseline-002

* Delete flaky result for html/rendering/bindings/the-textarea-element-0/cols-default.html.ini

* Delete flaky result for CSS2/lists/list-style-applies-to-001.xht.ini

---------

Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2023-08-22 11:36:48 +00:00
Mukilan Thiyagarajan
33fa49c8ed
Fix mach test-wpt to make crash tests work (#29832)
* Fix `mach test-wpt` to make crash tests work

There are two issues related to crash tests:
1. test-wpt is unable to find existing crash tests even when
   called with --test-types=crashtests. The fix here is to
   add crashtests to the default test suite types to python/wpt/run.py
2. When running in headless mode, crashes in style threads
   don't cause servo to crash because the logic in constellation.rs
   currently calls handle_panic only when the top-level browsing
   context id is some value. Since style pool threads are shared,
   they always generate Panic messages with None as top-level
   browsing context id.

Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

* Send bactrace to stderr and capture it in test runner

Servo's panic hook writes backtraces to stdout. This
patch changes it so they are written to stderr.

The crash test executor for servo in WPT grouping formatter
was also not capturing the output correctly for crashtests
as the log events were being aggregated based on thread name
which doesn't seem to match correctly in case of crashtests.
This patch also fixes the log grouping logic to be based on
test name.

Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

* crashtests: update expectations for layout 2020

Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

* crashtests: update expectations for layout 2013

Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

* remove outdated & intemittent test expectations

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>

---------

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2023-08-18 23:43:32 +00:00
Oriol Brufau
963104e5fc
Run same tests for layout-2020 and layout-2013 (#30092)
Most tests were only being run for layout-2013, not for layout-2020.
This wasn't great since layout-2020 is now the default.

So this patch unifies the lists of included tests for both layouts.
For layout-2013 this implies adding css/css-content/, css/css-logical/
and css/css-masking/clip/.
For layout-2020 this implies adding several additional css tests, and
also tests like dom/, js/, html/, etc.
2023-08-15 00:28:32 +00:00
WPT Sync Bot
209b7ad36b Update web-platform-tests to revision b'7b682ab07397d72fceb6594d0f27cb36cf1d8ee3' 2023-06-25 01:32:25 +00:00
Martin Robinson
f4578afdfe
Rename metadata directories
This renames:
 - `tests/wpt/metadata` → `tests/wpt/meta-legacy-layout`
 - `tests/wpt/metadata-layout-2020` → `tests/wpt/meta`
 - `tests/wpt/mozilla/meta` → `tests/wpt/mozilla/meta-legacy-layout`
 - `tests/wpt/mozilla/meta-layout-2020` → `tests/wpt/mozilla/meta`
2023-06-22 21:15:41 +02:00