Commit graph

18654 commits

Author SHA1 Message Date
Andreas Kling 6aa82f8b0b LibWeb: Report the current OS instead of always saying SerenityOS 2022-10-02 21:14:02 +02:00
Andreas Kling de6d012367 LibWeb: Improve placement of abspos boxes with dual-auto insets
When an absolutely positioned box has auto insets on both sides of an
axis, it's placed according to the "static position rectangle". This is,
roughly, the rectangle a box would occupy if it were position:static
instead of position:absolute or position:fixed.

This patch implements a rough, but still significantly better,
estimation of such static positions. It gets pretty hairy in the case
where an abspos box has a parent whose children are inline.
2022-10-02 21:14:02 +02:00
Andreas Kling 95a3da86c3 LibWeb: Reset painter translation when painting fixed-position elements
This makes nested position:fixed elements work, previously we'd apply
the viewport scroll offset once at every nesting level.
2022-10-02 21:14:02 +02:00
Andreas Kling a494bd24f1 LibGfx: Add a way to get the Painter's current 2D translation 2022-10-02 21:14:02 +02:00
Andreas Kling 46a13c3d2e LibWeb: Add helpful locals in layout_absolutely_positioned_element()
This code had some obnoxiously repetetive call chains.
2022-10-02 21:14:02 +02:00
Andreas Kling d1d99fda32 LibWeb: Vertical % margins are relative to containing block width
We were messing this up on absolutely positioned elements by using the
containing block height instead.
2022-10-02 21:14:02 +02:00
Andreas Kling 9c44634ca5 LibWeb: Reorganize layout algorithms around available space
This is a big and messy change, and here's the gist:

- AvaliableSpace is now 2x AvailableSize (width and height)

- Layout algorithms are redesigned around the idea of available space

- When doing layout across nested formatting contexts, the parent
  context tells the child context how much space is available for the
  child's root box in both axes.

- "Available space" replaces "containing block width" in most places.

- The width and height in a box's UsedValues are considered to be
  definite after they're assigned to. Marking something as having
  definite size is no longer a separate step,

This probably introduces various regressions, but the big win here is
that our layout system now works with available space, just like the
specs are written. Fixing issues will be much easier going forward,
since you don't need to do nearly as much conversion from "spec logic"
to "LibWeb logic" as you previously did.
2022-10-02 21:14:02 +02:00
Andreas Kling b55c4ccdf7 LibWeb: Don't try to format inline-block boxes in BFC
Inline-level block boxes are handled by IFC. BFC doesn't have to worry
about these.
2022-10-02 21:14:02 +02:00
MacDue e852aff9e3 LibWeb: Fix crash when loading a HTML string that contains an iframe
The HTMLIFrameElement does not create the nested browsing context on
insertion if the document does not have browsing context, which is not
set unless it's the active document.

Previously, in FrameLoader the document was not set as active until
after parsing, which led to iframes without nested browsing contexts,
and crashes.

Fixes #14207
2022-10-02 19:58:26 +01:00
Hendiadyoin1 3e65afa41a LibJS: Show class name in the dump from the NewClass instruction 2022-10-02 18:49:17 +01:00
Hendiadyoin1 baa4d69668 LibJS: Set class' source text in NewClass instruction
This fixes the classes toString method.
2022-10-02 18:49:17 +01:00
Monroe Clinton 086fccc2af Calendar: Fix crash when changing event date
We were capturing by reference which lead to the variables going
out of scope even when used in the lambda. Due to this the
update_starting_day_range lambda crashes when called.
2022-10-02 15:43:37 +02:00
Hendiadyoin1 e68309144b LibWeb: Don't scale by x, x when a scale x, y is provided as a transform 2022-10-01 21:08:50 +01:00
Andrew Kaster 691a7070f4 LibWeb: Remove the internal window object from WebEngineCustomData
Now that no one needs a Window just to create prototypes, we can remove
the internal window Object from the main thread VM and get rid of the
HTML::Window include for it.

This finally solves the reference binding to nullptr error in ladybird
that shows up when compiling it with ASAN.
2022-10-01 21:05:32 +01:00
Andrew Kaster 56b381aac0 LibWeb: Cleanup unecessary uses and includes of HTML::Window
The big global refactor left some stragglers behind for atomicity.

Clean up the rest, and remove a ton of includes of LibWeb/HTML/Window.h
2022-10-01 21:05:32 +01:00
Andrew Kaster 45838579c3 LibWeb: Remove unused DOM::Node::window helper method
This was a crutch for the initial GC conversion that we can get rid of
thanks to moving web prototypes and constructors off of Window.
2022-10-01 21:05:32 +01:00
Andrew Kaster a1286f5120 LibWeb: Ensure that replaced documents keep the Window of their sibling
The note in the spec says that we're supposed to make sure this new
document has the same Window as the old about:blank document, but we
forgot to actually assign to the Window pointer.
2022-10-01 21:05:32 +01:00
Andrew Kaster 394f1b3836 LibWeb: Remove prototype and constructor helpers from Window 2022-10-01 21:05:32 +01:00
Andrew Kaster f1367e0e4c LibWeb: Use prototype and constructor methods from new Intrinsics
This will let us remove the helpers from Window that simply defer to the
Intrinsics that are hanging off the [[HostDefined]] slot on the realm
2022-10-01 21:05:32 +01:00
Andrew Kaster beb3519a49 LibWeb: Remove unecessary dependence on Window from WebGL and WebSocket
These classes only needed Window to get at its realm. Pass a realm
directly to construct WebGL and WebSocket classes.
2022-10-01 21:05:32 +01:00
Andrew Kaster 4bb6345b2f LibWeb: Remove unecessary dependence on Window from assorted classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct Crypto, Encoding, HRT, IntersectionObserver,
NavigationTiming, Page, RequestIdleCallback, Selection, Streams, URL,
and XML classes.
2022-10-01 21:05:32 +01:00
Andrew Kaster 4878a18ee7 LibWeb: Remove unecessary dependence on Window from Fetch, XHR, FileAPI
These classes only needed Window to get at its realm. Pass a realm
directly to construct Fetch, XMLHttpRequest and FileAPI classes.
2022-10-01 21:05:32 +01:00
Andrew Kaster 6a10352712 LibWeb: Remove unecessary dependence on Window from UIEvents classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct UIEvents classes.
2022-10-01 21:05:32 +01:00
Andrew Kaster d0efc7734a LibWeb: Remove unecessary dependence on Window from WebAssembly classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct WebAssembly classes.
2022-10-01 21:05:32 +01:00
Andrew Kaster 320dddde6a LibWeb: Remove unecessary dependence on Window from SVG classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct SCG classes.
2022-10-01 21:05:32 +01:00
Andrew Kaster 62a8c26b73 LibWeb: Remove unecessary dependence on Window from Geometry classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct Geometry classes.
2022-10-01 21:05:32 +01:00
Andrew Kaster f0c5f77f99 LibWeb: Remove unecessary dependence on Window from HTML classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct HTML classes.
2022-10-01 21:05:32 +01:00
Andrew Kaster a2ccb00e1d LibWeb: Remove unecessary dependence on Window from CSS classes
These classes only needed Window to get at its realm. Pass a realm
directly to construct CSS classes.
2022-10-01 21:05:32 +01:00
Andrew Kaster 8de7e49a56 LibWeb: Remove unecessary dependence on Window from DOM and WebIDL
These classes only needed Window to get at its realm. Pass a realm
directly to construct DOM and WebIDL classes.

This change importantly removes the guarantee that a Document will
always have a non-null Window object. Only Documents created by a
BrowsingContext will have a non-null Window object. Documents created by
for example, DocumentFragment, will not have a Window (soon).

This incremental commit leaves some workarounds in place to keep other
parts of the code building.
2022-10-01 21:05:32 +01:00
Andrew Kaster c61a4f35dc LibWeb: Move Web prototypes and constructors to new Intrinsics object
This Intrinsics object hangs off of a new HostDefined struct that takes
the place of EnvironmentSettingsObject as the true [[HostDefined]] slot
on JS::Realm objects created by LibWeb.

This gets the intrinsics off of the GlobalObject, Window, similar to the
previous refactor of LibJS to move the intrinsics into the Realm's
[[Intrinics]] internal slot.

A side effect of this change is that we cannot fully initialize a Window
object until the [[HostDefined]] slot has been installed into the realm,
which happens with the creation of the WindowEnvironmentSettingsObject.

As such, any Window usage that has not been funned through a WindowESO
will not have any cached Web prototyped or constructors, and will not
have Window APIs available to javascript code. Currently this seems
limited to usage of Window in the CSS parser, but a subsequent commit
will clean those up to take Realm as well. However, this commit compiles
so let's cut it off here :^).
2022-10-01 21:05:32 +01:00
Idan Horowitz 7578039188 LibHTTP: Use 'close' as the default value for Connection in HTTP/1.0
Unlike HTTP/1.1 and above, the default behaviour for HTTP/1.0 servers
is to close the connection after sending the response.
2022-10-01 19:37:01 +02:00
Idan Horowitz 5c814e66b3 LibJS: Store symbols in a Handle inside PropertyKey
If the stored symbol is custom (non-global), it is allocated on the
heap, and may not be visited by anyone else, so we must register it in
order to keep it alive.
2022-10-01 15:36:20 +01:00
Idan Horowitz 4aade74b91 LibJS: Include Environment.h directly in ClassFieldDefinition.h
This was previously indirectly forcing Heap/Handle.h to include it
instead. This will let us include Handle.h from PropertyKey, which will
allow us to solve a different issue.
2022-10-01 15:36:20 +01:00
MacDue 240fb93cf1 LibWeb: Remove FIXME for double-position linear-gradient() color stops
I added these in #14977, but forgot to remove this FIXME.
2022-10-01 14:08:01 +02:00
Luke Wilde dbe12662b8 LibWeb: Implement matrix3d transform function from css-transforms-2 2022-10-01 14:07:47 +02:00
Luke Wilde 0fdd924db2 LibWeb: Implement rotation transform functions from css-transforms-2 2022-10-01 14:07:47 +02:00
MacDue ddfe18783b Magnifier: Don't error if cancelling capture save 2022-10-01 14:06:53 +02:00
Luke Wilde 540c307009 LibWeb: Implement Element.insertAdjacentText 2022-10-01 14:06:40 +02:00
Luke Wilde d540e2ec98 LibWeb: Implement Element.insertAdjacentElement 2022-10-01 14:06:40 +02:00
thankyouverycool f27f2e0d3b Welcome: Use StandardPaths to load README.md 2022-10-01 13:39:10 +03:30
thankyouverycool a6b8ac10f7 Welcome: Use fallible try_create_default_icon() 2022-10-01 13:39:10 +03:30
thankyouverycool 9fe5cadcc8 Welcome: Update GML
Moves more settings to GML to simplify construction and replaces
deprecated GML properties.
2022-10-01 13:39:10 +03:30
thankyouverycool ca54a965a0 Welcome: Port to Core::Stream 2022-10-01 13:39:10 +03:30
thankyouverycool bd66453e8d LibCore: Add documents_directory() to StandardPaths 2022-10-01 13:39:10 +03:30
thankyouverycool 72c0414a58 Welcome: Remove unnecessary include 2022-10-01 13:39:10 +03:30
thankyouverycool 929f31f564 Welcome: Add/remove SystemServer group entry to toggle startup
Previously Welcome relied on a bogus executable key value to disable
startup. This always printed an error on login and littered the config
file with a useless entry. Adding/removing the group as needed seems
a bit nicer.
2022-10-01 13:39:10 +03:30
thankyouverycool be3cc756fc config: Enable adding and removing groups 2022-10-01 13:39:10 +03:30
thankyouverycool c34f2e75e9 LibCore+LibConfig+ConfigServer: Add Config::{add,remove}_group()
Plumbs synchronous calls for adding and removing group entries to
config files. This is useful for services like SystemServer which
default to group names for executable paths, and for removing all
keys at once.
2022-10-01 13:39:10 +03:30
thankyouverycool 6f394d9ee2 LibConfig+ConfigServer: Make remove_key() synchronous
Previously, when removing keys, the config utility terminated its
connection before changes could be synced.
2022-10-01 13:39:10 +03:30
Hendiadyoin1 911506af9f LibJS: Align Instructions as void* and roundup variably sized ones sizes
Both is indeed needed,
the standard alignment would have been 4, but some Instructions, like
Jumps need an alignment of 8

Fixes #12127.
2022-10-01 00:04:02 +01:00