Commit graph

1180 commits

Author SHA1 Message Date
Timothy Flynn
21c1494ac5 LibWeb: Define a few missing attribute names
These are specifically boolean attributes that will be referred to in
following commits.
2022-11-10 17:02:11 +00:00
Nico Weber
6911c5545c Everywhere: Fix a few comment typos 2022-11-09 16:00:32 +00:00
Timothy Flynn
2d5381fd91 LibWeb: Add a flag to track when a browsing context has been discarded 2022-11-08 19:58:34 -05:00
Luke Wilde
fd6bb41519 LibWeb: Apply the current transform in CRC2D.stroke()
This makes the Google Docs spelling and grammar squiggles appear in the
correct position.
2022-11-08 18:47:31 +00:00
Luke Wilde
009f04fa46 LibWeb: Implement HTMLTableRowElement.deleteCell 2022-11-07 14:10:41 +01:00
Luke Wilde
6c9b3fb62e LibWeb: Implement HTMLTableRowElement.insertCell 2022-11-07 14:10:41 +01:00
Luke Wilde
1d0fe2325c LibWeb: Don't call load_src after process_the_iframe_attributes
process_the_iframe_attributes already causes a navigation, so this
would cause a double navigation and blow away any setup that JS may
have done from events fired in process_the_iframe_attributes.
2022-11-07 14:10:41 +01:00
Luke Wilde
72098d2699 LibWeb: Return after firing the iframe load event for about:blank
This was a missing spec step. This prevents it navigating to
about:blank, which will blow away the document and thus any setup that
was done in the iframe load event.
2022-11-07 14:10:41 +01:00
Luke Wilde
a569d02b0d LibWeb: Implement Window.focus 2022-11-07 14:10:41 +01:00
Luke Wilde
547e006a12 LibWeb: Extract the (un)focus steps out of HTMLElement
The (un)focus steps have no dependency on HTMLElement, thus we can
extract them into their own file. This allows them to be called
anywhere.
2022-11-07 14:10:41 +01:00
Luke Wilde
c4ee43c5b4 LibWeb: Implement HTMLSelectElement.type 2022-11-07 14:10:41 +01:00
Luke Wilde
469ef22a22 LibWeb: Add HTMLOrSVGElement.autofocus 2022-11-07 14:10:41 +01:00
Luke Wilde
1473bc9169 LibWeb: Implement HTMLOrSVGElement.tabIndex 2022-11-07 14:10:41 +01:00
Daniel Bertalan
4296425bd8 Everywhere: Remove redundant inequality comparison operators
C++20 can automatically synthesize `operator!=` from `operator==`, so
there is no point in writing such functions by hand if all they do is
call through to `operator==`.

This fixes a compile error with compilers that implement P2468 (Clang
16 currently). This paper restores the C++17 behavior that if both
`T::operator==(U)` and `T::operator!=(U)` exist, `U == T` won't be
rewritten in reverse to call `T::operator==(U)`. Removing `!=` operators
makes the rewriting possible again.
See https://reviews.llvm.org/D134529#3853062
2022-11-06 10:25:08 -07:00
Andreas Kling
5839ef2ed8 LibWeb: Render text inside <input type=password> as asterisks (*)
This makes it possible to enter passwords while recording YouTube
videos. :^)
2022-11-05 18:54:39 +01:00
Andreas Kling
c79e8aab0a LibWeb: Make ON_WHITESPACE less heavy in HTML tokenizer
Once we know that the current code point is an ASCII character, we can
just check if it's one of the HTML whitespace characters.

Before this patch, we were using the generic StringView::contains(u32)
path that splats a code point into a StringBuilder and then searches
for it with memmem().

This reduces time spent in the HTML tokenizer from 16% to 6% when
loading the ECMA-262 spec.
2022-11-05 00:31:11 +01:00
Andreas Kling
b400a34984 LibWeb: Cache the first <base href> (in tree order) in Document
When parsing relative URLs, we have to check the first <base href> in
tree order (if one is available). This was getting *very* costly on
large DOMs with many relative urls.

This patch avoids all that repeated traversal by letting Document cache
the first <base href> and invalidating the cache whenever a <base>
element is added/removed/edited in the DOM.

The browser was stuck doing this for a *very* long time when loading
the ECMA-262 spec, and this removes that problem entirely.
2022-11-05 00:30:10 +01:00
Andreas Kling
ac329d0a18 LibWeb: Make HTMLIFrameElement.contentWindow return the WindowProxy
This fixes an issue where contentWindow was not accessible immediately
after programmatically creating an iframe element.
2022-11-04 10:38:00 +01:00
Timothy Flynn
5eeb6bbee3 LibWeb: Define window.outerWidth and window.outerHeight 2022-11-01 21:16:50 +00:00
Timothy Flynn
8cc1997f33 LibWeb: Retrieve the last known window position for window.screenX/Y 2022-11-01 21:16:50 +00:00
Linus Groh
acfb546048 LibWeb: Handle currently ignored WebIDL::ExceptionOr<T>s 2022-10-31 14:12:44 +00:00
Linus Groh
1de1d6423b LibWeb: Implement the fetch() method :^)
With so much infrastructure implemented, we can finally add the last
piece of this puzzle - the fetch() method itself!

This contains a few hundred lines of generated code as handling the
RequestInfo and RequestInfo parameter types manually is not feasible,
but we can't use the IDL definition as the Window object is handwritten
code at the moment.
It's neatly tucked away in Bindings/ and will be removed eventually.
2022-10-30 20:10:29 +00:00
Linus Groh
8db64a8704 LibWeb: Implement 'Is non-secure context' AO 2022-10-30 20:10:29 +00:00
Linus Groh
4baf0a4486 LibWeb: Implement 'Is secure context' AO 2022-10-30 20:10:29 +00:00
Linus Groh
b1968b8bed LibWeb: Make Fetch::Infrastructure::{Request,Response,HeaderList} GC'd
This is the way.

On a more serious note, there's no reason to keep adding ref-counted
classes to LibWeb now that the majority of classes is GC'd - it only
adds the risk of discovering some cycle down the line, and forces us to
use handles as we can't visit().
2022-10-30 11:30:23 +00:00
Andreas Kling
a4de30de5a LibWeb: Update "appropriate template contents owner document" AO
This was moved from HTMLTemplateElement to Document at some point,
so let's match the spec and move it here too.
2022-10-29 15:16:57 +02:00
Andreas Kling
5530040b3c LibWeb: Annotate and simplify the HTML fragment parsing algorithm
This patch adds inline spec comments, and then adjusts the code a bit
so it reads more like the spec.
2022-10-29 15:16:57 +02:00
Luke Wilde
377eb09492 LibWeb: Stub HTMLMediaElement.load 2022-10-28 16:17:08 +01:00
Andreas Kling
b1c73b3605 Revert "LibWeb: Use OrderedHashMap to store pending idle callbacks"
This reverts commit dc15cacfc3.

It appears to be causing some assertions, so let's revert it.
2022-10-27 17:25:52 +02:00
networkException
681e36706b LibWeb: Implement recent changes to module script fetching
This patch implements all changes to the specification touching the
subset of module script fetching we support.

Notably it adds parts of the specification for supporting import maps.

With this we are also able to get rid of a non standard workaround for a
spec issue we discovered while initially implementing module scripts :^)
2022-10-24 23:06:56 +01:00
networkException
9afea1248f LibWeb: Add disallow further import maps steps to ESO 2022-10-24 23:06:56 +01:00
networkException
794dc2e16b LibWeb: Expose an import map and import maps allowed on Window 2022-10-24 23:06:56 +01:00
networkException
d7947995d9 LibWeb: Add the ImportMap struct 2022-10-24 23:06:56 +01:00
Linus Groh
c380d2cfdc LibWeb: Move url_origin() to URL/URL.{cpp,h} 2022-10-24 22:58:37 +01:00
Linus Groh
93405b4aff LibWeb: Add virtual destructor to Environment
This makes it polymorphic and allows checking the subclass of an
Environment with is<T>().

We also need to change the inheritance order so JS::Cell comes first for
this to work. Unfortunately, I have no idea why that is.

Co-Authored-By: Andreas Kling <kling@serenityos.org>
2022-10-24 22:58:37 +01:00
Linus Groh
0ee8da9556 LibWeb: Add referrer policy to PolicyContainer 2022-10-24 22:58:37 +01:00
Linus Groh
4817b7c623 LibWeb: Add policy container to {Window,Worker}EnvironmentSettingsObject 2022-10-24 22:58:37 +01:00
davidot
29a96b1304 LibWeb: Make HTMLProgressElement use the new double parser 2022-10-23 15:48:45 +02:00
davidot
6e9969ded0 LibWeb: Make HTMLInputElement of type number use the new double parser 2022-10-23 15:48:45 +02:00
Luke Wilde
645a64ef0f LibWeb: Don't get impl in document_tree_child_browsing_context_count
This caused `Object.getOwnPropertyNames(window)` to throw, as the
`this` value is `Object`.

All users of document_tree_child_browsing_context_count call it on an
existing Window impl, including WP::internal_own_property_keys, so
getting the impl from the JS VM is not necessary.
2022-10-20 17:57:45 +02:00
Andreas Kling
58522f5088 LibWeb: Make window.{window,self,frames} return the WindowProxy
These now follow the spec and return the WindowProxy rather than the
Window itself.
2022-10-20 16:01:26 +02:00
Andreas Kling
8fd59fce9c LibWeb: Remove unnecessary hack in HTML::Window::initialize()
We don't need to force-set the realm's global object during
initialization anymore, now that intrinsics are set up elsewhere.
2022-10-20 15:31:12 +02:00
Andreas Kling
dc15cacfc3 LibWeb: Use OrderedHashMap to store pending idle callbacks
This removes the need for a separate IdleCallback object per
registration, since the handles are now used as map keys.
2022-10-20 15:16:23 +02:00
Andreas Kling
268b9c5d90 LibWeb: Make the layout tree GC-allocated
This removes a set of complex reference cycles between DOM, layout tree
and browsing context.

It also makes lifetimes much easier to reason about, as the DOM and
layout trees are now free to keep each other alive.
2022-10-20 15:16:23 +02:00
Andreas Kling
83c5ff57d8 LibWeb: Make BrowsingContext GC-allocated
(And BrowsingContextGroup had to come along for the ride as well.)
This solves a number of nasty reference cycles between browsing
contexts, history items, and their documents.
2022-10-20 15:16:23 +02:00
Andreas Kling
6e0f80fbe0 LibWeb: Make the HTMLParser GC-allocated
This prevents a reference cycle between a HTMLParser opened via
document.open() and the document. It was one of many things keeping
some documents alive indefinitely.
2022-10-20 15:16:23 +02:00
Andreas Kling
18a5c56f14 LibWeb: Don't store JS::Handle<JS::Promise> in EnvironmentSettingsObject
Now that the ESO is a JS::Cell, we can just store them as NonnullGCPtr
and mark them in visit_edges().
2022-10-20 15:16:23 +02:00
Andreas Kling
dbee75af19 LibWeb: Tear down old layout tree when new document becomes active
When a new document becomes the active document of a browsing context,
we now notify the old document, allowing it to tear down its layout
tree. In the future, there might be more cleanups we'd like to do here.
2022-10-20 15:16:23 +02:00
Andreas Kling
94f0c34dfe LibWeb: Remove unnecessary WeakPtr in queue_microtask_impl()
Capturing a WeakPtr to a GC-allocated object in a JS::SafeFunction is
basically pointless, since the SafeFunction mechanism will then keep
the object alive anyway.
2022-10-20 15:16:23 +02:00
Andreas Kling
57f508f048 LibWeb: Use JS::SafeFunction in run_timer_initialization_steps() 2022-10-20 15:16:23 +02:00