Commit Graph

1782 Commits

Author SHA1 Message Date
Andreas Kling
a65b5cb135 LibWeb: Mark image elements for layout before firing their load event
This removes a long-standing source of flakiness seen for example in
WPT's /referrer-policy/ tests.

(cherry picked from commit 063cd68bf472061ec35cf9b8970aa6e614632c9b)
2024-11-20 22:51:34 -05:00
Luke Wilde
27c1ce5299 LibWeb: Make default document readiness be "complete"
This is required by mini Cloudflare invisible challenges, as it will
only run if the readyState is not "loading". If it is "loading", then
it waits for readystatechange to check that it's not "loading" anymore.

Initial about:blank iframes do not go through the full navigation and
thus don't go through HTMLParser::the_end, which sets the ready state
to something other than "loading". Therefore, the challenge would never
run, as readyState would never change.

Seen on https://discord.com/login

(cherry picked from commit f638f84185938c74a47f5691e8d7c5e1d4dca07c)
2024-11-20 22:51:34 -05:00
Tim Ledbetter
4dd2c42239 LibWeb: Use correct specifier to pad font language override value
(cherry picked from commit 7fe110225b7de2177e3463424ab437ffd9d7d5cd)
2024-11-20 22:51:34 -05:00
Nico Weber
f2feaccdcf Tests: Port dash-related paths.pdf changes to svg-stroke-styles.html 2024-11-19 22:21:24 -05:00
BenJilks
de4fe9fcfe LibWeb: Add writing-mode CSS property, and its values
Introduce the `writing-mode` property, as specified in
https://drafts.csswg.org/css-writing-modes/#block-flow

(cherry picked from commit c3f3e93b7e46e2f366fbc904852763af546d3913;
amended to fix conflict on `height:` in expectation)
2024-11-19 11:02:38 -05:00
stelar7
c39fa9a033 LibWeb: Parse the rotate css property
(cherry picked from commit 488436fb54347e69040cfed4f523926241a136a3)
2024-11-19 11:02:38 -05:00
Jelle Raaijmakers
93a8c61fe9 LibWeb: Parse and store filter property
This shares its implementation with `backdrop-filter`.

(cherry picked from commit 29974de852fb14eef78a18232bd36d5c8955a214;
amended to resolve conflict on `height:` in expectations file, and to
remove change to DisplayListPlayerSkia.cpp which serenity doesn't have;
also updated FilterPainting.{h,cpp} for changes since serenity does not
have LadybirdBrowser/ladybird#736 and LadybirdBrowser/ladybird#886)
2024-11-19 11:02:38 -05:00
Psychpsyo
459f13ee74 LibWeb: Prevent checkboxes from firing change events when losing focus
This is because toggling the checkbox is committing the value.

(cherry picked from commit 3856dd946b94b61be2ddac80c8cf60278fcc56ab;
amended to add spaces to expected output due to serenity not yet
having LadybirdBrowser/ladybird#1603, and to add a trailing newline
to the test input file)
2024-11-18 13:21:10 -05:00
Sam Atkins
4e73ad50df LibWeb/CSS: Process style properties from CSSNestedDeclarations rules
These are created when a style rule has properties listed after another
rule. For example:

```css

.test {
  --a: 1;
  --b: 1;
  --c: 1;

  .thing {
    /* ... */
  }

  /* These are after a rule (.thing) so they're wrapped in a
     CSSNestedDeclarations: */
  --d: 1;
  --e: 1;
  --f: 1;
}
```

They're treated like a nested style rule with the exact same selectors
as their containing style rule.

(cherry picked from commit e4245dc39e68d9376dfb2344c78119a938533319)
2024-11-18 09:48:28 -05:00
Sam Atkins
f157983f10 LibWeb/CSS: Parse and use nested style rules
For example, this:

```css
.foo {
  color: red;
  &:hover {
    color: green;
  }
}
```

now has the same effect as this:

```css
.foo {
  color: red;
}
.foo:hover {
  color: green;
}
```

CSSStyleRule now has "absolutized selectors", which are its selectors
with any `&`s resolved. We use these instead of the "real" selectors
when matching them, meaning the style computer doesn't have to know or
care about where the selector appears in the CSS document.

(cherry picked from commit 53f99e51f8382a20cec7752480d505957a2680b1)
2024-11-18 09:48:28 -05:00
Sam Atkins
a4c7586337 LibWeb: Implement CSSNestedDeclarations type
This is basically a list of properties, without a block around it. It'll
be part of CSSStyleRules' contents.

(cherry picked from commit 9c66ab356ac96602e5c1dc23906288fa187e9f01)
2024-11-18 09:48:28 -05:00
Sam Atkins
b961998c1f LibWeb/CSS: Insert whitespace between tokens in serialized UnresolvedSV
Otherwise, `margin: var(--foo) var(--bar)` would be wrongly serialized
as `margin: var(--foo)var(--bar)`

(cherry picked from commit 6e68e8f3c9d74893e46ab0514169b950866457b4)
2024-11-17 23:31:49 -05:00
Sam Atkins
fe9ab2c91e LibWeb/CSS: Rewrite CSS Parser core methods according to new spec
CSS Syntax 3 (https://drafts.csswg.org/css-syntax) has changed
significantly since we implemented it a couple of years ago. Just about
every parsing algorithm has been rewritten in terms of the new token
stream concept, and to support nested styles. As all of those
algorithms call into each other, this is an unfortunately chonky diff.

As part of this, the transitory types (Declaration, Function, AtRule...)
have been rewritten. That's both because we have new requirements of
what they should be and contain, and also because the spec asks us to
create and then gradually modify them in place, which is easier if they
are plain structs.

(cherry picked from commit e0be17e4fbf1870f35614d0cde8f63e72f78bd16;
amended to tweak test expectation due to serenity not yet having
LadybirdBrowser/ladybird#1603)
2024-11-17 22:08:57 -05:00
Sam Atkins
76b13f210d LibWeb: Add a CSS parsing test for selectors containing ':' in @media
While updating the parser to the latest spec algorithms, this started
parsing incorrectly as a declaration, and we had no tests covering it.

(cherry picked from commit 9241f37823f227ae94461a494c6f7ab4b6cd0e4e)
2024-11-17 22:08:57 -05:00
Sam Atkins
962207a2db LibWeb/CSS: Bring TokenStream in line with spec
When the TokenStream code was originally written, there was no such
concept in the CSS Syntax spec. But since then, it's been officially
added, (https://drafts.csswg.org/css-syntax/#css-token-stream) and the
parsing algorithms are described in terms of it. This patch brings our
implementation in line with the spec. A few deprecated TokenStream
methods are left around until their users are also updated to match the
newer spec.

There are a few differences:

- They name things differently. The main confusing one is we had
  `next_token()` which consumed a token and returned it, but the spec
  has a `next_token()` which peeks the next token. The spec names are
  honestly better than what I'd come up with. (`discard_a_token()` is a
  nice addition too!)

- We used to store the index of the token that was just consumed, and
  they instead store the index of the token that will be consumed next.
  This is a perfect breeding ground for off-by-one errors, so I've
  finally added a test suite for TokenStream itself.

- We use a transaction system for rewinding, and the spec uses a stack
  of "marks", which can be manually rewound to. These should be able to
  coexist as long as we stick with marks in the parser spec algorithms,
  and stick with transactions elsewhere.

(cherry picked from commit b645e26e9b29437c0e248b5e43e3ec76aacf960d)
2024-11-17 18:57:30 -05:00
Totto16
8987d773a1 LibWeb: Make HTMLVideoElement part of CanvasImageSource union
(cherry picked from commit abe1172d7097ddae2aff2ddd839b96ed90ba7a13)
2024-11-17 18:57:16 -05:00
Andreas Kling
abf9980ea1 LibWeb: Make SVGImageElement part of CanvasImageSource union
This is very janky at the moment but it also more correct. :^)

(cherry picked from commit cd0e4a49b8a758aca847ceaf57eec0a62cd7b687;
amended to add a missing include of LibGfx/ImmutableBitmap.h to
SVGImageElement.h that ladybird seems to get transitively somehow)
2024-11-17 16:48:43 -05:00
Andreas Kling
afbb213552 LibWeb: Fail CSS color parse for "rgba(123, 123, 123, "
This matches the behavior of other browsers and fixes a WPT test.

(cherry picked from commit 902586a21de3ef8335e447053d82057c4c927d72;
amended expected output because serenity does not yet have
LadybirdBrowser/ladybird#1603)
2024-11-17 16:48:43 -05:00
Andreas Kling
0b5719685d LibWeb+LibGfx: Serialize HTML canvas fill/strokeStyle colors correctly
Before this change we were serializing them in a bogus 8-digit hex color
format that isn't actually recognized by HTML.

This code will need more work when we start supporting color spaces
other than sRGB.

(cherry picked from commit 4590c081c2eb257232463ed660498a02f9bbe7b8;
amended expected output because serenity does not yet have
LadybirdBrowser/ladybird#1603)
2024-11-17 16:48:43 -05:00
Gingeh
45971381f0 LibWeb: Make empty media query lists evaluate to true
(cherry picked from commit 16f2f6aa4230ad7f2e4b502c1b5fabd53215220c)
2024-11-17 15:35:22 -05:00
Tim Ledbetter
790eadf2fc LibWeb: Don't discard PostedMessage tasks when closing a worker
The spec expects `postMessage()` to act as if it is invoked
immediately. Since `postMessage()` isn't actually invoked immediately,
keep tasks with source `PostedMessage` in the task queue, so that these
tasks are processed. Fixes a hang when `WorkerGlobalScope.close()` is
called immediately after `postMessage()`.

(cherry picked from commit fd8d350b4756817598ee49a11b9efc3b953dbb00)
2024-11-17 15:18:38 -05:00
Luke Wilde
a7b4b170ed LibWeb: Make MessageEvents from {Window,MessagePort}.postMessage trusted
The MessagePort one in particular is required by Cloudflare Turnstile,
as the method it takes to run JS in a worker is to `eval` the contents
of `MessageEvent.data`. However, it will only do this if
`MessageEvent.isTrusted` is true, `MessageEvent.origin` is the empty
string and `MessageEvent.source` is `null`.

The Window version is a quick fix whilst in the vicinity, as its
MessageEvent should also be trusted.

(cherry picked from commit 079c28d5e68ad983340c02f3d043acfdf2846d18)
2024-11-17 15:18:20 -05:00
Timothy Flynn
1bee38e8d6 LibWeb: Disable css/transition-basics.html test
This is flaky in CI.

(cherry picked from commit 6708251968ebe7bf6aead688338d27ece32fa77f)
2024-11-17 13:47:42 -05:00
Shannon Booth
e93b0f1ce5 LibWeb: Implement DedicatedWorkerGlobalScope postMessage(msg, transfer)
Unfortunately the added test (which passes locally) is skipped as it is
based off other Worker tests which are also skipped due to being flakey
in CI.

(cherry picked from commit 755b63132b72cb25bd358415bf2fdf2be3c14c47)
2024-11-17 13:47:42 -05:00
Andrew Kaster
1dfd8755bc LibWeb: Add a feature to LibWeb tests to fail on unhandled exceptions
Previously, if there was an unhandled exception in an async test, it
might fail to call done() and timeout. Now we have a default "error"
handler to catch unhandled exceptions and fail the test. A few tests
want to actually test the behavior of window.onerror, so they need an
escape hatch.

(cherry picked from commit 8edaec79dea2f39a31ee97738dfa2e74911efe26)
2024-11-17 13:47:42 -05:00
Andrew Kaster
eac6c59e68 LibWeb: Add ServiceWorker job registration and execution
Now we can register jobs and they will be executed on the event loop
"later". This doesn't feel like the right place to execute them, but
the spec needs some updates in this regard anyway.

(cherry picked from commit 29416befe640eae7bf44b72e3f4ad42a1e397701)
2024-11-17 13:47:42 -05:00
Andreas Kling
23fd706ea9 LibWeb: Fire navigation event as required in History.pushState()
(cherry picked from commit a1519e67fb7a47755d12ff1e8ce2a7de28087933)
2024-11-17 13:47:42 -05:00
Andreas Kling
3e5f37f983 LibWeb: Allow changing the query of file:// URL via history.pushState()
The spec didn't match how other browsers behave, and we dutifully did
what the spec said. A spec bug has been filed, so let's fix this locally
for now with a FIXME.

(cherry picked from commit e3408c4a7f2fe2ce2435d34e816e9b5b7e58f4af)
2024-11-17 13:47:42 -05:00
Andrew Kaster
84972616d7 LibWeb: Start implementing serviceWorker.register
This is mostly the fun boilerplate. Actually creating the Job queue
to do the heavy lifting is next.

(cherry picked from commit c77d9a2732b9325079bca713e4c97d75a0f6a54d)
2024-11-17 11:03:57 -05:00
Andrew Kaster
fc7b908528 LibWeb: Add a test-only API to spoof the current URL and origin
This is not that easy to use for test developers, as forgetting to set
the url back to its original state after testing your specific API will
cause future navigations to fail in inexplicable ways.

(cherry picked from commit acd604c5e1ab0579e9492cf8b88622e27f66bb62)
2024-11-17 11:03:57 -05:00
Andrew Kaster
98663d09c6 LibWeb: Add stub of ServiceWorker interface
(cherry picked from commit a0c07d1bb27cdab33a12e1b1ad03a9452750503a)
2024-11-17 11:03:57 -05:00
thislooksfun
f9668660ba LibWeb: Skip DedicatedWorkerGlobalScope-instanceof test
It is consistently hanging on mac. See #1306 for details.

(cherry picked from commit feaf2feab8fbd855f526a5a4eec2395fdec6a749)
2024-11-16 15:53:37 -05:00
Tim Ledbetter
2a35f9a834 Tests/WPT: Enable Qt neworking when running WPT tests
(cherry picked from commit 21eefb788bcee36afce24e02ec4ef90e27510fbb;
amended to resolve a minor conflict)
2024-11-15 19:07:17 -05:00
Sam Atkins
f63a15665d LibWeb: Calculate hidden password text using code-point count
This means that an `<input type=password>` will show the correct number
of *s in it when non-ASCII characters are entered.

We also don't need to perform text-transform on these as that doesn't
affect the output length, so I've moved it earlier.

(cherry picked from commit c747b1c6b56156b5797fad0d8d95164f415c8b25;
amended to slightly adjust some BlockContainer and PaintableWithLines
widths, since serenity does not use harfbuzz for text shaping)
2024-11-14 23:38:34 -05:00
Jelle Raaijmakers
35f4f5cf54 LibWeb: Implement AudioListener
This exposes BaseAudioContext.listener, which is a container for
parameters related to the configuration of an actual "listener" in 3D
space.

(cherry picked from commit 2a98f2a12d5069a2189fa38b4a7e158d84ee03ec)
2024-11-14 17:46:06 -05:00
ronak69
8fbecc096d LibWeb: Insert title as first child on setting title of svg document
Before, the new title element got appended instead of prepended, as
nullptr was passed as the "child" argument to the insert_before()
function.

This change makes two WPT tests pass in:
http://wpt.live/html/dom/documents/dom-tree-accessors/document.title-09.html

(cherry picked from commit 3ff613712132bd3d03f44f27986f7ca5aaea8eb5)
2024-11-14 17:46:06 -05:00
sin-ack
23e49f2835 BindingsGenerator: Handle global interfaces without named properties
DedicatedWorkerGlobalScope is an object with a Global extended
attribute, but does not define any named property getters. This needs to
be handled by setting the prototype chain to:

    DedicatedWorkerGlobalScope
    ^ DedicatedWorkerGlobalScopePrototype
    ^ WorkerGlobalScopePrototype

(This is different from something like Window, where there is an
intermediate WindowProperties object for named properties.)

Previously, we treated the GlobalMixin object as if it was a simple
prototype object, accidentally setting DedicatedWorkerGlobalScope's
prototype to WorkerGlobalScopePrototype. This caused the expression

    self instanceof DedicatedWorkerGlobalScope

to return false inside workers.

This makes us pass many more of the "/xhr/idlharness.any.worker" WPT
tests than before, rather than failing early.

(cherry picked from commit d5948709cd499ef0e7bfa3c24e8c03befed115fe)
2024-11-14 17:46:06 -05:00
Arhcout
0845de1018 LibWeb: Don't trigger onchange event when setting <select> value
(cherry picked from commit 5d00211a8605b0fab9f330082699f6f089961052)
2024-11-14 17:46:06 -05:00
Jelle Raaijmakers
b67c8d138c LibWeb: Add WebGLShaderPrecisionFormat
(cherry picked from commit 3d8ab0e67c707062e4d889598fbd176fa0c6fce8)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
b288bfd994 LibWeb: Add WebGLActiveInfo
(cherry picked from commit d63a979bde54ad93422c2fadb5cf24cbc3339e07)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
59ed552646 LibWeb: Add WebGLUniformLocation
(cherry picked from commit 889e7942fa090a240743d3b53ab2bc5288e064c3)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
1097eaf38b LibWeb: Add WebGLTexture
(cherry picked from commit f2a164365007ad5e06f3ce47702ded55c42fbcb6)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
e41789f5f9 LibWeb: Add WebGLShader
(cherry picked from commit 2b09afb971059f22a0eb82661262954211b694b9)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
e64cf9633d LibWeb: Add WebGLRenderbuffer
(cherry picked from commit d53cb9833b274658c1ec1b6c1813cfb466470bdb)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
8e05ba45d0 LibWeb: Add WebGLProgram
(cherry picked from commit 6b7d5dbec6a9daf1033ee2e8c4c48037ccd35360)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
88ce676d20 LibWeb: Add WebGLFramebuffer
(cherry picked from commit 5d0b206d6ec9c3a5284ee6db7452b21a6cf6c7cd)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
4e9c64c37f LibWeb: Add WebGLBuffer
(cherry picked from commit b21857b26587a1108325ba7d1e7c69986d3ddaa3)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
1e0b742903 LibWeb: Add WebGLObject interface
(cherry picked from commit e6ee7f3e642acd548b3ae96c47f7174ceb98f730)
2024-11-13 19:32:27 -05:00
Jelle Raaijmakers
e87b17b0e0 LibWeb: Add stubbed Media Source Extensions API
Just the boilerplate :^)

(cherry picked from commit 35043702813117d22e841e1b1d887d1726d4ed2d;
amended to fix conflict in idl_files.gni due to ladybird being worse
than serenity at having that file sorted alphabetically)
2024-11-13 19:32:14 -05:00
Luke Wilde
c1767b1964 LibWeb: Make iframe insertion steps check the shadow including root
The insertion steps for iframes were following an old version of the
spec, where it was checking if the iframe was "in a document tree",
which doesn't cross shadow root boundaries. The spec has since been
updated to check the shadow including root instead.

This is now needed for Cloudflare Turnstile iframe widgets to appear,
as they are now inserted into a shadow root.

(cherry picked from commit 4dd14d812f73377cb1efa5a8e8a114912a90b5af)
2024-11-13 19:32:02 -05:00