Commit Graph

298 Commits

Author SHA1 Message Date
Jonne Ransijn
3eabeaa198 LibIDL: Fix use-after-free in GenerateWindowOrWorkerInterfaces
`lexical_bases` was storing `StringView`s into `ByteString`s returned
from `LexicalPath::string()` that might no longer exist.

(cherry picked from commit c3783cf3bd8261b6f456cd9f796cc6a0b03096ee)
2024-11-23 22:07:22 -05:00
Luke Wilde
3ce2605096 LibIDL: Allow overwriting the generated attribute callback name
This will allow the CSSStyleDeclaration IDL attribute generator to
implement it's own C++ acceptable identifier sanitization and
deduplication.

(cherry picked from commit d95ae629ee03b99d39930ee5806739622dc8cee6)
2024-11-23 22:07:22 -05:00
Luke Wilde
c0adae8d7d LibIDL: Support multiple import base paths for resolving imports
This allows us to specify multiple base paths to look for imported IDL
files in. This will allow us to import IDL files from sources and from
the Build directory (i.e. for generated IDL files).

(cherry picked from commit 300f212044e5475a8e14c585a79c0b5bb56688f4)
2024-11-23 22:07:22 -05:00
Andreas Kling
9b4db4a0e0 LibWeb: Make DOMException take error message as a String
There was no need to use FlyString for error messages, and it just
caused a bunch of churn since these strings typically only existed
during the lifetime of the error.

(cherry picked from commit 175f3febb8037a440d4ead7347d3266ee3d345e1;
minorly amended to fix conflict in WebSocket.cpp due to serenity
not having the adapter class removal in LadybirdBrowser/ladybird#1671)
2024-11-22 11:13:42 -05:00
Shannon Booth
2855880f8a LibWeb+LibURL: Move HTML::Origin to URL::Origin
While Origin is defined in the HTML spec - this leaves us with quite an
awkward relationship as the URL spec makes use of AO's from what is
defined in the HTML spec.

To simplify this factoring, relocate Origin into LibURL.

(cherry picked from commit dc401f49ea7e861064484e79594e35c3d93000ae;
amended to fix minor conflicts due to serenity not (yet?) having a
LibUnicode/Segmenter.h include in Document.cpp, and due to
BrowsingContext already having LadybirdBrowser/ladybird#2358 in
serenity)
2024-11-21 22:16:27 -05:00
Shannon Booth
d6d8ce68c8 LibWeb: Correct attributes on IDL interface 'operations'
This fixes four tests for the IDL harness for URL under:

https://wpt.live/url/idlharness.any.html
and https://wpt.live/url/idlharness.any.worker.html

But probably some tests in other places too :^)

(cherry picked from commit e9dd05b2b52aa6363b5c5e2e90099b8e1c28e868)
2024-11-21 22:16:27 -05:00
Shannon Booth
049fcbd810 LibWeb: Factor out function to define the 'operations' on an interface
(cherry picked from commit fb2b78620d7db7b969c29624d0cc183222441e9c)
2024-11-21 22:16:27 -05:00
Shannon Booth
be9872c3fd LibWeb: Add support for dictionaries in overload resolution
By making use of the known set of supported dictionary names in that
overload set. Note that this list is typically very small (the max that
we have currently is 1).

(cherry picked from commit 70599d3f8d015ca0e5c704e8b0afad85a0f2fa1a)
2024-11-17 13:47:42 -05:00
Shannon Booth
c48cc68197 LibWeb: Verify that all overloads contain Unscopable if present
It would be strange for the IDL to be defined as such, so instead of
leaving a FIXME comment, let's just verify that this doesn't happen in
practise incase it does end up happening in reality.

(cherry picked from commit 013c2a1c7cda0d5921e2368e5de3a65ed9208625)
2024-11-17 13:47:42 -05:00
stelar7
25374a193c LibWeb/Meta: Adjust how missing/invalid default values are generated
(cherry picked from commit d81f31c6993a422e02d48b02872de436a07e73b7)
2024-11-14 17:46:06 -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
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
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
Jelle Raaijmakers
8563e4a1cc Meta: Reuse built-in JS types list for IDL to C++ generation
This opens up the code path for the `ArrayBuffer` type, which can now be
used as a method argument.

(cherry picked from commit 0b9d55b6761b85b3b80a459d6231841e72a26c51)
2024-11-13 10:17:34 -05:00
justus2510
da16c169ae LibWeb: Handle unpaired surrogates in USVStrings
This should fix (at least) the last two remaining WPT test failures in
FileAPI/unicode.html.

(cherry picked from commit 55f0dc823ff266aeb29fd6f7d47d5e7f89a50ee6)
2024-11-12 19:57:55 -05:00
Jonne Ransijn
5d6ef182f4 LibJS+LibWeb: Prevent double invocation of [[GetOwnProperty]]
The `[[GetOwnProperty]]` internal method invocation in
`OrdinarySetWithOwnDescriptor` was being invocated again with the same
parameters in the `[[DefineOwnProperty]]` internal method that is also
later called in `OrdinarySetWithOwnDescriptor`.

The `PlatformObject.[[DefineOwnProperty]]` has similair logic.

This change adds an optional parameter to the `[[DefineOwnProperty]]`
internal method so the results of the previous `[[GetOwnProperty]]`
internal method invocation can be re-used.

(cherry picked from commit 69f96122b6150c22d1e8dc848c097cead2d2ae3f)
2024-11-12 07:14:25 -05:00
Noah Bright
8725bb12f2 LibWeb: Define PerformanceEventTiming
https://www.w3.org/TR/event-timing/#sec-performance-event-timing

Add idl, header and stubs for PerformanceEventTiming interface.

Two missing `PerformanceEntry` types that have come up in issues
are the `first-input` and the `event` entryTypes. Those are both
this.

Also, because both of those are this same interface, the static
methods from the parent class are difficult to implement because
of instance-specific details. Might either need subclasses or to
edit the parent and also everything that inherits from it :/

(cherry picked from commit d30ae92b82d997bc4db407c563c88f90d8260093)
2024-11-11 19:54:09 -05:00
Jamie Mansfield
b8530d3848 LibWeb/WebVTT: Implement VTTRegion idl interface
(cherry picked from commit 1a012f279a9791c685781b7189fba6cddb973f96)
2024-11-10 10:46:01 -05:00
Jamie Mansfield
722e144eba LibWeb/EntriesAPI: Implement FileSystemEntry
(cherry picked from commit 169163b0023302ae3a0762d875e7b7840cfcb687)
2024-11-09 16:08:01 -05:00
Jamie Mansfield
89e76f4ea6 LibWeb: Stub MediaCapabilities IDL interface
(cherry picked from commit 4c5a1763546a0ce71703fb89a7f89c968a7ac12f)
2024-11-09 07:29:52 -05:00
Timothy Flynn
8160fba4a9 LibWeb: Allow callback parameters to be nullable
This is needed for DataTransferItem's getAsString(callback?) prototype.

(cherry picked from commit 8865d18a6715480c186141ecfe2e182405a7eb93)
2024-11-08 22:32:11 -05:00
Tim Ledbetter
8ef2496882 LibWeb: Stub the ServiceWorkerContainer interface
(cherry picked from commit 53ab6fa403ac774d6edb76c33a9b0f460eea9640)
2024-11-04 13:16:23 -05:00
Tim Ledbetter
c455a7492d LibWeb: Stub the ServiceWorkerRegistration interface
(cherry picked from commit 0c0a4a6042f7d25186c65ca60aa04d066dc51e97)
2024-11-04 13:16:23 -05:00
Tim Ledbetter
210d2c0193 IDLGenerators: Add register to the list of C++ keywords
This ensures that a generated C++ method called `register` will have an
underscore appended to it, avoiding a compile error.

(cherry picked from commit 70fdf7affb95679382a1d46cdcea81bd847c8768)
2024-11-04 13:16:23 -05:00
Timothy Flynn
cf1bdd72ac LibWeb: Implement DataTransferItemList.prototype.add()
(cherry picked from commit 74d9cfbf2a2ef84e8634dafc78fc56e6cb153b6b)
2024-11-01 22:04:14 -04:00
Timothy Flynn
7e3ead83b0 LibWeb: Implement the ClipboardEvent IDL interface
We don't actually generate any such events ourselves. But Google Lens
will create one with the DataTransfer attribute set to that of any drop
event we send it.

(cherry picked from commit 0b0d44da275067458e61a5dd80c4563f6aa7fdc6)
2024-11-01 22:04:14 -04:00
Timothy Flynn
c94054ff5c LibWeb: Sort list of imported namespaces
(cherry picked from commit 268d6dda2f060aef2a07dee7f06bcc57dccae136)
2024-11-01 22:04:14 -04:00
Jamie Mansfield
e27951fc9d LibWeb: Stub StorageManager idl interface
(cherry picked from commit 1b84062c747e90ee00c5cbc42224f2c22e9e2aba)
2024-11-01 18:23:28 -04:00
Colin Reeder
96d8776eba LibWeb: Add stub implementation of performance.navigation
(cherry picked from commit 14267b5d631d69091c1e9a936e1fa0f9a28752c1)
2024-11-01 16:16:35 -04:00
Shannon Booth
f9c502ce6d BindingsGenerator: Support nullable integral attributes
Previously we were assuming that the attribute return value was never
nullable and going to be returned in an Optional<IntegralType>, causing
complile errors for something such as: `attribute unsigned long?`.

(cherry picked from commit ad32227c833e60c55b0f5460a4f9f9c1631ecd57)
2024-10-18 21:58:17 -04:00
Shannon Booth
77f953405f BindingsGenerator: Factor out code to generate JS::Value from an integer
Mirroring the pre-existing `generate_from_integral` function. This will
allow us to fix a bug that all of these if statements have in common -
no handling of nullable types.

This also adjusts the type casted for each integral to fully match that
stated by the spec.

(cherry picked from commit d6243abec3e0f10ddf75a32c8a291f43cbdae169)
2024-10-18 21:58:17 -04:00
Tim Ledbetter
ffa5a7747e IDLGenerators: Make USVString attribute reflection spec compliant
USVString attributes Now replace any surrogates with the replacement
character U+FFFD and resolve any relative URLs to an absolute URL. This
brings our implementation in line with the specification.

(cherry picked from commit 335d51d6782c66e7743d773f6f6b6a32a2cb2067)
2024-10-17 21:31:52 -04:00
Shannon Booth
fe2f85c5a0 LibWeb: Implement USVString scalar value handling
USVString is defined in the IDL spec as:

> The USVString type corresponds to scalar value strings. Depending on
> the context, these can be treated as sequences of either 16-bit
> unsigned integer code units or scalar values.

This means we need to account for surrogate code points by using the
replacement character.

This fixes the last test in https://wpt.live/url/url-constructor.any.html

(cherry picked from commit aa32bfa4481f6298c99846025394b7bc415ca621)
2024-10-17 20:28:06 -04:00
Daniel Bertalan
aa4f0a7ec2 Meta: Cherry-pick lagom -Wmissing-declarations prep
This cherry-picks the CodeGenerators changes from the second commit in
https://github.com/LadybirdBrowser/ladybird/pull/626

We'll want to enable -Wmissing-declarations (gcc) /
-Wmissing-prototypes (lagom) for Lagom too, but that can happen
in a separate PR.

(cherry picked from commit c62240aa80dceddd7e6ba5bf779a56c84ab8c624;
amended to remove half of the changes. Many of them were in
ladybird-only code. Changed commit message.)
2024-10-08 21:04:19 -04:00
Shannon Booth
daa4dc63f5 Bindings: Remove exception handling for named_item_value
(cherry picked from commit 9b59dc5e8b88d311089e57fe134a1377a39242cb)
2024-07-28 14:12:04 -04:00
Andreas Kling
1901e96786 LibWeb: Stop trying to guess include paths in IDL codegen
It turns out we were already generating all the necessary include
statements, and we can simply remove all this goofy code soup that
uses the C preprocessor to speculatively look for include files.

(cherry picked from commit 2daaa22a15c69b89120a64d1144f99ca13ac689c)
2024-07-28 07:31:08 -04:00
bbb651
db21801fbc WebAudio: Stub AudioBufferSourceNode
(cherry picked from commit 6672fb4b47ee0da35678f55088b4afdfce5fd10b)
2024-07-23 13:06:46 -04:00
Jamie Mansfield
3719a8f76a LibWeb: Prevent infinite loop in create_an_inheritance_stack
This would continually loop on the same interface.

Co-authored-by: Matthew Olsson <matthewcolsson@gmail.com>
(cherry picked from commit e8fe7c0ee3a2cdfe55d0240e06fae288f5be5063)
2024-07-21 14:19:52 -04:00
Caitlin Potter
8de61581cf LibWeb: Implement WebIDL constructor flow for derived classes
Following the rules in the algorithm from
https://webidl.spec.whatwg.org/#js-platform-objects, "To Internally
create a new object implementing the interface interface", this change
incorporates the steps to load a prototype from new.target, and write
it to the created instance returned from constructor_impl(). This
mirrors the code for generate_html_constructor(), which incorporates
additional steps needed by Custom Elements.

Bug LadybirdBrowser/ladybird#334

(cherry picked from commit 80cd3712c2c52bf749a19cbd21af0c5c479a87c9)
2024-07-14 16:46:03 -04:00
Jamie Mansfield
a09b52e40f LibWeb/HTML: Implement TextTrackList IDL interface
(cherry picked from commit ecad28657a0941c99870bdb72f3a6f09b6db6ee3)
2024-07-14 14:01:30 -04:00
Maciej
1e41585416 LibWeb: Implement HTML DragEvent class
This just defines the class, drag events aren't actually fired yet.

(cherry picked from commit 65d8d205ee5d7ef356da58f8238e610949773683)
2024-07-13 22:52:06 -04:00
Luke Warlow
33c315bad0 LibWeb: Implement CloseWatcher API
This implements most of the CloseWatcher API from the html spec.

AbortSignal support is unimplemented.

Integration with dialogs and popovers is also unimplemented.

(cherry picked from commit b216046234560df531e1a32269e5dfa18f8f240c,
manually amended to replace a single `UIEvents::KeyCode::Key_Escape`
with `KeyCode::Key_Escape` in EventHandler.cpp since we don't have
the second commit of https://github.com/LadybirdBrowser/ladybird/pull/86)
2024-06-28 00:55:43 +02:00
Luke Warlow
39a8974840 LibWeb: Implement stub for ElementInternals
This implements a stub ElementInternals object which implements the
shadowRoot getter only.

Also implement attachInternals function.

(cherry picked from commit a65f1ecc375fa02deeab5d0e7ab4702972ffa72e)
2024-06-26 20:02:46 +02:00
Tim Ledbetter
36630bf859 LibIDL+LibWeb: Mark [FIXME] interfaces as [[Unimplemented]]
Methods and attributes marked with [FIXME] are now implemented as
direct properties with the value `undefined` and are marked with the
[[Unimplemented]] attribute. This allows accesses to these properties
to be reported, while having no other side-effects.

This fixes an issue where [FIXME] methods broke feature detection on
some sites.

(cherry picked from commit 2f5cf8ac204a58dc2a6f722dd95015c6c2fb7a78)
2024-06-26 16:34:37 +02:00
Andreas Kling
83d0599d1c LibWeb: Add Element.getHTML() and ShadowRoot.getHTML()
(cherry picked from commit fb9f3f10f3090cc2822d2c681bd7350dda17830e)
2024-06-26 08:48:11 +02:00
Matthew Olsson
3e221fbb2d IDLGenerators: Handle restricted/unrestricted floating point types 2024-05-29 08:18:24 +02:00
Andrew Kaster
7077e4d002 LibIDL+LibWeb: Add support for WebIDL setlike declarations on interfaces 2024-05-23 10:57:34 +02:00
Tim Ledbetter
d2b3007248 IDLGenerators: Use spec-compliant algorithm to parse integer values 2024-05-23 04:15:46 +02:00
Tim Ledbetter
c0e504fbdd LibWeb: Add some missing [FIXME] IDL attributes 2024-05-21 19:29:04 +02:00
Tim Ledbetter
1bc0fcca8d IDLGenerators: Support [Reflect] on long and unsigned long attributes 2024-05-21 19:28:43 +02:00