1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-28 06:07:35 +00:00
Commit graph

8581 commits

Author SHA1 Message Date
Shannon Booth
cc43dbf56e LibWeb: Port HTMLTextAreaElement from DeprecatedString 2023-12-02 22:54:53 +01:00
Shannon Booth
a7b8828db2 LibWeb: Port call_user_object_operation from DeprecatedString 2023-12-02 22:54:53 +01:00
Shannon Booth
6813dcaff8 LibWeb: Return FlyString const& from CSS::Parser::Token
This allows us to not need to convert back to a FlyString when we need
one.
2023-12-02 22:54:53 +01:00
Timothy Flynn
1d03301037 LibWeb: Allow JS event handlers to stop propagation of mousemove events
This follows similar logic to keydown events.
2023-12-02 22:54:06 +01:00
Aliaksandr Kalenik
681771d210 LibGfx+LibWeb: Calculate and save glyph positions during layout
Previously, we determined the positions of glyphs for each text run at
the time of painting, which constituted a significant portion of the
painting process according to profiles. However, since we already go
through each glyph to figure out the width of each fragment during
layout, we can simultaneously gather data about the position of each
glyph in the layout phase and utilize this information in the painting
phase.

I had to update expectations for a couple of reference tests. These
updates are due to the fact that we now measure glyph positions during
layout using a 1x font, and then linearly scale each glyph's position
to device pixels during painting. This approach should be acceptable,
considering we measure a fragment's width and height with an unscaled
font during layout.
2023-12-02 22:06:11 +01:00
Kemal Zebari
24b9d05ea8 LibWeb/HTML: Implement text attribute in HTMLTitleElement 2023-12-02 10:35:43 +01:00
Timothy Flynn
9f374a5d2a LibWeb+LibWebView+WebContent: Add an Inspector IPC to execute JavaScript
The Inspector will have an <input> element to execute user-provided JS.
This adds an IDL method and IPC to forward that JS from the Inspector
WebView to the Inspector client.
2023-12-02 10:34:22 +01:00
Timothy Flynn
060807e3da LibWeb: Set correct keyCode for number keys and optional virtual keys
The spec states that if an input key would insert a numerical character
if it were pressed without a modifier, then the keyCode should be that
of the numerical character. For example, the keyCode for a dollar sign
should be that of the number 4.

Further, we should implement the optional fixed virtual key codes.
Otherwise, our implementation would give e.g. the double quote a keyCode
value of 38, which is the same as the up arrow key.
2023-12-02 10:34:22 +01:00
Timothy Flynn
7e92ff062e LibWeb: Update the document's cursor after setting an <input>'s value
The spec step here explicitly says to "move the text entry cursor
position to the end of the text control".
2023-12-02 10:34:22 +01:00
Timothy Flynn
d5d6f9bc92 LibWeb: Dispatch keydown events before invoking special handlers
We need to give pages the opportunity to intercept keydown events and
potentially stop them from propagating. Otherwise, for example, pressing
an arrow key in an <input> element is not observable via script.
2023-12-02 10:34:22 +01:00
Timothy Flynn
27d40bafc9 LibWeb: Do not invert the dispatch_event result in fire_keyboard_event
The return value of fire_keyboard_event is meant to indicate whether the
event should continue propagating (true) or halt (false). This exactly
matches the return value of dispatch_event, so by negating the result,
we are propagating events we shouldn't, and not propagating events we
should.
2023-12-02 10:34:22 +01:00
Timothy Flynn
7edfeb7056 LibWeb: Support committing changes to <input> elements
We currently fire the change event on <input> elements when they lose
focus. The spec allows for us to also fire the event when changes are
"committed", so long as such an action makes sense for the input type.

This patch detects when the return key is entered in an <input> element
and uses that as the commit action for text-related types. If no change
has occurred since the last commit, no change event is fired.
2023-12-02 10:34:22 +01:00
Sam Atkins
4ced88b4e5 LibWeb: Make create_a_css_style_sheet() take String arguments 2023-12-01 20:48:13 +01:00
Sam Atkins
d344c50663 LibWeb: Return String from CSSStyleRule::selector_text() 2023-12-01 20:48:13 +01:00
Sam Atkins
374b6cdffd LibWeb: Return String from CSSImportRule::href() 2023-12-01 20:48:13 +01:00
Sam Atkins
ef1e942f3e LibWeb: Use String for getting/setting MediaQueryList media 2023-12-01 20:48:13 +01:00
Sam Atkins
6dbc3044bd LibWeb: Remove some to_deprecated_string() calls in the CSS code 2023-12-01 20:48:13 +01:00
Sam Atkins
9c1c7720c5 LibWeb: Use serialize_a_url() to serialize @import url(...) 2023-12-01 20:48:13 +01:00
Andrew Kaster
fbfb70f81a LibWeb+WebContent: Plumb ability for WebContent process to hold N pages
In order for same-origin NavigableContainers (iframe, frame, embed, ...)
and window.open() WindowProxies to have the proper JS access to their
embedder/opener, we need to host multiple top level traversables in the
same WebContent process. As a first step, make WebContent::PageHost hold
a HashMap of PageClient objects, each holding their own Web::Page that
represents a TraversableNavigable's API surface with the UI process.
2023-12-01 20:47:44 +01:00
Andreas Kling
189d1e8291 LibWeb: Port CSSNamespaceRule to FlyString
This removes a performance problem where we'd convert the style sheet's
default namespace from DeprecatedFlyString to FlyString once per rule
during selector matching.

The conversion now happens once, during CSS parse. It should eventually
be removed from there as well, but one step at a time. :^)
2023-12-01 16:03:58 +01:00
Sam Atkins
2805e16c1c LibWeb: Let NavigableContainers delay the document load event 2023-12-01 10:28:02 +01:00
Sam Atkins
72376ad15a LibWeb: Add special "potentially delay the load event" logic for iframes
`<iframe>`s only potentially delay the load event when their
`current_navigation_was_lazy_loaded` flag is false, so let's wire that
up to the flag's setter, and actually call it!
2023-12-01 10:28:02 +01:00
Sam Atkins
7f509317fd LibWeb: Allow NavigableContainers to report whether to delay load event
Four elements match the "potentially delay the load event" check in the
spec: `<embed>`, `<frame>`, `<iframe>`, and `<object>`. These four are
the same set of elements that are NavigableContainers (or will be once
we implement them) so let's put this logic there.

Note that other things can delay the load event, this is just the name
the spec gives to this particular behaviour.
2023-12-01 10:28:02 +01:00
Sam Atkins
6c5450f9ce LibWeb: Report if anything is delaying load event, not the count
Some elements that delay the load event are more complicated than a
simple count will allow for. We'll implement those in a bit!
2023-12-01 10:28:02 +01:00
Sam Atkins
6154681718 LibWeb: Flesh out some of process_the_iframe_attributes() 2023-12-01 10:28:02 +01:00
Sam Atkins
1d6f06b203 LibWeb: Make HTMLIFrameElement a LazyLoadingElement
This replaces its previous partial implementation of the lazy loading
scaffolding. It still doesn't actually load lazily yet.
2023-12-01 10:28:02 +01:00
Sam Atkins
cc633123ca LibWeb: Extract shared lazy-loading behavior into a base class
`<iframe>` and `<img>` tags share the same spec for several aspects of
lazy-loading: how the `loading` attribute works, the "will lazy load
element" steps, and a member for storing the lazy-load resumption
steps. So let's share the implementation by using a base class.

This mostly involves moving things around. However, we also change the
`start_intersection_observing_a_lazy_loading_element()` method to take
a LazyLoadingElement, and operate on one, instead of always casting to
HTMLImageElement.

We do unfortunately have to do some shenanigans to make the cast work,
by adding a virtual function stub in DOM::Element.
2023-12-01 10:28:02 +01:00
Aliaksandr Kalenik
cc2008ea0d LibWeb: Skip painting of empty stacking contexts in GPU painter
Fixes crashing on https://twinings.co.uk/ that was happening because
of 0 size texture allocation.
2023-12-01 09:28:10 +01:00
Aliaksandr Kalenik
c28f6828c9 LibAccelGfx+LibWeb: Support non-translation transforms in GPU painter
This change introduces GPU painter support for rotate(), skew(),
scale(), and other transformations that could be applied to stacking
context.
2023-12-01 09:28:10 +01:00
Aliaksandr Kalenik
961b067df8 LibWeb/CSS: Add support for translateZ() transform property 2023-11-30 22:54:02 +01:00
Aliaksandr Kalenik
504aef470a LibWeb: Restore painter state if push_stacking_context() has failed
If `SkipStackingContext` is returned we also need to restore saved
painter state because corresponding pop_stacking_context command that
is supposed to do that will be skipped.

Fixes https://github.com/SerenityOS/serenity/issues/22092
2023-11-30 10:32:33 +01:00
Timothy Flynn
ff48b7333c LibWeb: Remove shadow roots from elements that are removed from the DOM
We currently create a shadow tree once for each DOM element that renders
with a shadow tree (e.g. <input>, <details>). If such an element is
removed from the DOM, we must remove its shadow tree. Otherwise, the
shadow tree will refer to the old document in perpetuity.

If the node is added back to a DOM, then recreate the shadow tree.
2023-11-30 08:49:15 +00:00
Timothy Flynn
3cde479416 LibWeb: Add missing visitations to DOM::Document 2023-11-30 08:49:15 +00:00
Timothy Flynn
5913efbb45 LibWeb: Add a visit_edges() override to AbstractBrowsingContext
AbstractBrowsingContext has a subclass RemoteBrowsingContext without a
visit_edges() override (and it doesn't really need one). But currently,
we rely on subclasses visiting AbstractBrowsingContext's opener BC.

This adds a visit_edges() to AbstractBrowsingContext to explicitly visit
the opener BC itself.
2023-11-30 08:49:15 +00:00
Andrew Kaster
0104c8d052 LibWeb: Handle window.open() when passed a navigable name 2023-11-29 23:07:37 +01:00
Aliaksandr Kalenik
7a0191cbe9 LibWeb: Clear texture allocated for stacking context painting
In OpenGL newly allocated texture has undefined initial state so we
need to clear it before stacking context painting.
2023-11-29 21:49:23 +01:00
Aliaksandr Kalenik
24da32c884 LibAccelGfx+LibWeb: Store state of all stacking contexts in GPU painter
This change ensures that the GPU painting executor follows the pattern
of the CPU executor, where the state is stored for each stacking
context, but a painter is created only for those with opacity.

Fixes crashing on apple.com because now save() and restore() are called
on correct painters.
2023-11-29 21:48:47 +01:00
Andreas Kling
3dc5f467a8 LibJS: Always allocate ExecutionContext objects on the malloc heap
Instead of allocating these in a mixture of ways, we now always put
them on the malloc heap, and keep an intrusive linked list of them
that we can iterate for GC marking purposes.
2023-11-29 09:48:18 +01:00
Aliaksandr Kalenik
9fa6628efa LibWeb: Apply stacking context transform in GPU painter 2023-11-29 09:48:10 +01:00
Shannon Booth
96af80acd1 LibWeb: Port Intrinsics from DeprecatedString 2023-11-28 17:15:27 -05:00
Shannon Booth
9cd36839d2 LibWeb: Port DOMStringMap from DeprecatedString to String
Porting name to FlyString as it is often compared in lookup, and in many
cases, we already have a FlyString to supply anyway.
2023-11-28 17:15:27 -05:00
Shannon Booth
49a48fcfac LibWeb: Port CrossOriginOpenerPolicy from DeprecatedString
Noone is using the members yet, so this is straight forward!
2023-11-28 17:15:27 -05:00
Shannon Booth
1b05598cd3 LibWeb: Port ParsedCookie from DeprecatedString to String 2023-11-28 17:15:27 -05:00
Shannon Booth
f43313d099 LibWeb: Port LegacyPlatformObject from DeprecatedString to String 2023-11-28 17:15:27 -05:00
Shannon Booth
56d10bf198 LibWeb: Port Layout::TextNode from DeprecatedString 2023-11-28 17:15:27 -05:00
Shannon Booth
af7df1dbbf LibWeb: Port CSSStyleDeclaration from DeprecatedString to String 2023-11-28 17:15:27 -05:00
Shannon Booth
629f661e3b LibWeb: Port supported property names from DeprecatedString to String 2023-11-28 17:15:27 -05:00
Shannon Booth
66ac0d88a3 LibWeb: Port AvailableSpace from DeprecatedString to String 2023-11-28 17:15:27 -05:00
Shannon Booth
6e48d9f2e6 LibWeb: Port Dump from DeprecatedString to String 2023-11-28 17:15:27 -05:00
Shannon Booth
d400291ad9 LibWeb: Port CSSRule::serialized from DeprecatedString to String 2023-11-28 17:15:27 -05:00