Commit graph

1592 commits

Author SHA1 Message Date
Andi Gallo
268355c759 LibWeb: Implement iterative percentage size for spanning table cells
Follow the computing column measures section of the specification, which
gives an algorithm for setting intrinsic percentage widths when spanning
columns are involved.
2023-07-23 16:11:20 +02:00
Dan Klishch
2f7527b0a4 LibXML: Actually append resolved references when parsing content 2023-07-23 16:09:12 +02:00
Shannon Booth
cb23eaa92d test-js: Add global function to determine if using bytecode interpreter
This is intended to be used in adding test-js tests where there is
different behaviour between the AST interpreter and bytecode mode.
In particular, this is useful for tests which fail in AST, but pass in
bytecode, as the AST interpreter is run in CI but bytecode is not.
2023-07-23 07:36:13 +02:00
Kenneth Myhra
2c06ad3a05 Tests/LibWeb: Add primitives test for structuredClone() 2023-07-23 06:37:14 +02:00
Lucas CHOLLET
89e2431517 Tests/LibGfx: Add a first test for JPEG XL images
This image uses the modular encoding with a very simple prediction tree.
It also makes use of two features: upsampling (x2 factor) and a
non-standard bit depth (10 bits). The file has been generated on
https://jxl-art.surma.technology/ , with the following input:

Width 64
Height 64
Upsample 2
Bitdepth 10

if N > 300
  - NE -6
  - W 6
2023-07-22 08:52:57 -04:00
Andi Gallo
63e72feee1 LibWeb: Add additional term to the table cell min contribution
Align with specification.
2023-07-22 07:06:50 +02:00
Andi Gallo
6dfa1c2548 LibWeb: Distribute excess width to columns as in specification 2023-07-22 07:06:50 +02:00
Andi Gallo
eb20eeb54c LibWeb: Use column and row size for cell outer sizes
Better aligns our implementation with the specification, which requires
that we check columns and column groups too.
2023-07-22 07:06:50 +02:00
Andi Gallo
28509e3edd LibWeb: Check column or row size attributes for constrainedness
Better aligns our implementation with the specification, which requires
that columns and groups of columns are checked too.
2023-07-22 07:06:50 +02:00
Andi Gallo
19a26533a9 LibWeb: Make the type of column whether it's percent or not
Change how we store type of columns. It was used where the specification
only distinguishes between percent and everything else, so it makes more
sense to store and use it as a boolean.
2023-07-22 07:06:50 +02:00
Andi Gallo
030b1a197b LibWeb: Don't use the preferred increment as reference for distribution
The specification says we should distribute excess width proportionally
to the width of the cell, not to the preferred increment. Doing the
latter leads to distributing all excess width to just the cells which
demand some increment, even if it's very modest. Moreover, there's code
which partially implements the correct criteria just below the one we
remove here.
2023-07-22 07:06:50 +02:00
Andreas Kling
1768d70823 Revert "LibJS: Remove "uprooting" mechanism from garbage collector"
This reverts commit 6232ad3a0d.

Unfortunately this introduced some flakiness on CI, so it wasn't
quite this simple.
2023-07-22 06:53:26 +02:00
Aliaksandr Kalenik
fd9b3bdc94 LibWeb: Support auto vertical margins for grid items 2023-07-21 21:09:45 +02:00
Timothy Flynn
77d7f715e3 LibJS+CI: Remove bytecode optimization passes for now
These passes have not been shown to actually optimize any JS, and tests
have become very flaky with optimizations enabled. Until some measurable
benefit is shown, remove the optimization passes to reduce overhead of
maintaining bytecode operations and to reduce CI churn. The framework
for optimizations will live on in git history, and can be restored once
proven useful.
2023-07-21 19:47:36 +03:30
Andreas Kling
6232ad3a0d LibJS: Remove "uprooting" mechanism from garbage collector
The Heap::uproot_cell() API was used to implement markAsGarbage() which
was used in 3 tests to forcibly destroy a value, even if it had
references on the stack or elsewhere.

This patch rewrites the 3 tests that used this mechanism to be
structured in a way that allows garbage collection to collect the values
as intended without hacks. And now that the uprooting mechanism is no
longer needed, it's uprooted as well.

This fixes 3 test-js tests in bytecode mode. :^)
2023-07-21 14:14:00 +02:00
Aliaksandr Kalenik
babadc19df Tests/LibWeb: Update WPT expectations
Updates WPT tests expectations in metadata.txt and changes run.sh to
checkout more recent commit in WPT upstream repository.
2023-07-19 18:34:36 +02:00
Aliaksandr Kalenik
2d12a91cd0 Tests/LibWeb: Remove MANIFEST.json from WPT
I added this file thinking it was necessary for the wpt run command.
However, it's only needed for updating expectations metadata. Since wpt
run always regenerates MANIFEST.json before updating expectations, we
can safely delete this file from the repository.
2023-07-19 18:34:36 +02:00
Lucas CHOLLET
7b4630932b Tests/LibGfx: Call ImageDecoder::size() before frame()
Reordering these calls allow us to ensure that all encoders are able to
return the size of the image before they are requested to decode the
whole bitmap.
2023-07-18 21:17:10 +01:00
Shannon Booth
125145c682 LibCore: Port Command::write_lines to ErrorOr
Keeping this in line with Command::write.
2023-07-18 14:48:45 +01:00
Shannon Booth
5dd93474ee LibCore+Tests: Unify process handling into Command class
The Test262RunnerHandler class in test-test262 was made in order to
spawn a subprocess, connect to its input/output error pipes, and obtain
its return value.

Later on, a copy of this implementation was added to TestSed with
modifications, such as adding support for reading from the output pipes
as well.

Unify these two implementations into a new Core::Command class. This new
implementation is more closely modeled from the TestSed implementation
due to the extra functionality it implemented.
2023-07-18 14:48:45 +01:00
Lucas CHOLLET
4291288a31 LibGfx: Remove ImageDecoderPlugin::initialize()
No plugin is currently overriding the default implementation, which is a
no-op. So we can safely delete it.
2023-07-18 14:34:35 +01:00
Andreas Kling
ac124fbaae LibWeb: Resolve flex item percentages against used flex container sizes
Once we've resolved the used flex item width & height, we should allow
percentage flex item sizes to resolve against them instead of forcing
flex items to always treat percentages as auto while doing intrinsic
sizing layout.

Regressed in 8dd489da61.
2023-07-18 06:04:55 +02:00
Sebastian Zaha
92b56ded02 LibWeb: Fix whitespace getting trimmed incorrectly
Whitespace at the end of line should only be trimmed when
'white-space' is set to 'normal', 'nowrap', or 'pre-line'.
2023-07-17 21:47:34 +02:00
Lucas CHOLLET
38dd4168be LibGfx/ICO: Decode the header in create() and remove initialize()
This is done as a part of #19893.
2023-07-17 20:17:08 +01:00
Aliaksandr Kalenik
a8587fe54e LibWeb: Add support for "place-items" CSS property
Adds support for place-items property which allows to specify both
align-items and justify-items in a single declaration.
2023-07-17 18:58:05 +02:00
Alan Kemp
3fd870a429 LibWeb: Create EdgeStyleValue for BackgroundPositionXY with no offset
When specifying either `background-position-x: right` or
`background-position-y: bottom` without an offset value no
EdgeStyleValue was created.

However, the spec says the offset should be optional.

Now, if you do not provide an offset, it creates the EdgeStyleValue
with a default offset of 0 pixels.
2023-07-17 14:53:52 +01:00
Andreas Kling
8dd489da61 LibWeb: Fully resolve min- and max-sizes for flex items
We do this by piggybacking on FormattingContext helpers instead of
reinventing the wheel in FlexFormattingContext.

This fixes an issue where `min-width: fit-content` (and other
layout-dependent values) were treated as 0 on flex items.

This makes the cookie banners look okay on https://microsoft.com/ :^)
2023-07-17 08:40:15 +02:00
Andreas Kling
f0ec104131 AK: Implement IPv6 host parsing in URLParser
This is just a straight (and fairly inefficient) implementation of IPv6
parsing and serialization from the URL spec.

Note that we don't use AK::IPv6Address here because the URL spec
requires a specific serialization behavior.
2023-07-17 07:47:58 +02:00
Aliaksandr Kalenik
07f451044b LibWeb: Fix inline-block percentage height calculation
If an inline-block has a percentage height that relies on the auto
height of the containing block, it should always resolve to the
automatic height of the box, regardless of the percentage value. This
change may seem confusing, but it aligns with the behavior of other
engines.
2023-07-16 15:00:30 +02:00
MacDue
1bc7b0320e LibGfx: Approximate elliptical arcs with cubic beziers
Unlike all other primitives elliptical arcs are non-trivial to
manipulate, it's tricky to correctly apply a Gfx::AffineTransform to
them. Prior to this change, Path::copy_transformed() was still
incorrectly applying transforms such as flips and skews to arcs.

This patch very closely approximates arcs with cubic beziers (I can not
visually spot any differences), which can then be easily and correctly
transformed in all cases.

Most of the maths here was taken from:
https://mortoray.com/rendering-an-svg-elliptical-arc-as-bezier-curves/
(which came from https://www.joecridge.me/content/pdf/bezier-arcs.pdf,
now a dead link).
2023-07-16 06:22:55 +02:00
MacDue
d2766bd5fe Tests/LibGfx: Test we can decode everything in TinyVG
This tests that we can successfully parse the "everything" TVG files,
which make use of every feature in TinyVG.

Test files taken from https://github.com/TinyVG/examples (MIT).
2023-07-15 21:36:28 +02:00
Shannon Booth
2b46e6f664 Everywhere: Update copyrights with my new serenityos.org e-mail :^) 2023-07-15 16:21:29 +02:00
Andreas Kling
2887976ce9 LibWeb: Fully resolve max-width values on inline-block elements
This fixes an issue where `max-width: fit-content` (and other
layout-dependent values) were treated as 0 on inline-blocks.
2023-07-15 12:30:07 +02:00
Kenneth Myhra
1f4f750052 Tests/LibWeb: Verify setting {readable,writable}Type throws RangeError
This test proves that setting transformer.{readable,writable}Type to a
value throws a RangeError.
2023-07-15 11:59:39 +02:00
Kenneth Myhra
221f18f72e Tests/LibWeb: Add TransformStream flush callback test
This test proves the ability of TransformStream to execute
caller supplied code in the flush callback, and have access to
TransformStreamDefaultController.
2023-07-15 11:59:39 +02:00
Kenneth Myhra
5c6125c92b Tests/LibWeb: Add TransformStream start callback test
This test proves the ability of TransformStream to execute
caller supplied code in the start callback, and have access to
TransformStreamDefaultController.
2023-07-15 11:59:39 +02:00
Kenneth Myhra
74fdf59941 Tests/LibWeb: Add TransformStream transform callback test
This test proves the ability of TransformStream to execute to execute
caller supplied code in the transform callback that can transform
incoming chunks, and have access to TransformStreamDefaultController.
2023-07-15 11:59:39 +02:00
Kenneth Myhra
1faca5ed9f Tests/LibWeb: Add TransformStream Identity Transform test
This test proves the ability of TransformStream to convert between
writable and readable streams.
2023-07-15 11:59:39 +02:00
Andreas Kling
3ec9fd0aae LibWeb: Resolve calc() values in CSS transform
There are two parts to this fix:

- First, StyleProperties::transformations() would previously omit calc()
  values entirely when returning the list of transformations. This was
  very confusing to StackingContext which then tried to index into the
  list based on faulty assumptions. Fix this by emitting calc values.

- Second, StackingContext::get_transformation_matrix() now always calls
  resolve() on length-percentages. This takes care of actually resolving
  calc() values. If no reference value for percentages is provided, we
  default to 0px.

This stops LibWeb from asserting on websites with calc() in transform
values, such as https://qt.io/ :^)
2023-07-15 11:35:16 +02:00
Shannon Booth
5625ca5cb9 AK: Rename URLParser::parse to URLParser::basic_parse
To make it more clear that this function implements
'concept-basic-url-parser' instead of 'concept-url-parser'.
2023-07-15 09:45:16 +02:00
Aliaksandr Kalenik
2138c164c9 LibWeb: Respect justify-items property of grid container 2023-07-15 05:50:51 +02:00
Aliaksandr Kalenik
e4e1208050 LibWeb: Respect justify-self property of grid items 2023-07-14 15:48:58 +02:00
Andreas Kling
1470e60800 LibWeb: Add logical CSS properties for insets
This patch adds the following properties:

- inset-inline
- inset-inline-start
- inset-inline-end
- inset-block
- inset-block-start
- inset-block-end
2023-07-14 05:55:32 +02:00
Aliaksandr Kalenik
ca50da63e4 LibWeb: Do not crash if "fill: none" is specified for svg text 2023-07-13 18:43:21 +02:00
Aliaksandr Kalenik
e2c5e31292 LibWeb: Adjust grid columns size to fit spanning items
This change implements following paragraph from placement algorithm in
the spec:
"If the largest column span among all the items without a definite
column position is larger than the width of the implicit grid, add
columns to the end of the implicit grid to accommodate that column
span."

There were places in the grid implementation code with copies of this
text, but those were completely unrelated to the code where they were
being pasted so I removed them.
2023-07-13 16:54:53 +02:00
Andreas Kling
d620dd516c LibGfx: Add Rect::unite_{horizontally,vertically}()
These functions unite the rect with another rect, but only in one axis.
2023-07-13 05:09:08 +02:00
Andi Gallo
3476cf0fcb LibWeb: Add border conflict resolution with rowgroup 2023-07-12 20:42:51 +02:00
Andi Gallo
cf40b95be8 LibWeb: Resolve table border conflicts with rows 2023-07-12 20:42:51 +02:00
Andi Gallo
e30662a8a0 LibWeb: Resolve table border conflicts with cells
Build a mapping from coordinates to cells and use it to resolve
border conflicts between adjacent cells.
2023-07-12 20:42:51 +02:00
Nico Weber
323d76fbb9 LibPDF: Make encrypted object streams work
There were two problems:
1. parse_compressed_object_with_index() parses indirect objects
   without going through Parser::parse_indirect_value(), so
   push_reference() / pop_reference() weren't called.
   Manually call them, both for the indirect object containing
   the object stream and for the indirect object within the
   object stream.
2. The indirect object within the object stream got decrypted
   twice: Once when the object stream data itself got decrypted,
   and then incorrectly a second time when the object data within
   the stream was read. To fix, disable encryption while parsing
   object stream data (since it's already decrypted).

The test is from http://opf-labs.org/format-corpus/pdfCabinetOfHorrors/
which according to readme.md at the same location is CC0.
2023-07-12 17:16:25 +02:00