Commit graph

65030 commits

Author SHA1 Message Date
Andreas Kling
87dd8714c5 Tests: Import WPT tests from css/css-backgrounds/animation
These give us some basic coverage of backgrounds, borders and animation
mechanisms.
2024-11-07 22:50:33 +01:00
Andreas Kling
5bdbc34a63 LibWeb: Resolve initial/inherit/unset before interpolating properties
This was preventing a number of WPT tests relating to CSS animation from
running at all.
2024-11-07 22:50:33 +01:00
Nico Weber
7ac3806a1d LibWeb: Plumbing for lineCap, lineJoin, miterLimit, lineDashOffset
Not used for painting yet, but adds a FIXME for what's missing.

Also tweak some existing spec comments minorly.
2024-11-07 19:54:10 +01:00
sideshowbarker
96ded779e2 Docs: Recommend “Web Browser Engineering” book in GettingStarted guide
Some checks are pending
CI / Lagom (false, FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, macos-14, macOS, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (true, NO_FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (macos-14, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Push notes / build (push) Waiting to run
2024-11-07 15:39:31 +01:00
Sam Atkins
b0e79ce549 Tests: Import all WPT css/css-nesting tests
A few are skipped for now:
- A few ref tests fail
- Crash tests are not supported by our runner and time out
- top-level-is-scope.html crashes and needs further investigation
2024-11-07 15:11:24 +01:00
Sam Atkins
6bb1ffbcd3 LibWeb/CSS: Accept nested style rules in grouping at-rules
When converting an AtRule to a grouping rule, allow both style rules,
and lists of declarations.
2024-11-07 15:11:24 +01:00
Sam Atkins
ce947ff983 LibWeb/CSS: Stop assuming CSSNestedDeclarations's parent is CSSStyleRule
This will no longer be true once we implement at-rules nested inside
style rules, for example:

```css
.foo {
  color: yellow;

  @media (min-width: 800px) {
    color: orange;
  }
}
```
2024-11-07 15:11:24 +01:00
Sam Atkins
0b23dddb4b LibWeb/CSS: Clear child CSS rules' caches too
If a rule gets its caches cleared because it's moved in the OM, then its
child rules' caches are likely invalid and need clearing too.

Assuming that caches only point "upwards", this will correctly clear
them all. For the time being that will be true.
2024-11-07 15:11:24 +01:00
Sam Atkins
e6291c8d0e LibWeb/CSS: Correct position indicator when dumping a TokenStream
Since b645e26e9b, m_index points at the
"next" token, not the one that we're currently on.
2024-11-07 15:11:24 +01:00
Sam Atkins
a703aad082 LibWeb/CSS: Reject invalid rules and declarations during parsing
This implements the `is_valid_in_the_current_context()` methods by
maintaining a stack of contexts, such as whether we're inside a style
rule, or an `@media` block, or the condition of a `@supports` rule.
2024-11-07 15:11:24 +01:00
Sam Atkins
3b36ca2711 LibWeb/CSS: Update a FIXME that's completed elsewhere 2024-11-07 15:11:24 +01:00
Sam Atkins
a9a25d4eca Tests: Add a test for @supports
This is derived from our old demo page.

Notably, we currently do claim to support `::-webkit-foo` selectors,
which is a bug. According to the spec [1], we have to parse those as
valid, but `@supports` should still fail for them [2], which is a bit
confusing.

[1] https://www.w3.org/TR/selectors-4/#compat
[2] https://drafts.csswg.org/css-conditional-4/#support-definition-ext
2024-11-07 15:11:24 +01:00
Sam Atkins
398e112c8c LibWeb: Make dumping of @supports more useful
The string representation doesn't tell you what the internals look like,
which is what you want when dumping.
2024-11-07 15:11:24 +01:00
Aliaksandr Kalenik
a7cbc7a6b8 LibWeb+LibGfx: Use GPU backend for <canvas>
This is implemented by using a GPU-accelerated surface for <canvas> when
a GPU context is available.

A side effect of this change is that all canvas modifications have to be
performed through Gfx::Painter, and whenever its content has to be
accessed, we need to take a snapshot of the corresponding GPU surface.

A new DrawPaintingSurface display list command is introduced to allow
cheap blitting of canvas content without having to read GPU surface
content into RAM.
2024-11-07 13:48:12 +01:00
Aliaksandr Kalenik
ab9ecbd79d LibCore+LibGfx+LibWeb: Move VulkanContext into LibGfx
Since the Vulkan context is currently only used by LibGfx, it could be
moved there to avoid having Vulkan as a dependency for everything that
uses LibCore.
2024-11-07 13:48:12 +01:00
Aliaksandr Kalenik
c4bc4fc5f6 LibCore+LibGfx+LibWeb: Move MetalContext into LibGfx
Since the Metal context is currently only used by LibGfx, it could be
moved there to avoid having Metal as a dependency for everything that
uses LibCore.
2024-11-07 13:48:12 +01:00
Aliaksandr Kalenik
25f264b7e7 LibGfx+LibWeb: Introduce PaintingSurface that wraps SkSurface from Skia
Adds a new class in LibGfx that represents GPU-accelerated surface and
will be used for both <canvas> and page rendering (display list player).
2024-11-07 13:48:12 +01:00
Aliaksandr Kalenik
5c1f6bf8ee LibGfx+LibWeb: Make SkiaBackendContext ref-counted 2024-11-07 13:48:12 +01:00
Aliaksandr Kalenik
1688cbc991 LibWeb+LibGfx: Move class that represents Skia GPU context to LibGfx
This is required to share GPU context creation code between display list
player, which resides in LibWeb, and PainterSkia, which handles <canvas>
painting.
2024-11-07 13:48:12 +01:00
Tim Ledbetter
29f419d637 Tests: Import an xht test from WPT 2024-11-07 12:02:31 +00:00
Tim Ledbetter
2681525534 headless-browser: Support running tests with the ".xht" extension 2024-11-07 12:02:31 +00:00
Pavel Shliak
1389ae02be LibGfx: Fix 24bit BMPs being transparent and send them as RGBx to Skia 2024-11-07 12:27:00 +01:00
Timothy Flynn
ad1ba30b27 WebContent: Serialize the document element's outer HTML for WebDriver
Some checks are pending
CI / Lagom (false, FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, macos-14, macOS, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (true, NO_FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (macos-14, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Push notes / build (push) Waiting to run
2024-11-06 20:44:19 -05:00
Timothy Flynn
7b64942fe2 WebContent: Return element tag names as lowercase for WebDriver
Erring on the side of web reality on this one, as other engines return
lowercase tag names, and this is expected by WPT.
2024-11-06 20:44:19 -05:00
Timothy Flynn
1417314aa9 WebContent: Do not coerce element properties to strings for WebDriver
We want the "raw" value here. The spec sort of assumes we are sending JS
values over the wire, whereas we are actually sending AK::JsonValue. So
using the JSON clone AO here is our best bet.
2024-11-06 20:44:19 -05:00
Timothy Flynn
33a00f45fd WebContent: Ensure the document's style is up to date for WebDriver
Otherwise, we have a timing issue retrieving computed styles.
2024-11-06 20:44:19 -05:00
Timothy Flynn
ecaacd2adf LibWeb+WebContent: Update our list of boolean attributes for WebDriver
Chromium has a larger list of boolean attributes, and WPT depends on it.
We must also compare attribute names case-insensitively.

Note this method is only used by WebDriver.
2024-11-06 20:44:19 -05:00
Andreas Kling
81e75530d9 LibWeb: Make :nth-* selectors match children of non-elements
Some checks failed
CI / Lagom (false, FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, macos-14, macOS, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (true, NO_FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (macos-14, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Push notes / build (push) Waiting to run
Build Dev Container Image / build (push) Has been cancelled
This was covered by WPT, which caught us not allowing :nth-child(1)
to match the root HTML element, and other similar issues.
2024-11-06 21:42:53 +01:00
Andreas Kling
eeba30f988 LibWeb: Allow :link and :any-link to match SVG <a> elements 2024-11-06 21:42:53 +01:00
Andreas Kling
92d9907f8f LibWeb: Add style invalidation for :target, :focus, :active and :link 2024-11-06 21:42:53 +01:00
Andreas Kling
1045000c28 LibWeb: Style invalidation for DOM node removal needs to happen earlier
We can't invalidate after the removal has taken effect, since that means
invalidation won't be able to find potentially affected siblings and
ancestors by traversing from the invalidation target.
2024-11-06 21:42:53 +01:00
Andreas Kling
adfc69bc67 LibWeb: Add style invalidation for :defined selector 2024-11-06 21:42:53 +01:00
Andreas Kling
6c945fc353 Tests: Import more CSS selector tests from WPT 2024-11-06 21:42:53 +01:00
Andreas Kling
9dff6bca1f Tests: Import more style invalidation tests from WPT
These will help us work on style invalidation with more confidence.
2024-11-06 21:42:53 +01:00
Timothy Flynn
80c6268431 Meta+LibJS: Upgrade to prettier version 3.3.3
Prettier v3 was released over a year ago, and most users will have it by
default by now.
2024-11-06 15:10:27 -05:00
Timothy Flynn
deb5947fc0 Meta: Fix regex version check in the lint-prettier script
If your local version is 3.2.0, this check would errantly pass.
2024-11-06 15:10:27 -05:00
Sam Atkins
f61a41d7a6 Meta: Add imported WPT ref tests to .prettierignore 2024-11-06 20:03:38 +01:00
Sam Atkins
8f21513902 Tests: Re-import tests that used ahem.css
This causes 36 new subtests to pass locally. :^)

Unfortunately at least one of these is flaky when it's able to load the
font file, apparently because we don't wait for the font and its
stylesheet to actually load before the tests run.
2024-11-06 20:03:38 +01:00
Sam Atkins
f2407cd511 Meta: Support importing WPT ref tests that use an absolute path
For example, a few ref tests have a match like this:
```
<link rel="match"
      href="/css/reference/ref-filled-green-100px-square-only.html">
```

Previously we'd interpret this as `http://css/reference/...` which made
the test runner sad.
2024-11-06 20:03:38 +01:00
Sam Atkins
8673dd4e6e Meta: Include stylesheets and stylesheet-includes in WPT imports
Because of this we no longer have to handle ahem.css in a special way.

This should find:
- <link rel=stylesheet>
- CSS `@import`s
- Any resources linked from a stylesheet with `url()`

There's a good chance there are other resources we'll want to copy too,
but CSS was a big hole.
2024-11-06 20:03:38 +01:00
Sam Atkins
a8b3d363cc Tests: Annotate reasons for skipping LibWeb tests
Eventually we want to stop skipping these, so it's helpful to know why
they were skipped in the first place. :^)

I've grouped them together by reason, so the order has changed a little.

For some of these the reason isn't clear.
2024-11-06 20:03:38 +01:00
Gingeh
f88f41cf1e LibWeb: Reject invalid processing instructions 2024-11-06 18:48:50 +01:00
Andrew Kaster
80d9949264 CMake: Add a Fuzzers preset for building fuzzers locally 2024-11-06 10:38:57 -07:00
Andrew Kaster
a283a4fce5 Meta: Add overlay port for skia to patch generated skparagraph.gni
This works around an issue in upstream skia where a debug build with
dynamic libraries includes an extra file in the skparagraph module
that is not compilable on macOS.
2024-11-06 10:38:57 -07:00
Andrew Kaster
064e85a373 Meta: Bump simdutf to version 5.6.0
With luck, this will blast the old vcpkg cache for simdutf in
github actions and allow us to move forward with the new dynamic
linking support.
2024-11-06 10:38:57 -07:00
Timothy Flynn
d86693158a Meta: Use dynamic vcpkg linkage for release builds
By using static linkage, we are opening ourselves up to ODR violations
that result in runtime crashes (rather than build-time link errors). For
example, we've seen this happen while trying to use Skia context in both
LibGfx and LibWeb.
2024-11-06 10:38:57 -07:00
Timothy Flynn
5681dbee64 Meta: Move the vcpkg installation/cache directories under Build
In addition to changing the build-type dependent build directories, we
can take this opportunity to move the vcpkg cache directory to the Build
folder itself. This probably isn't 100% needed, but it ensures that no
leftover artifacts are used from non-dynamic vcpkg builds, and it's also
generally nice to have all build artifacts under Build.
2024-11-06 10:38:57 -07:00
Timothy Flynn
4ffca2089e Meta: Change the default build directories to exclude "ladybird" prefix
The reason for this change is that CMake/vcpkg are unable to detect a
change to VCPKG_LIBRARY_LINKAGE. So when we switch to dynamic builds,
the switch would be non-functional, and every developer would have to
remove their Build and vcpkg cache directories manually. By changing
these directories, vcpkg is able to detect it must rebuild.
2024-11-06 10:38:57 -07:00
Andrew Kaster
dfd928a8f8 CMake: Install simdutf runtime components as required
Using install(IMPORTED_RUNTIME_ARTIFACTS), we can re-export the
shared library and frameworks we imported from outside the build
tree into our install treer. This is required for simdutf as it
is a dependency of the AK library, and we need liblagom-ak.so to
be loadable when doing fuzzer and cross-compile builds for the
Lagom tools.
2024-11-06 10:38:57 -07:00
Timothy Flynn
35639ebc77 Meta: Update libpng to version 1.6.43#3
This is a fix to the vcpkg package itself to fix some exported symbols.
2024-11-06 10:38:57 -07:00