Commit graph

391 commits

Author SHA1 Message Date
Josh Matthews
277c0b82dd
Ignore cert errors when running wdspec tests. (#36327)
This change makes the wdspec configuration match our other browser
configurations to account for #30080.

Testing: Tested locally, since we don't run webdriver conformance tests
in CI yet. The STR from the issue do not reproduce the same problem any
longer.
Fixes: #36326.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2025-04-04 06:24:10 +00:00
Michael Rees
dfcd9de138
fix: root element not establishing stacking context (#35390) (#36174)
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #35390 
- [X] There are tests for these changes

[Successful WPT
run](https://github.com/reesmichael1/servo/actions/runs/14097679625)
(which includes the new test files)

(I didn't make the formatting changes intentionally--those came from
`mach format` following `mach test-tidy`.)

---------

Signed-off-by: Michael Rees <mrees@noeontheend.com>
2025-04-03 17:30:42 +00:00
Simon Wülker
0e99539dab
Support single-value <select> elements (#35684)
https://github.com/user-attachments/assets/9aba75ff-4190-4a85-89ed-d3f3aa53d3b0



Among other things this adds a new `EmbedderMsg::ShowSelectElementMenu`
to tell the embedder to display a select popup at the given location.

This is a draft because some small style adjustments need to be made:
* the select element should always have the width of the largest option
* the border should be part of the shadow tree

Apart from that, it's mostly ready for review.

<details><summary>HTML for demo video</summary>

```html
<html>

<body>
<select id="c" name="choice">
  <option value="first">First Value</option>
  <option value="second">Second Value</option>
  <option value="third">Third Value</option>
</select>
</body>
</html>
```
</details>

---

<!-- Thank you for contributing to Servo! Please replace each `[ ]` by
`[X]` when the step is complete, and replace `___` with appropriate
data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] Part of https://github.com/servo/servo/issues/3551
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because ___

<!-- Also, please make sure that "Allow edits from maintainers" checkbox
is checked, so that we can help you if you get stuck somewhere along the
way.-->

<!-- Pull requests that do not address these steps are welcome, but they
will require additional verification as part of the review process. -->

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2025-04-03 12:11:55 +00:00
Oriol Brufau
1f13e8b596
layout: Allow collapsing bottom margins with any indefinite block size (#36278)
According to CSS2, the bottom margin of a block container can collapse
with the bottom margin of its last in-flow child if `height` computes to
`auto`.

However, according to CSS Sizing, that was "legacy spec prose" and
should be interpreted as "behaves as `auto`".

Therefore, cyclic percentages and intrinsic keywords like `min-content`
shouldn't prevent margin collapse, because they behave as `auto`.

This change aligns Servo with Gecko and Blink, but diverges from WebKit.

https://www.w3.org/TR/CSS22/box.html#collapsing-margins
https://www.w3.org/TR/css-sizing/#behave-auto

Testing:
-
`tests/wpt/tests/css/css-sizing/margin-collapse-with-indefinite-block-size-001.html`
-
`tests/wpt/tests/css/css-sizing/margin-collapse-with-indefinite-block-size-002.html`
-
`tests/wpt/tests/css/css-sizing/margin-collapse-with-indefinite-block-size-003.html`
-
`tests/wpt/tests/css/css-sizing/margin-collapse-with-indefinite-block-size-004.html`
-
`tests/wpt/tests/css/css-sizing/margin-collapse-with-indefinite-block-size-005.html`

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-04-02 12:10:04 +00:00
Servo WPT Sync
c593e15fa8
Update web-platform-tests to revision b'efce5c7cd31b0e1add4f41758504c767b56abeed' (#36222)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2025-03-30 01:40:11 +00:00
Servo WPT Sync
ecaf2930cc
Update web-platform-tests to revision b'9d20f3ae600d00673a27a69f69e13d4cd8eca443' (#36195)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2025-03-28 06:07:42 +00:00
Martin Robinson
b4a768cfc7
layout: Ensure compatible positioning context during flexbox block content sizing calculation (#36123)
Sometimes column Flexbox needs to do an early layout pass to determine
the preferred block content size of flex items. Previously the
absolutely positioned children created during this pass were discarded,
but now they are cached to be possibly used during the final layout
phase of the flex item. Since they are not thrown away, it is necessary
that the `PositioningContext` used to collect them is compatible with
their final `PositioningContext`.

Fixes #36121.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2025-03-25 09:41:59 +00:00
Kenzie Raditya Tirtarahardja
40270cb626
Make input element display-inside always flow-root (#35908)
Signed-off-by: Kenzie Raditya Tirtarahardja <kenzieradityatirtarahardja.18@gmail.com>
Co-authored-by: Kenzie Raditya Tirtarahardja <kenzieradityatirtarahardja.18@gmail.com>
2025-03-23 00:45:59 +00:00
Oriol Brufau
a9afc631ae
layout: Obey sizing keywords in layout_for_block_content_size() (#36015)
We were ignoring sizing keywords on the min and max sizing properties.
With this, flexbox layout has full support for sizing keywords.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-03-19 11:38:30 +00:00
Oriol Brufau
09fe51f55a
layout: Fix intrinsic contributions of indefinite stretch keyword (#36030)
In #35630 I treated an indefinite `stretch` as 0px on min sizing
properties, and as `none` on max sizing properties. However, this was
only for final layout sizes, I forgot about intrinsic contributions.

Blink already modified the relevant test, I'm just reordering it a bit
since we are no longer treating `stretch` as `fit-content`, so it seems
better to test it at the end.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-03-18 19:19:53 +00:00
Servo WPT Sync
eb3c48f9d3
Update web-platform-tests to revision b'18fda923cafeb4e3e0546ffcfb2302c3b1b11f98' (#36019)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2025-03-18 05:51:39 +00:00
Josh Matthews
21ecfdd088
Various fixes for webdriver conformance tests (#35737)
* servodriver: Ensure capabilities is always a non-empty value.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* webdriver: Serialize arguments object like an array.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* webdriver: Ensure script body is always valid JS.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* webdriver: Use current browsing context when getting element center point.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* webdriver: Propagate errors received from getting element center point.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* webdriver: Ensure opening a new window records a unique window handle.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* webdriver: Don't panic if script execution fails.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* webdriver: Do not update the current browsing context after closing a window.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* Formatting.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* webdriver: Use more precise check for arguments exotic object.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

* Formatting.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2025-03-15 13:54:14 +00:00
Xiaocheng Hu
62d6759106
Check whether an element is custom in the spec-compliant way (#35960)
* Check whether element is custom in spec-compliant way

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>

* Update tests

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>

---------

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>
2025-03-13 18:03:57 +00:00
Oriol Brufau
f93006af95
Improve logic for establishing a stacking context (#35947)
In particular:
 - `z-index` will now work on unpositioned grid items.
 - `will-change: z-index` will only establish a stacking context if
   `z-index` applies, i.e. if the box is positioned or a flex/grid item.
 - The conditions in `establishes_stacking_context()` are reordered,
   so that the most likely ones are checked first.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-03-13 06:49:08 +00:00
Oriol Brufau
98816b753c
layout: Remove special height logic of replaced element with auto width (#35275)
When computing the intrinsic block size of a replaced element with a
computed preferred inline size of `auto`, instead of transferring the
final inline size through the aspect ratio, we were only transferring
the min and max constraints.

We did this to match other browsers, but Ian Kilpatrick agreed that this
is a bug and plans to change Blink.

CSSWG issue: https://github.com/w3c/csswg-drafts/issues/11236

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-03-13 00:57:26 +00:00
Oriol Brufau
56da4ad959
layout: Only prevent fixed table layout when inline-size is auto (#35882)
We were ignoring `table-layout: fixed` both for `inline-size: auto` and
`inline-size: max-content`. However, the CSSWG resolved that fixed table
layout should be triggered except when `inline-size` is `auto`.
https://github.com/w3c/csswg-drafts/issues/10937#issuecomment-2669150397

Blink has already adopted this change, and they modified the WPT
`/css/css-tables/fixed-layout-2.html` accordingly. Here I'm doing some
further cosmetic cleanups to the test.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-03-10 14:09:43 +00:00
Oriol Brufau
6cfa94f3bc
Add test for percentage sizes resolving against subpixel lengths (#35809)
Two floats with `width: 50%` each should fit on the same line,
and four floats with `width: 25%` each should fit on the same line.
That's even if the containing block width, expressed in layout units,
cannot be divided by 2 or 4.
This test checks cases that are tricky for browsers where 1 pixel
are either 60, 64 or 100 layout units.
It passes on other browsers but fails on Servo because of #34665.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-03-10 12:09:21 +00:00
Servo WPT Sync
66583ce3c9
Update web-platform-tests to revision b'c23b0ad587af296087067b48a2f2101233589a8f' (#35869)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2025-03-09 01:39:16 +00:00
Daniel Hast
34b000c86e
layout: Make transform-style: preserve-3d establish a containing block for all descendants (#35808)
* layout: Fix behavior of `transform-style: preserve-3d`

This makes `transform-style: preserve-3d` establish a containing block
for all descendants, as specified here:
<https://drafts.csswg.org/css-transforms-2/#transform-style-property>

Signed-off-by: Daniel Hast <hast.daniel@protonmail.com>

* layout: Check for transformable elements

Adds a new `is_transformable` helper method and use this in several other
methods, including the methods for whether the fragment establishes a
new stacking context or a containing block for all descendants.

Signed-off-by: Daniel Hast <hast.daniel@protonmail.com>

* Use generic green square reference for reftest.

Signed-off-by: Daniel Hast <hast.daniel@protonmail.com>

* layout: Fix stacking context & containing block checks.

Only the computed value of `transform-style` should be used to determine
whether the element establishes a stacking context and/or a containing
block, not the used value.

Signed-off-by: Daniel Hast <hast.daniel@protonmail.com>

* Update clip-no-stacking-context test expectation to pass.

Signed-off-by: Daniel Hast <hast.daniel@protonmail.com>

---------

Signed-off-by: Daniel Hast <hast.daniel@protonmail.com>
2025-03-07 17:39:59 +00:00
Servo WPT Sync
5ba9cfe809
Update web-platform-tests to revision b'fc557e215e11221c91de4f283539725ef2f35928' (#35741)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2025-03-02 12:18:38 +00:00
Xiaocheng Hu
11f54b9f23
layout: Implement a non-recursive version of CSS quotes (#34770)
* Squash and don't explicitly use noto-cjk in tests

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>

* Mark quotes-034.html.ini failure

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>

* Address review comments

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>

---------

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>
2025-02-27 16:00:21 +00:00
Oriol Brufau
1966ab182f
layout: Use definite cross size to compute flex base size (#35688)
An intrinsic flex base size depends on the contents, which may depend on
the cross size through an aspect ratio. We were only taking this into
account if the preferred cross size was numeric, but `auto` or `stretch`
can also be definite.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-02-27 13:54:44 +00:00
Oriol Brufau
03e953e22c
layout: Support stretch cross size for flex base size (#35663)
The computation of the flex base size may involve transferring a
definite cross size into the main axis through the aspect ratio.
We were only considering numeric sizes as definite, but `stretch` can
also be definite.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-02-26 18:03:38 +00:00
Oriol Brufau
6aae4df909
layout: Support stretch cross size for automatic min size in flexbox (#35652)
The computation of the automatic minimum size may involve transferring
a definite cross size into the main axis through the aspect ratio.
We were only considering numeric sizes as definite, but `stretch` can
also be definite.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-02-26 16:30:36 +00:00
Martin Robinson
c844ed232a
servoshell: Fall back to PNG format when outputting an image (#35648)
A recent change, #35538 added the ability to dump different output image
formats. Unfortunately, this necessitated adding a file extension to the
output image for WPT tests. This had two problems:

1. The original change never landed properly in WPT for unknown reasons.
2. It interfered with the way that temporary files were cleaned up
   during WPT runs.

This change modifies the image dumping code to fall back to PNG format
when there is no valid file extension on the output image and reverts
the change made to the WPT runner.

Fixes #35635.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2025-02-25 08:38:28 +00:00
Kingsley Yung
fc14b10099
Support for the isolation CSS property (#35552)
* Support for the isolation CSS property

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>

* Temporarily bump stylo to refs/pull/125/head for testing

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>

* Remove FAIL expectation of CSS isolation tests

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>

* Add behavior test

Signed-off-by: Oriol Brufau <obrufau@igalia.com>

* Revert temporary changes in Cargo.toml

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2025-02-24 16:25:34 +00:00
Oriol Brufau
41c2422a66
layout: Ignore indefinite stretch on min and max sizing properties (#35630)
We were always treating an indefinite `stretch` as the automatic size.
This instead treats it as `0px` on min sizing properties, and as `none`
on max sizing properties, aligning with Blink and this recent CSSWG
resolution: https://github.com/w3c/csswg-drafts/issues/11006

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-02-24 13:51:08 +00:00
Xiaocheng Hu
2b0d2ecc73
Rebase and squash (#35567)
Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>
2025-02-21 11:54:25 +00:00
Martin Robinson
54b5c7b632
compositing: Move image output and shutdown management out of the compositor (#35538)
This is a step toward the renderer-per-WebView goal. It moves various
details out of `IOCompositor`.

- Image output: This is moved to servoshell as now applications can
  access the image contents of a `WebView` via
  `RenderingContext::read_to_image`. Most options for this are moved to
  `ServoShellPreferences` apart from `wait_for_stable_image` as this
  requires a specific kind of coordination in the `ScriptThread` that is
  also very expensive. Instead, paint is now simply delayed until a
  stable image is reached and `WebView::paint()` returns a boolean.
  Maybe this can be revisited in the future.
- Shutdown: Shutdown is now managed by libservo itself. Shutdown state
  is shared between the compositor and `Servo` instance. In the future,
  this sharing might be unecessary.
- `CompositeTarget` has been removed entirely. This no longer needs to
   be passed when creating a Servo instance.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Ngo Iok Ui (Wu Yu Wei) <yuweiwu@pm.me>
2025-02-20 18:27:49 +00:00
Oriol Brufau
c2224d5afc
layout: Partial support for sizing keywords on flex items (#35469)
* Add tests for sizing keywords on flex items

Signed-off-by: Oriol Brufau <obrufau@igalia.com>

* layout: Partial support for sizing keywords on flex items

When a flex item has `flex-basis: auto`, the used `flex-basis` is the
value of the main size property. In that case, if the main size property
was set to keyword, we were always assuming it was `auto`. Now we handle
non-`auto` keywords correctly.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>

---------

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-02-17 17:51:10 +00:00
Gae24
966888615f
DataTransferItem: improve spec compliance (#35418)
* DataTransfer: remove PlainString and Binary structs

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>

* add DataTransferItemList remove() test case

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>

* bring datatransferitem closer to the spec

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>

* queue a task to invoke the callback

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2025-02-16 18:53:35 +00:00
Servo WPT Sync
6d6070242b
Update web-platform-tests to revision b'de61904887c13679551c32e5e3e70b4dc870c98a' (#35480)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2025-02-16 01:35:48 +00:00
Mukilan Thiyagarajan
b7b8619e87
script: reset spurious frame counter *only* when reflow is triggered (#35435)
I had applied a review suggestion in the previous PR to combine the
nested conditions, but this is wrong as this meant the spurious frame
callback was getting reset not just when the reflow was triggered by the
callback, but also each time the counter reached the threshold.

The test added in the previous PR also had issues with the upstream WPT
repo's lint checks - `test.step_timeout` should be used instead of the
`setTimeout` function.

This patch fixes the counter update logic and also addresses the linting
issue caught by upstream's linter.

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2025-02-12 14:23:55 +00:00
Oriol Brufau
87069e9f47
Test overflow-clip-margin with border-radius (#35433)
Assert that the resulting shape is the same as a spreading `box-shadow`.
Firefox fails this test.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-02-12 11:02:57 +00:00
Mukilan Thiyagarajan
bcbb1d67d5
script: fix spurious animation checks to correctly invoke rAF callbacks (#35387)
After running an `rAF` callback, if no new callbacks were registered, we
send a `NoAnimationFramesCallback` to the compositor to stop ticking
animations using video refresh callbacks. This interacts badly with the
mechanism to track spurious animations frames i.e. rAF callbacks that
don't mutate the DOM. Such 'faked' rAF callbacks are triggered by
registering a oneshot timer instead of the compositor callback.

The compositor's refresh callback is never enabled back again once a
non-spurious rAF callback runs and registers a new rAF callback. If the
former callback resets the `spurious_animations_frames` counter, then when
the latter rAF callback runs, it will not schedule a OneShotTimer timer
for any rAF callback that itself registers, since the counter was reset
previously. Hence that third rAF callback that never runs as it relies
on the compsitor's refresh callback, which was disabled previously.

The current logic also doesn't actually recognize spurious animation
frames because the `spurious_animations_frames` counter is updated at
the end of the `run_the_animation_frame_callbacks`, effectively meaning
`was_faking_animation_frames` and `self.is_faking_animation_frames` will
always be the same value but the logic effectively only runs when
`(!was_faking && is_faking)` is true.

This patch fixes the logic to detect spurious animations frames by
moving logic to update the counter to be before the check for spurious
frames. It also ensures that the compositor's refesh callbacks is
re-enabled once we see a non-spurious callback.


Fixes #35386

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2025-02-12 09:11:19 +00:00
Domenico Rizzo
bea7a969f4
implemented feture and tests (#35309)
Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2025-02-10 20:29:05 +00:00
Martin Robinson
75cf3d7265
dom: Always replace unpaired surrogates when handling page text (#35381)
Background:

> JavaScript strings are potentially ill-formed UTF-16 (arbitrary
> Vec<u16>) and can contain unpaired surrogates. Rust’s String type is
> well-formed UTF-8 and can not contain any surrogate. Surrogates are
> never emitted when decoding bytes from the network, but they can sneak
> in through document.write, the Element.innerHtml setter, or other DOM
> APIs.

In 2015, Servo launched an experiment to see if unpaired surrogates
cropped up in page content. That experiment caused Servo to panic if
unpaired surrogates were encountered with a request to report the page
to bug #6564. During that time several pages were reported with unpaired
surrogates, causing Servo to panic. In addition, when running the WPT
tests Servo will never panic due to the `-Z replace-surrogates` option
being passed by the test driver.

Motivation:

After this 10 year experiment, it's clear that unpaired surrogates are a
real concern in page content. Several reports were filed of Servo
panicking after encountering them in real world pages. A complete fix for
this issue would be to somehow maintain unpaired surrogates in the DOM,
but that is a much larger task than simply emitting U+FFD instead of an
unpaired surrogate.

Since it is clear that this kind of content exists, it is better for
Servo to try its best to handle the content rather than crash as
production browsers should not crash due to user content when possible.
In this change, I modify Servo to always replace unpaired surrogates.

It would have been ideal to only crash when debug assertions are
enabled, but debug assertions are enabled by default in release mode --
so this wouldn't be effective for WPT tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2025-02-09 08:56:05 +00:00
Servo WPT Sync
a284bbd29d
Update web-platform-tests to revision b'1a5b13545ae58e468ed11e4c21912a3faf3355ea' (#35384)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2025-02-09 01:38:02 +00:00
Steven Novaryo
9c769efb06
layout: Fix relative positioned grid item (#35014)
* layout grid item collected child

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

* Add WPT tests

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

* Add WPT tests

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

* Add WPT tests

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

* Fix fixed position descendant

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

* Run fmt

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

* Apply code quality suggestion

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

* Split up the WPT test

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

* Organize WPT test CSS

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

* Fix WPT css endline

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>

---------

Signed-off-by: stevennovaryo <steven.novaryo@gmail.com>
2025-02-07 23:40:54 +00:00
Xiaocheng Hu
4716dca505
Clean up some stale debug options for ServoDriver (#35281)
* Clean up some stale debug options for ServoDriver

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>

* Fix wpt manifest

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>

---------

Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>
2025-02-04 12:59:06 +00:00
Oriol Brufau
7301af8468
layout: Fix painting order of collapsed table borders (#35219)
In #35075 I painted them in front of the decorations (backgrounds and
borders) of any block-level box in the same stacking context. I did that
because other browsers paint them in front of the decorations of the
descendants of the table, but my approach also painted them in front of
decorations of following siblings of the table, which was wrong.

This patch makes it so that collapsed table orders are painted in the
same step as decorations. However, tables defer painting their collapsed
borders after the decorations of their descendants.

This matches Blink and WebKit, and brings us closer to Gecko (which is
slightly different in some corner cases).

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-02-03 14:46:40 +00:00
Servo WPT Sync
f364b3f6ea
Update web-platform-tests to revision b'f630424a79c1ae17deaaf27a21efdbca1378af0e' (#35258)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2025-02-02 01:40:50 +00:00
Oriol Brufau
a4c6c205d2
Avoid starting transitions if values can't be interpolated (#35234)
Bumps Stylo to https://github.com/servo/stylo/pull/115

This is mainly to avoid firing events like `transitionstart` when the
transition isn't actually allowed.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-01-31 16:37:59 +00:00
Oriol Brufau
bc7cdab46f
layout: Remove wrong optimization when placing table among floats (#35207)
When we try to place a table next to some floats, and it doesn't fit
vertically, then we try again considering more floats. And as an
optimization we were using the previous width of the table as a minimum.
However, this was wrong, because the table might accept a smaller width
when the available space is smaller than beforehand.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-01-29 15:54:52 +00:00
Oriol Brufau
7977357a57
layout: Zero out collapsed track sizes when painting collapsed borders (#35165)
We were painting collapsed borders without taking into account that some
tracks might have been "removed" by `visibility: collapse`.

This just sets the sizes of these tracks to zero. Note this implies that
collapsed borders may overlap each other, or overlap cell contents, but
this seems to match Blink.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-01-27 20:40:26 +00:00
Martin Robinson
6b04bc6263
layout: Take percentage columns into account when sizing table grid min and max (#35167)
The specification doesn't say how to deal with percentages when
determining the minimum and maximum size of a table grid, so follow the
approach that Chromium uses.

Essentially, figure out the "missing" percentage from the non-percentage
columns and then use that to work backwards to fine the size of the
percentage ones.

This change is larger than one might expect, because this percentage
approach shouldn't happen for tables that are descendants of a flex,
grid or table container (except when there is an interceding absolute).
We have to pass this information down when building the box tree. This
will also make it easier to improve propagated text decorations in the
future.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2025-01-27 15:04:37 +00:00
Servo WPT Sync
7045630fee
Update web-platform-tests to revision b'e5e7dab5e72edd352b17105acce2b8f443face10' (#35174)
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2025-01-26 13:36:52 +00:00
Oriol Brufau
ceebf99280
wpt: Fix references for /css/CSS2/tables/table-anonymous-objects-* (#35166)
Some of these tests were using `no_red_3x3_monospace_table-ref.xht` as
a reference. However, the reference has a single 3x3 table, while the
tests put each row on a different table. Thus text wasn't aligning well,
and the tests were failing on all browsers. Therefore this adds a new
reference for these tests.

Some other tests were instead adding a background on their columns.
These also get their own reference. But additionally, these tests
attempt to work as visual tests by overlapping two tables: one with
green text in front of another with red text. However, this feature
was broken since both tables had a background, so the underlying one
was not visible at all.
Therefore, I'm also removing the background of the table at the front.
Note that these tests come in pairs that just switch which one is in
front, so no functionality is lost.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-01-24 16:30:27 +00:00
Oriol Brufau
56d55d48d9
wpt: Fix /css/CSS2/tables/anonymous-table-box-width-001.xht (#35162)
This test was failing on all browsers because before the paragraph
"Test passes if there is a filled green square and *no red*" was getting
styled with some unnecessary CSS which is not present in the reference.

Removing this CSS which is irrelevant to the actual table being tested
fixes the problem.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-01-24 15:44:26 +00:00
Oriol Brufau
5e5379d3bf
layout: Hide collapsed borders crossed by spanning cells (#35129)
For example, a cell with `rowspan="2"` can cross a collapsed border that
was set on the rows. Now the slice of this row border that is crossed
by the cell will be hidden.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2025-01-23 14:23:03 +00:00