Commit graph

232 commits

Author SHA1 Message Date
Andreas Kling
ec24d7555a LibWeb: Add a simple internals objects only available during testing
This object is available as `window.internals` (or just `internals`) and
is only accessible while running in "test mode".

This first version only has one API: gc(), which triggers a garbage
collection immediately.

In the future, we can add more APIs here to help us test parts of the
engine that are hard or impossible to reach via public web APIs.
2023-08-06 15:26:34 +02:00
Shannon Booth
a975fca42e LibWeb: Implement size attribute of ByteLengthQueuingStrategy
Co-authored-by: Matthew Olsson <mattco@serenityos.org>
2023-06-23 13:27:29 +02:00
Shannon Booth
49689e5d8e LibWeb: Implement size attribute of CountQueuingStrategy
Co-authored-by: Matthew Olsson <mattco@serenityos.org>
2023-06-23 13:27:29 +02:00
Aliaksandr Kalenik
147c3b3d97 LibWeb+WebContent: Forbid access to underlying type of CSSPixels
Although DistinctNumeric, which is supposed to abstract the underlying
type, was used to represent CSSPixels, we have a whole bunch of places
in the layout code that assume CSSPixels::value() returns a
floating-point type. This assumption makes it difficult to replace the
underlying type in CSSPixels with a non-floating type.

To make it easier to transition CSSPixels to fixed-point math, one step
we can take is to prevent access to the underlying type using value()
and instead use explicit conversions with the to_float(), to_double(),
and to_int() methods.
2023-06-13 06:08:27 +02:00
stelar7
9c74f49b1d LibWeb: Implement has_transient_activation 2023-06-01 14:28:52 +02:00
Andreas Kling
655d9d1462 LibWeb: Make CSSPixels and Length use 64-bit (double) floating point
This fixes a plethora of rounding problems on many websites.
In the future, we may want to replace this with fixed-point arithmetic
(bug #18566) for performance (and consistency with other engines),
but in the meantime this makes the web look a bit better. :^)

There's a lot more things that could be converted to doubles, which
would reduce the amount of casting necessary in this patch.
We can do that incrementally, however.
2023-05-24 14:40:35 +02:00
Kenneth Myhra
cbefab21be LibWeb: Port fire_a_page_transition_event() to new FlyString 2023-04-09 17:27:27 +02:00
Kenneth Myhra
4d87072201 LibWeb: Port {HTML,UIEvents,XHR}::EventNames to new String 2023-04-06 23:49:08 +02:00
Luke Wilde
034aaf3f51 LibWeb: Introduce CustomElementRegistry and creating custom elements
The main missing feature here is form associated custom elements.
2023-04-06 11:36:56 +02:00
Kenneth Myhra
1080281e58 LibWeb: Port AbstractBrowsingContext to String 2023-04-06 08:41:43 +02:00
Luke Wilde
cbe0901706 LibWeb: Implement performance.mark and performance.clearMarks 2023-03-23 21:00:43 +00:00
Timothy Flynn
2a410f8985 LibWeb: Change "popup"-related storage types to named enums 2023-03-22 00:12:53 +01:00
Timothy Flynn
bff109ee50 LibWeb: Change the "noreferrer" storage type to a named enum 2023-03-22 00:12:53 +01:00
Timothy Flynn
1b811191cd LibWeb+WebContent: Change the "noopener" storage type to a named enum 2023-03-22 00:12:53 +01:00
Timothy Flynn
57646c86ef LibWeb: Port the WebAssembly namespace to IDL 2023-03-16 19:39:17 +00:00
Timothy Flynn
2d45e1fca5 LibWeb: Port the CSS namespace to IDL 2023-03-15 12:48:25 -04:00
Timothy Flynn
9c569e8a0f LibWeb: Implement the [PutForwards] IDL extended attribute
For example, consider the attribute:

    interface Element {
        [PutForwards=value] readonly attribute DOMTokenList classList;
    }

When `classList` is set, we should instead set the attribute `value` on
the `classList` attribute of the Element interface.
2023-03-14 16:30:19 -04:00
Timothy Flynn
0aa4466ce9 LibWeb: Port {set,clear}{Timeout,Interval} to IDL 2023-03-14 09:07:40 -04:00
Timothy Flynn
2895b7e733 LibWeb: Port the WindowOrWorkerGlobalScopeMixin timer handler to String
This will make porting to IDL a bit cleaner.
2023-03-14 09:07:40 -04:00
Timothy Flynn
dd992e7dad LibWeb: Move timer implementations to WindowOrWorkerGlobalScopeMixin
This is where it belongs according to the spec, and where these methods'
IDL will be placed.

This forces us to implement a few steps closer to the spec as well.
2023-03-14 09:07:40 -04:00
Timothy Flynn
97536e4684 LibWeb+Ladybird+Userland: Port window.[alert,confirm,prompt] to String
LibGUI and WebDriver (read: JSON) API boundaries use DeprecatedString,
so that is as far as these changes can reach.

The one change which isn't just a DeprecatedString to String replacement
is handling the "null" prompt response. We previously checked for the
null DeprecatedString, whereas we now represent this as an empty
Optional<String>.
2023-03-13 22:05:22 +00:00
Linus Groh
41b8d81d49 LibWeb/HTML: Remove redundant namespace qualifiers from Window.{cpp,h} 2023-03-11 18:26:40 +00:00
Linus Groh
324dacbc5d LibWeb/HTML: Propagate OOM errors from Window::{local,session}_storage()
This requires a bit of error type conversion glue as HashMap::try_ensure
expects the callback to return ErrorOr<T> like the function itself does.
2023-03-11 18:26:40 +00:00
Linus Groh
4da68384e6 LibWeb/HTML: Make Window::m{location,navigator} lazily allocated
This now matches the other window-owned objects, which already do this:
m_crypto, m_performance, m_screen.
2023-03-11 17:53:50 +00:00
Linus Groh
22552382ff LibWeb/HTML: Use CreateMethodProperty for Window namespace properties
This makes sure the property attributes are correct (writable and
configurable), which they currently aren't for either CSS or
WebAssembly.
2023-03-11 17:32:07 +00:00
Linus Groh
d4d49e00a2 LibWeb/Bindings: Remove now unused REPLACEABLE_PROPERTY_SETTER() macro 2023-03-07 23:33:34 +00:00
Linus Groh
351e5ca917 LibWeb/HTML: Port Window.queueMicrotask() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
129ab02470 LibWeb/HTML: Port Window.structuredClone() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
a31c561a5a LibWeb/HTML: Port Window.sessionStorage to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
37e9302dd9 LibWeb/HTML: Port Window.localStorage to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
5cc6b1c4db LibWeb/HTML: Port Window.fetch() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
a2fb3a1653 LibWeb/HTML: Port Window.cancelAnimationFrame() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
211e6c1fbc LibWeb/HTML: Port Window.requestAnimationFrame() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
86589f09dc LibWeb/HTML: Port Window.cancelIdleCallback() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
b410804f54 LibWeb/HTML: Port Window.requestIdleCallback() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
606b9ff6f3 LibWeb/HTML: Port Window.getSelection() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
56550b6ec0 LibWeb/HTML: Port Window.focus() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
b59505aba5 LibWeb/HTML: Port Window.getComputedStyle() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
8454eb874f LibWeb/HTML: Port Window.devicePixelRatio to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
46e547d774 LibWeb/HTML: Port Window.outer{Width,Height} to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
80acf03278 LibWeb/HTML: Port Window.screen{X,Y} / Window.screen{Left,Top} to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
3d075e55f5 LibWeb/HTML: Port Window.scrollBy() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
2b6d9cca1a LibWeb/HTML: Port Window.scroll() to IDL
...with various changes required due to ScrollBehavior / ScrollOptions
moving from Element.idl to Window.idl.
2023-03-07 23:33:34 +00:00
Linus Groh
40b4ee88de LibWeb/HTML: Port Window.scroll{X,Y} / Window.page{X,Y}Offset to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
25f53a577d LibWeb/HTML: Port Window.inner{Width,Height} to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
0c691087ca LibWeb/HTML: Port Window.screen to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
2beb99b76e LibWeb/HTML: Port Window.matchMedia() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
198db2ebd9 LibWeb/HTML: Port Window.crypto to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
7de9179a6d LibWeb/HTML: Port Window.performance to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
95ce5735ce LibWeb/HTML: Port Window.event to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
6dd1934ed8 LibWeb/HTML: Port Window.atob() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
192f5e61f6 LibWeb/HTML: Port Window.btoa() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
94f1eff291 LibWeb/HTML: Port Window.isSecureContext to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
188aac5077 LibWeb/HTML: Port Window.origin to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
376fb9ae40 LibWeb/HTML: Hook up WindowOrWorkerGlobalScopeMixin to Window
This prepares us to use the shared implementations from this class.
2023-03-07 23:33:34 +00:00
Linus Groh
b2409517bd LibWeb/HTML: Port Window.open() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
efa48142d2 LibWeb/HTML: Port Window.frameElement to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
c6353ac8cd LibWeb/HTML: Port Window.parent to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
dba8dbe07d LibWeb/HTML: Port Window.top to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
baaf891c64 LibWeb/HTML: Port Window.length to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
c42496187b LibWeb/HTML: Port Window.history to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
eccc0d90de LibWeb/HTML: Port Window.location to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
0e40841990 LibWeb/HTML: Port Window.name to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
0e587420a8 LibWeb/HTML: Port Window.document to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
dcff775ab1 LibWeb/HTML: Port Window.frames to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
437a7c977e LibWeb/HTML: Port Window.self to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
d57876306c LibWeb/HTML: Port Window.window to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
eb2425040b LibWeb/HTML: Port Window.navigator to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
c219e6d9c1 LibWeb/HTML: Port Window.postMessage() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
eb4842dfa1 LibWeb/HTML: Port Window.prompt() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
bbffda5f55 LibWeb/HTML: Port Window.confirm() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
a0b73eb5f7 LibWeb/HTML: Port Window.alert() to IDL 2023-03-07 23:33:34 +00:00
Linus Groh
a6f8b18649 LibWeb/HTML: Define Window's {Global,Window}EventHandlers via IDL 2023-03-07 23:33:34 +00:00
Linus Groh
c130fd6993 LibWeb: Start generating code for the Window object from IDL :^) 2023-03-07 23:33:34 +00:00
Linus Groh
cc1e8a4e9f LibWeb/HTML: Propagate errors from Window::initialize_web_interfaces() 2023-03-05 21:22:34 +00:00
Kenneth Myhra
eed69e5093 LibWeb: Port MessageEvent to new String 2023-03-05 18:25:59 +00:00
Kenneth Myhra
97947fdffa LibWeb: Port PageTransitionEvent to new String 2023-03-05 18:25:59 +00:00
Luke Wilde
7b635998a8 LibWeb: Make Window.screen a replaceable attribute
Required by Shadertoy.
2023-03-03 22:27:49 +00:00
Linus Groh
51c3967516 Everywhere: Use '_{short_,}string' literals more
This mostly updates code what was written before but merged after these
were added.
2023-02-28 15:15:36 +00:00
Andreas Kling
3a5802540e LibWeb: Follow-up fixes for Linus's comments in #17658 2023-02-28 13:16:39 +01:00
Luke Wilde
4d0277cd9a LibWeb: Implement navigator.{plugins,mimeTypes} 2023-02-28 12:36:14 +01:00
Andreas Kling
7e76a51cb0 LibWeb: Rename Layout::InitialContainingBlock to Layout::Viewport
The name "initial containing block" was wrong for this, as it doesn't
correspond to the HTML element, and that's specifically what it's
supposed to do! :^)
2023-02-28 12:21:56 +01:00
Luke Wilde
1c918e826c LibWeb: Define navigator/clientInformation with define_native_accessor
Defining it as a direct property causes it to have no getter/setter
function, which causes an empty Optional crash when attempting to
access such getter on a cross-origin iframe.

Fixes amazon.com crashing on this particular crash.
2023-02-28 08:45:23 +00:00
Kenneth Myhra
f0fd1cae3d LibWeb: Make factory method of IdleDeadline fallible 2023-02-22 09:55:33 +01:00
Sam Atkins
2db168acc1 LibTextCodec+Everywhere: Port Decoders to new Strings 2023-02-19 17:15:47 +01:00
Sam Atkins
f2a9426885 LibTextCodec+Everywhere: Return Optional<Decoder&> from decoder_for() 2023-02-19 17:15:47 +01:00
Kenneth Myhra
3e834636a6 LibWeb: Make factory method of HTML::Window fallible 2023-02-18 00:52:47 +01:00
Kenneth Myhra
b41401bab2 LibWeb: Make factory method of HTML::Storage fallible 2023-02-18 00:52:47 +01:00
Kenneth Myhra
d9845bb24b LibWeb: Make factory method of HTML::PageTransitionEvent fallible 2023-02-18 00:52:47 +01:00
Kenneth Myhra
8fbd43cb27 LibWeb: Make factory method of CSS::ResolvedCSSStyleDeclaration fallible 2023-02-18 00:52:47 +01:00
Kenneth Myhra
bc02686ae9 LibWeb: Make factory method of CSS::MediaQueryList fallible 2023-02-18 00:52:47 +01:00
Kenneth Myhra
7ec444047c LibWeb: Make factory methods of HTML::MessageEvent fallible 2023-02-18 00:52:47 +01:00
Kenneth Myhra
58af8e2021 LibWeb: Make factory method of Crypto::Crypto fallible 2023-02-18 00:52:47 +01:00
Timothy Flynn
88814acbd3 LibJS+Everywhere: Convert JS::Error to String
This includes an Error::create overload to create an Error from a UTF-8
StringView. If creating a String from that view fails, the factory will
return an OOM InternalError instead. VM::throw_completion can also make
use of this overload via its perfect forwarding.
2023-02-17 09:14:23 -05:00
Sam Atkins
d6075ef5b5 LibTextCodec+Everywhere: Make TextCodec::decoder_for() take a StringView
We don't need a full String/DeprecatedString inside this function, so we
might as well not force users to create one.
2023-02-15 12:48:26 -05:00
Timothy Flynn
c3abb1396c LibJS+LibWeb: Convert string view PrimitiveString instances to String
First, this adds an overload of PrimitiveString::create for StringView.
This overload will throw an OOM completion if creating a String fails.
This is not only a bit more convenient, but it also ensures at compile
time that all PrimitiveString::create(string_view) invocations will be
handled as String and OOM-aware.

Next, this wraps all invocations to PrimitiveString::create(string_view)
with MUST_OR_THROW_OOM.

A small PrimitiveString::create(DeprecatedFlyString) overload also had
to be added to disambiguate between the StringView and DeprecatedString
overloads.
2023-02-09 17:13:33 +00:00
Timothy Flynn
b75b7f0c0d LibJS+Everywhere: Propagate Cell::initialize errors from Heap::allocate
Callers that are already in a fallible context will now TRY to allocate
cells. Callers in infallible contexts get a FIXME.
2023-01-29 00:02:45 +00:00
Linus Groh
afc055c088 LibWeb: Convert the Location object to IDL
This includes:

- Moving it from Bindings/ to HTML/
- Renaming it from LocationObject to Location
- Removing the manual definitions of the constructor and prototype
- Removing special handling of the Location interface from the bindings
  generator
- Converting the JS_DEFINE_NATIVE_FUNCTIONs to regular functions
  returning DeprecatedString instead of PrimitiveString
- Adding missing (no-op) setters for the various attributes, which are
  expected to exist by the bindings generator
2023-01-18 17:36:39 -05:00
Cameron Youell
204257526c LibWeb: Define window.isSecureContext 2023-01-18 09:52:47 +00:00
Timothy Flynn
afeb7273cc LibJS+Everywhere: Rename Value::to_string to to_deprecated_string 2023-01-15 01:00:20 +00:00