Commit graph

26619 commits

Author SHA1 Message Date
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
Delan Azabani
f60e5e767b
Revert remaining Stylo changes (#31408)
* Revert remaining changes from Stylo split-into-commits branch

* Do the minimum amount of formatting to appease mach test-tidy
2024-02-22 09:56:26 +00:00
Martin Robinson
1c2de6dd1d
Revert changes to servo_arc, style_derive, and style_traits (#31387)
This reverts the Rust edition updates to these three traits as well as
incorporates https://phabricator.services.mozilla.com/D117887. The
purpose of this change is to reduce the diff with upstream stylo.

Finally, formatting is disabled for these crates as well.
2024-02-22 04:40:37 +00:00
Oriol Brufau
4532f211be
Do not adjust margins in over-constrained cases (#31345)
This deviates from css2, but it's mandated by css-align, and matches
what other browsers do when no margin is 'auto'.

When some margin is 'auto', this should keep the proper round-tripping
behavior that Gecko and WebKit lack, and Blink recently adopted.
2024-02-21 17:07:20 +00:00
Martin Robinson
02ae1f448e
layout: Add support for table rows, columns, rowgroups and colgroups (#31341)
This adds support for table rows, columns, rowgroups and colgroups.
There are few additions here:

1. The createion of fragments, which allows script queries and hit
   testing to work properly. These fragments are empty as all cells are
   still direct descendants of the table fragment.
2. Properly handling size information from tracks and track groups as
   well as frustrating rules about reordering rowgroups.
3. Painting a background seemlessly across track groups and groups. This
   is a thing that isn't done in legacy layout (nor WebKit)!

Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2024-02-20 13:22:02 +00:00
atbrakhi
74c07db56c
make ContainingBlock use Au for inline_size and block_size (#31370) 2024-02-20 09:14:44 +00:00
Martin Robinson
2fa76916d3
Revert as many changes to selectors from upstream as possible (#31365)
This is part of the preparation for splitting stylo into a separate
crate. We have made various changes to selectors includings:

 1. Bumping the rust edition
 2. Fixing typos and updating links

In addition to reverting those changes, this PR pulls in some changes to
selectors we seem to have missed in the process of updates.
2024-02-20 06:57:10 +00:00
Keith Yeung
b993518892
Check for XML and XMLS namespace during 'locating a namespace' (#31374)
* Check for XML and XMLS namespace  during 'locating a namespace'

* Address review comments

* Remove test expectation in legacy layout meta
2024-02-20 02:28:25 +00:00
Daniel Adams
c999d4546c
Implement non-XR Gamepad discovery and input (#31200)
* Create embedder event to send to constellation

* Handle gamepad message in constellation, send to script thread

* Handle GamepadEvent in script thread and dispatch event to document

* Add missing Clones, fix event

* Add gamepad task source

* Adjust GamepadIndex type, remove unused imports

* Add internal getter for gamepads list

* Update gamepad new methods

* Handle gamepad connect and disconnect events

* Proto will be none, no need for HandleObject

* Initialize buttons and axes to standard mapping

* Adjust update type index types

* Update GamepadButton update function

* Adjust Gamepad mapping comments to match spec, add update logic

* Amend comment

* Update button and axis inputs on Updated event

* Add GilRs as gamepad backend in servoshell

* Add spec links, queue gamepad updates on task source

* ./mach fmt

* Fix comment length

* Split out button init, update spec comments

* Move gamepad event handling from document to global

* Map and normalize axes/button values

* Use std::time for gamepad timestamp

* Adjust gamepad handling in event loop

* Move button press/touch check into map+normalize function

- Small change but is more in line with spec

* ./mach fmt

* Update comment spec links and warning messages

* Doc comments -> regular comments

* Add window event handlers for gamepad connect/disconnect

* Adjust gamepad disconnect behavior

* Add missing TODO's, adjust gamepad/gamepadbutton list methods and formatting

* Update button handling from gilrs, add comments

* Enable gamepad pref during WPT tests and update expectations

* Update WPT expectations in meta-legacy-layout
2024-02-17 18:42:31 +00:00
atbrakhi
d5c9e569bf
make size of DefiniteContainingBlock use app units (#31369) 2024-02-17 01:10:14 +00:00
Taym Haddadi
328c376ff1
WebIDL: Use Uint8ClampedArray instead of raw JSObject in bindings (#31317)
* WebIDL: Use Uint8ClampedArray instead of raw JSObject in bindings

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* fmt

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* introduce new_initialized_heap_typed_array function

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Remove unsed unsafe_code

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Use doc comments for ImageData

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Use get_internal instead of acquire_data

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Handle JS errors in ImageData GetData and new_initialized_heap_typed_array

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Fix wrong assert that causes CRASH in test

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Early return for error

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Address review comments

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

---------

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>
2024-02-16 16:40:45 +00:00
Martin Robinson
9a6973d629
style: Remove dependency on servo_url (#31358)
In order for stylo to be a separate crate, it needs to depend on less
things from Servo. This change makes it so that stylo no longer depends
on servo_url.
2024-02-16 11:56:35 +00:00
Taym Haddadi
c3e3e72cf2
WebIDL: Use ArrayBufferViewU8 instead of raw JSObject in bindings (#31325)
* WebIDL: Use ArrayBufferViewU8 instead of raw JSObject in bindings

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Remove unused imports

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Address review comments

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

---------

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>
2024-02-16 11:22:16 +00:00
Delan Azabani
aeb2503fdb
style: Reduce diff with upstream derive_common and malloc_size_of (#31363) 2024-02-16 10:24:35 +00:00
Martin Robinson
61e778c8e8
style: Add a static_prefs implementation (#31351)
This will eventually be part of the stylo crate and reduces the diff
between our verson of style and upstream's.
2024-02-14 17:02:13 +00:00
Martin Robinson
14a2c43c75
style: Reduce Servo's diff with upstream to_shmem (#31349)
This is part of getting Servo using an version of style closer to
upstream. This change reverts some changes we made to `to_shmem` and
`to_shmem_derive` in order to reduce our diff with upstream stylo.
2024-02-14 11:17:00 +00:00
Keith Yeung
123854faee
Support the parsing of image/svg+xml elements (#31318)
* Support the parsing of image/svg+xml elements

* Update WPT test expectations
2024-02-14 08:16:37 +00:00
Taym Haddadi
a4db81cbd0
Fix rooting of external array buffer pointer (#31342)
Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>
2024-02-14 02:34:05 +00:00
Martin Robinson
6d73832009
layout: Do whitespace collapse during breaking and shaping (#31322)
This moves white space collapse to right before breaking and shaping
happens, which is more similar to what happens in legacy layout. This is
the first step toward making this procedure more efficient (avoiding
string copies) and also implementing support for `text-transform`.

Co-authored-by: Rakhi Sharma <atbrakhi@igalia.com>
2024-02-13 23:08:00 +00:00
Ivan Ukhov
81a543e41c
Update truetype (#31313) 2024-02-13 10:07:51 +00:00
Oriol Brufau
07c7096246
Include border-spacing gutters in compute_inline_content_sizes (#31337)
This way, if the table is inside an intrinsically sized container, like
a float or inline-block, the table won't overflow it (in basic cases).
2024-02-13 09:00:02 +00:00
Taym Haddadi
9be989146d
WebIDL: Use ArrayBuffer instead of raw JSObject in bindings (#31202)
* WebIDL: Use ArrayBuffer instead of raw JSObject in bindings

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Convert GPUBufferMapInfo mapping to Arc<Mutex>

* Remove #[allow(unsafe_code)] from GPUBuffer

* Add doc comments

* Implement trace for Arc<Mutex<Vec<T>>>

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Use #[no_trace] for GPUBufferMapInfo.mapping

* Make create_new_external_array_buffer generic

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Address review comments

* Remove HeapTypedArray::new and avoid cloning Arc

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Use expect for GetMappedRange and ReadAsArrayBuffer

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Use doc comments for FileReaderSyncMethods

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Return for Error::JsFailed GetMappedRange and ReadAsArrayBuffer

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Fix detached_internal implementation and comments

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* format code

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Update expectations

---------

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>
Co-authored-by: sagudev <16504129+sagudev@users.noreply.github.com>
2024-02-13 07:58:48 +00:00
atbrakhi
8ba251c95f
layout: make padding and border use Au in pbm (#31289)
* use au for padding and border in pbm

* review fix
2024-02-12 22:49:50 +00:00
Abhay Raj Singh
c367309a8f
docs: dom binding link fixes (#31311) 2024-02-11 21:05:33 +00:00
Oriol Brufau
cdafaa57a0
Fix list-style serialization (#31314)
In layout2020, 'list-style-position' is disabled behind a pref, so the
list_style_position field is an Option.

The serialization of the 'list-style' shorthand wasn't correctly
handling the case of it being None.
2024-02-11 20:51:55 +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
Sebastian C
19667e117a
layout: Respond to shorthand property requests with real values (#31277)
* Respond to shorthand property requests with real values

Signed-off-by: Sebastian C <sebsebmc@gmail.com>

* Cleanup formatting and old comments

Signed-off-by: Sebastian C <sebsebmc@gmail.com>

* Update WPT expectations

Signed-off-by: Sebastian C <sebsebmc@gmail.com>

* Refactor out helper fn

Signed-off-by: Sebastian C <sebsebmc@gmail.com>

* Cleanup

Signed-off-by: Sebastian C <sebsebmc@gmail.com>

---------

Signed-off-by: Sebastian C <sebsebmc@gmail.com>
2024-02-10 23:15:17 +00:00
Martin Robinson
35fb95ca85
layout: Start work on table row height and vertical-align (#31246)
This implements a very naive row height allocation approach. It has just
enough to implement `vertical-align` in table cells. Rowspanned cells
get enough space for their content, with the extra space necessary being
allocated to the last row. There's still a lot missing here, including
proper distribution of row height to rowspanned cells.

Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2024-02-10 08:03:01 +00:00
Martin Robinson
ee32212437
Update mozangle and mozjs in order to use bindgen 0.69.4 (#31306)
This should fix issues that we have with Float16 support on newer LLVM.
This also updates style, in order to remove the duplicate version of
bindgen. We will soon be able to manage updates to style more
consistently.
2024-02-10 06:28:26 +00:00
Oriol Brufau
cb5172f40e
Don't escape property name in CSSStyleDeclaration's item() (#31305)
Just return the raw name. This is only relevant for custom properties.
2024-02-09 21:12:31 +00:00
Oriol Brufau
f2adcc3a12
Fix CSSStyleDeclaration's item() to provide properties instead of values (#31299)
For example,

    style.cssText = "margin: 1px 2px 3px 4px";
    [...style];

will now be

    ["margin-top", "margin-right", "margin-bottom", "margin-left"]

instead of

    ["1px", "2px", "3px", "4px"]
2024-02-09 15:21:28 +00:00
Rajesh Malviya
9d42602fe7
BHM: Support aarch64 for Mac sampler (#31298)
Replaced unmaintained `mach` crate with `mach2`, and added support for getting arm registers.
2024-02-09 13:55:28 +00:00
Martin Robinson
f6b81a97f3
layout: Use BoxFragment border widths for display list generation (#31292)
Instead of using the border widths from the style, use the ones recorded
by the `BoxFragment`. This is necessary because inline layout can
override these border widths during fragmentation. For instance, when a
box is split across two lines only one fragment should have an inline
start border.
2024-02-08 23:21:24 +00:00
Smitty
20404a72c0
script: implement navigator.hardwareConcurrency (#31268)
Signed-off-by: syvb <me@iter.ca>
2024-02-07 18:41:58 +00:00
Mukilan Thiyagarajan
d8958f9693
android: disable JIT in SM to workaround #31134 (#31270)
The crash when loading servo.org happens in the JIT code
emitted by SM's CacheIRCompiler to invoke the VM function
`ProxyGetPropertyByValue`.

To disable this code path, it is not sufficient to disable
just the baseline JIT (which exposed in servo under the
pref `js.baseline.enabled`) but also the baseline
interpreter which is controlled by a different flag in SM.

This PR disables renames the `js.baseline.enabled` pref in
Servo to `js.baseline_jit.enabled` and introduces a new
pref `js.baseline_interpreter.enabled` that controls the
baseline interpreter.

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2024-02-07 03:59:28 +00:00
Martin Robinson
5dda97d187
layout: Wait to count justification opportunities until justification (#31236)
Instead of tracking justification opportunities during line layout, wait
until the line is about to be laid out and justification is about
happen. This makes the logic for tracking justification opportunities
simpler. In particular, we no longer have to carefully adjust them when
trimming whitespace. Additionally, this avoids a bit of work unless
justification is turned on.

This also includes a small cleanup of the justification code.
2024-02-06 16:33:22 +00:00
Smitty
036bca69ae
Fix crash on large console log (#31267) 2024-02-06 09:01:47 +00:00
Martin Robinson
7f13316f24
layout: Collect both start and end baselines for fragments (#31230)
This change starts collecting the starting baseline set for fragments,
which is necessary for some layout modes (flex and tables, namely) as
well as being important for the implementation of `align-items`. In
addition, it converts baseline measurement to use `Au` everywhere.

Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2024-02-05 18:06:05 +00:00
Smitty
50c930866b
Make console methods take any instead of string (#31241)
* Make console methods use `any` for the message

Match the Console spec by allowing any value to be passed to console
methods, instead of just values that can be converted to a string.

Signed-off-by: syvb <me@iter.ca>

* Add test for console logging a Symbol

Signed-off-by: syvb <me@iter.ca>

* Implement object stringification for logs

Signed-off-by: syvb <me@iter.ca>

* Address review comments

Signed-off-by: syvb <me@iter.ca>

* Make time/timeEnd accept DOMString to match spec

* Update WPT results for layout 2013

---------

Signed-off-by: syvb <me@iter.ca>
2024-02-05 14:30:53 +00:00
Smitty
b2ae3928ab
canvas2d: Implement .reset() (#31258)
* Implement Canvas2D reset

* Update WPT tests

* Apply suggestions from code review

---------

Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2024-02-05 08:53:00 +00:00
Martin Robinson
d7d0451424
libservo: Handle GL video decoding setup internally (#31209)
Instead of making the client set up GL video decoding, have this done
inside libservo. The details necessary for decoding are fetched via
Surfman now. This also removes the setup for the context on Android --
which has no GStreamer support now anyway. In the future, this could be
enabled, but should likely be done using Surfman, instead of passing on
all these details manually.
2024-02-03 14:38:48 +00:00
Smitty
436e949296
layout: return None bounding box when no nodes found (#31253)
Signed-off-by: syvb <me@iter.ca>
2024-02-02 23:24:20 +00:00
Mukilan Thiyagarajan
04a9b8ca39
Fix bugs in mach test-tidy (#31232)
* mach: test-tidy should return 1 for failure

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

* fix lint issues

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

* mach: tidy should allow spec links with trailing text

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

---------

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2024-01-31 05:50:36 +00:00
Oriol Brufau
a4cc0c563e
Allow using cached client_rect() for paint-only reflow (#31219)
PR #31210 avoided the cache for all kinds of reflow, but it's actually
fine to use it for ReflowTriggerCondition::PaintPostponed.
2024-01-30 12:38:20 +00:00
Oriol Brufau
f7ead9bcb6
Lint layout_2013 with clippy (#31221)
* Lint layout_2013 with clippy

CARGO_BUILD_RUSTC=rustc cargo clippy --fix -p layout_2013 --broken-code

* ./mach fmt

* Cosmetic adjustments
2024-01-30 11:46:35 +00:00
Ngo Iok Ui (Wu Yu Wei)
16cabcf736
Document media configs from prefs (#31223) 2024-01-30 08:52:14 +00:00
Taym Haddadi
967925c119
webidlg: Handle Float64Array as a TypedArray rather than a raw JSObject (#31189)
* WebIDL use FLoat64Array

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>

* Use to_vec to convert array to vec

* avoid allocating a new vec

---------

Signed-off-by: Bentaimia Haddadi <haddadi.taym@gmail.com>
2024-01-30 08:45:29 +00:00
Martin Robinson
7f0d0830e7
deps: Stop vendoring WebRender (#31212)
The new strategy for dependencies with upstream in Gecko is to manage
them in separate repositories, which will more easily allow rebasing our
changes on top of newer Gecko work.
2024-01-30 08:10:13 +00:00
Taym Haddadi
9b6c473695
Remove deprecated remove function (#31213) 2024-01-30 03:49:11 +00:00
Oriol Brufau
38d9245726
Don't use cached client_rect() when a reflow is needed (#31210)
Fixes #31195:

```js
element.style.width = "5px";
element.clientWidth; // 5
element.style.width = "15px";
element.clientWidth; // Was 5, now 15
```
2024-01-29 14:59:36 +00:00