Andreas Kling
d4acdac317
LibWeb+WebContent+Browser: Plumb visibility state from GUI to web pages
...
OOPWV now reacts to show/hide events and informs LibWeb about the state
change. This makes visibilitychange events fire when switching tabs. :^)
2022-09-20 10:32:14 +02:00
Andreas Kling
e5f6d36616
LibWeb: Keep more of the navigation parameters in Document
2022-09-20 10:32:13 +02:00
Andreas Kling
42b8656db3
LibWeb: Flesh out "document visibility" state a bit more
...
We can now "update the visibility state", which also causes
`visibilitychange` events to fire on the document.
This still needs GUI integration work at the BrowsingContext level.
2022-09-20 10:32:13 +02:00
Andreas Kling
0810e77d77
LibWeb: Set the document "completely loaded time" when appropriate
2022-09-20 10:32:12 +02:00
Andreas Kling
8ead228202
LibWeb: Implement "browsing context group" concept from the HTML spec
2022-09-20 10:32:12 +02:00
Andreas Kling
e6ef366859
LibWeb: Implement basic support for Document.all
...
The finer details are missing here, but the basic API is up.
2022-09-18 02:17:29 +02:00
Andreas Kling
fa2dd4cbe3
LibWeb: Make Document vend the same HTMLCollections every time
2022-09-18 02:08:01 +02:00
Andreas Kling
1903dff365
LibWeb: Support getting and setting Attr.textContent
2022-09-18 02:08:01 +02:00
Andreas Kling
530675993b
LibWeb: Rename Attribute to Attr
...
This name is not very good, but it's what the specification calls it.
2022-09-18 02:08:01 +02:00
Andreas Kling
3c3ae3a768
LibWeb: Only uppercase qualified names in HTML documents
...
This takes care of an old FIXME now that we can distinguish between HTML
and non-HTML documents.
2022-09-18 00:53:26 +02:00
Andreas Kling
dc6e625680
LibWeb: Make ParentNode.children vend the same HTMLCollection every time
...
Instead of creating a new HTMLCollection every time you access
.children, we now follow the spec and vend the same object.
This was annoyingly difficult before, and trivial now that the DOM is
garbage-collected. :^)
2022-09-18 00:42:33 +02:00
Andreas Kling
6b3293a74b
LibWeb: Support getElementsByTagName() properly in non-HTML documents
2022-09-18 00:39:42 +02:00
Andreas Kling
bd0648a492
LibWeb: Simplify getElementsByTagName{,NS}() filters
...
Everything below the collection root is a descendant of the collection
root, so there's no need to check is_descendant_of() :^)
2022-09-18 00:37:24 +02:00
Andreas Kling
da451467b1
LibWeb: Implement basic "scroll" events at the document level
2022-09-17 18:53:26 +02:00
Andreas Kling
07c4bf03b5
LibWeb: Add "scripts to execute in order as soon as possible"
...
Previously, we had accidentally conflated this set with the
similar-but-distinct "scripts to execute as soon as possible".
2022-09-17 18:53:26 +02:00
Andreas Kling
df7e64d103
LibWeb: Handle multiple class names in getElementsByClassName()
...
The input string is actually a space-separated list of class names,
not a single class name.
2022-09-17 18:53:26 +02:00
Andreas Kling
9e274d9501
LibWeb: Make Document.createElement() lowercase HTML local names
...
Bring createElement() a little bit closer to spec-compliance.
2022-09-17 18:53:26 +02:00
Andreas Kling
d9c64ee876
LibWeb: Hoist case sensitivity check out of loop in Element::has_class()
2022-09-15 16:16:56 +02:00
Luke Wilde
6a4934a030
LibWeb: Implement document.domain getter
...
The document.domain setter is currently stubbed as that is a doozy to
implement, given how much restrictions there are in place to try and
prevent use of it and potential multi-process implications.
This was the only thing preventing us from being able to start
displaying ads delivered via Google Syndication.
2022-09-15 09:46:04 +02:00
Andreas Kling
df49a6ae9b
LibWeb: Schedule a layout update in Document::invalidate_layout()
...
Otherwise, nothing will repaint until someone else decides to trigger
an update.
2022-09-14 21:23:39 +02:00
Andreas Kling
4b9c5635b3
LibWeb: Make :link selector behave according to spec
...
It should match any `a` or `area` element that has an `href` attribute,
not any element *inside* an enclosing linked element.
2022-09-14 14:43:17 +02:00
Hendiadyoin1
34439a04e8
LibWeb: Add a visit_edges for DOM/Event
2022-09-13 20:55:21 +02:00
Hendiadyoin1
5bd34f115e
LibWeb: Add some missing includes
2022-09-13 20:55:21 +02:00
Luke Wilde
875ca2fb68
LibWeb: Set prototype for both TextDecoder and AbortSignal
...
These were forgotten to be set during the GC heap conversion.
2022-09-09 20:47:43 +02:00
Andreas Kling
b7d8fbbd70
LibWeb: Update layout in Element.client{Left,Top}
...
We have to flush any pending layout changes before getting metrics.
2022-09-09 15:20:10 +02:00
Andreas Kling
67b3af8025
LibWeb: Avoid layout in Element.client{Width,Height} if possible
...
When querying the HTML element (in strict mode) or the BODY element
(in quirks mode), we return the viewport dimensions.
Layout doesn't change the size of the viewport, so we can actually
reorder the steps here and avoid performing layout in some cases.
This removes a bunch of synchronous layouts on pages with reCAPTCHA.
2022-09-09 15:20:10 +02:00
Andreas Kling
524ec95bcd
LibWeb: Keep CSS sheets sorted in document tree order
...
This ensures that style is applied consistently, even if the document
has external CSS resources that don't always arrive in the same order.
2022-09-09 15:20:10 +02:00
Andreas Kling
9567e211e7
LibWeb+WebContent: Add abstraction layer for event loop and timers
...
Instead of using Core::EventLoop and Core::Timer directly, LibWeb now
goes through a Web::Platform abstraction layer instead.
This will allow us to plug in Qt's event loop (and QTimer) over in
Ladybird, to avoid having to deal with multiple event loops.
2022-09-07 20:30:31 +02:00
Andreas Kling
4c665c3749
LibWeb: Remove some unnecessary use of the internal realm in EventTarget
...
Now that EventTarget is GC-allocated, it can find the GC heap by just
calling heap() on itself, no need to get this via the internal realm.
2022-09-06 01:07:59 +02:00
Andreas Kling
8f110e0fb1
LibWeb: Remove the NoInstanceWrapper extended IDL attribute
...
No interfaces require wrappers anymore, so we can just make this the
default mode.
2022-09-06 00:27:09 +02:00
Andreas Kling
9176a0de99
LibWeb: Stop using Bindings::wrap() in a bunch of places
...
wrap() is now basically a no-op so we should stop using it everywhere
and eventually remove it. This patch removes uses of wrap() in
non-generated code.
2022-09-06 00:27:09 +02:00
Andreas Kling
45425de849
LibWeb: Use the WRAPPER_HACK() macro instead of hand-coding wrap()
...
This macro will soon go away, but let's start by replacing all the
hand-coded versions of wrap() with this macro that expands to the same
exact thing.
2022-09-06 00:27:09 +02:00
Andreas Kling
3768743a0a
LibWeb: Remove now-unused Bindings::Wrappable class
2022-09-06 00:27:09 +02:00
Andreas Kling
497ead37bc
LibWeb: Make DOMException GC-allocated
2022-09-06 00:27:09 +02:00
Andreas Kling
57db2529cf
LibWeb: Make DOMRect, DOMRectReadOnly and DOMRectList GC-allocated
2022-09-06 00:27:09 +02:00
Andreas Kling
b30e95eb27
LibWeb: Don't allocate NamedNodeMap in Element constructor
...
Allocations should happen in the initialize() virtual, so move it there.
2022-09-06 00:27:09 +02:00
Andreas Kling
ffad902c07
LibWeb: Use cached_web_prototype() as much as possible
...
Unlike ensure_web_prototype<T>(), the cached version doesn't require the
prototype type to be fully formed, so we can use it without including
the FooPrototype.h header. It's also a bit less verbose. :^)
2022-09-06 00:27:09 +02:00
Andreas Kling
dd9cd3050b
LibWeb: Use correct Window object when dispatching Document load event
2022-09-06 00:27:09 +02:00
Andreas Kling
1029ea4b32
LibWeb: Use correct relevant settings object in Document initialization
...
The code was not in line with the spec comment right above it.
2022-09-06 00:27:09 +02:00
Andreas Kling
a835f313f7
LibWeb: Make Document::is_fully_active() more robust
...
We were missing a check for null browsing context container documents.
2022-09-06 00:27:09 +02:00
Andreas Kling
4901f69345
LibWeb: Don't capture raw ptr in Document::completely_finish_loading()
...
It's not safe to capture a raw pointer in a HTML task, as the garbage
collector doesn't have visibility into the task captures.
2022-09-06 00:27:09 +02:00
Andreas Kling
b8d485e6f0
LibWeb: Make AbortController GC-allocated
2022-09-06 00:27:09 +02:00
Andreas Kling
16fbb91aa1
LibWeb: Make History GC-allocated
2022-09-06 00:27:09 +02:00
Andreas Kling
2bba97964b
LibWeb: Make HTMLCollection and subclasses GC-allocated
2022-09-06 00:27:09 +02:00
Andreas Kling
4c887bf6c3
LibWeb: Remove Document::interpreter()
...
Nobody needs this anymore, so we can finally remove it. :^)
2022-09-06 00:27:09 +02:00
Andreas Kling
2d72abc3d4
LibWeb+WebContent: Store Realm instead of Interpreter in ConsoleClient
2022-09-06 00:27:09 +02:00
Andreas Kling
905eb8cb4d
LibWeb: Make MutationObserver GC-allocated
2022-09-06 00:27:09 +02:00
Andreas Kling
43ec0f734f
LibWeb: Make MutationRecord GC-allocated
2022-09-06 00:27:09 +02:00
Andreas Kling
48e0066371
LibWeb: Make NodeList GC-allocated
2022-09-06 00:27:09 +02:00
Andreas Kling
6f433c8656
LibWeb+LibJS: Make the EventTarget hierarchy (incl. DOM) GC-allocated
...
This is a monster patch that turns all EventTargets into GC-allocated
PlatformObjects. Their C++ wrapper classes are removed, and the LibJS
garbage collector is now responsible for their lifetimes.
There's a fair amount of hacks and band-aids in this patch, and we'll
have a lot of cleanup to do after this.
2022-09-06 00:27:09 +02:00