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

3979 commits

Author SHA1 Message Date
Gunnar Beutner
02186e2ee9 LibWeb: Skip anonymous layout nodes while finding the event target
This makes the links on nitter.net clickable, e.g. "preferences" in the
upper right corner.
2022-11-07 12:19:42 +00:00
Gunnar Beutner
e7a7895114 LibWeb: Move code for finding the parent element into a helper function
This exact same loop is repeated a couple of times.
2022-11-07 12:19:42 +00:00
martinfalisse
188856c5eb LibWeb: Implement gap in CSS Grid 2022-11-07 10:06:07 +01:00
martinfalisse
2b69fa5649 LibWeb: Add some helpers for TemporaryTrack
Add some helpers to the TemporaryTrack struct to assist in making future
commits more legible.
2022-11-07 10:06:07 +01:00
martinfalisse
9e6612c49b LibWeb: Parse CSS gap property
Including the legacy grid-gap, grid-column-gap and grid-row-gap
properties.
2022-11-07 10:06:07 +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
martinfalisse
03949296c7 LibWeb: Calculate grid content height using column width
Should use the min_content_height function for calculating the height of
content. Thanks to previous commits, are able to use the width of the
column for this calculation.
2022-11-06 13:23:33 +01:00
martinfalisse
7474827747 LibWeb: Use AvailableSpace when referring to the grid width
Should use AvailableSpace to get the grid width instead of
box_state.content_width().

This change was imposed on me by the compiler as in a future commit I
will remove the only reference to the available_space parameter.
2022-11-06 13:23:33 +01:00
martinfalisse
60341995fe LibWeb: Calculate grid columns first, and grid rows second
As per the spec, it seems that the size of the columns of the grid
should be calculated first, and then the sizes of the rows. This commit
reorders the code for the sizing of the grid to match the spec.

This will be used in a future commit so as to calculate the height of a
row based on the resolved final width of a column.
2022-11-06 13:23:33 +01:00
martinfalisse
24c4d7fb46 LibWeb: Calculate available space for children of the grid
Previously were not passing along any information to the children
of the grid, as were simply passing the same AvailableSpace that was
received for the grid itself. Now, each child is given an available
space in accordance with the layout of the grid.
2022-11-06 13:23:33 +01:00
Baitinq
0758bc457e LibWeb: Replace some unnecessary ShadowRoot verify_cast with static_cast
These two occurrences of verify_cast happened right after a check on the
type of converted reference, making the verify_cast redundant.
2022-11-06 12:13:32 +00:00
MacDue
b2a0d70ef3 LibWeb: Fix some conic-gradient() painting issues
This makes the center position the center of the pixel rather than
the top left corner (which fixes some small artifacts on a few
gradients).

This also now floors the angle used to sample from the gradient line,
this avoids the colors diverging the further away from the center you
get (which is noticeable on hard-edge gradients).
2022-11-06 01:42:55 +00:00
MacDue
51cd37110a LibWeb: Fix parsing conic-gradient()s with only at <position>
This fixes parsing conic-gradient()s like:

  conic-gradient(at 60% 45%, red, yellow, green)

Where you have a center position but no starting angle.
2022-11-06 01:42:55 +00: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
b33a2eb9b1 LibWeb: Inherit style across shadow tree boundaries
This makes the text in <input> inherit style from the <input> element.
2022-11-05 18:54:39 +01:00
Andreas Kling
87b0ddb354 LibWeb: Add DOM::Node::parent_or_shadow_host_element()
This will be used in style computation to inherit style across shadow
tree boundaries.
2022-11-05 18:54:39 +01:00
MacDue
6c6c94f05a LibWeb: Use relative units for gradients until painting
This commit tweaks gradients so resolve_color_stop_positions() no
longer cares about the actual length of the gradient. All stops
are resolved to relative positions along the gradient line
(between 0 and 1), and are only scaled back to pixels (if required)
during the actual painting.

This has no immediate benefit right now, but it might make using
CSS pixels for gradients easier :^)

This also includes some mild refactoring.
2022-11-05 14:12:23 +00:00
Andreas Kling
7809cc6557 LibWeb: Use preferred flex item sizes as min/max-content contribution
When a flex item has a specific preferred size, that size should be its
contribution to the containers intrinsic sizes.

This fixes an issue on Patreon where the logo would cover the entire
viewport since the SVG had a large intrinsic size but the flex item
containing it had a small specified size in CSS.
2022-11-05 11:42:19 +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
Linus Groh
0aca69853c LibWeb: Add abort algorithm after creating controller in fetch_impl()
This ensures that the controller GCPtr is non-null by the time we
capture a copy of it for the lambda passed to the request signal's
add_abort_algorithm() method. Currently, the VERIFY() would always fail
when aborting the signal. The alternative to this would be adding a cell
setter to Handle, and ensuring that null handles have a HandleImpl as
well; this seems not worth the hassle right now. Thanks to Lubrsi for
catching this!

Co-authored-by: Luke Wilde <lukew@serenityos.org>
2022-11-04 22:35:45 +00:00
Linus Groh
6cd57d4c15 LibWeb: Properly copy method and headers from the input in Request()
We were accidentally copying these from the newly created Request
object's underlying request, to itself. Thanks to Lubrsi for catching
this!

Co-authored-by: Luke Wilde <lukew@serenityos.org>
2022-11-04 22:35:45 +00:00
Smrtnyk
71228a8d86 LibWeb: Bring XHR::open() closer to spec
FIXME addressed in open method:
 10. If async is false, the current global object is a Window object,
 and either this’s timeout is not 0 or this’s response type is not the
 empty string, then throw an "InvalidAccessError" DOMException.
2022-11-04 21:32:18 +00:00
Andreas Kling
892a3e7d12 LibWeb: Replace <svg> sizing hack with slightly smaller hack
When the <svg> box has a definite size, we use the same size for its
geometry-box descendants. This was using the presence of `width` and
`height` attributes on the <svg> element as evidence that the size was
definite, but this made no sense. We now check if it's actually
definite instead.
2022-11-04 13:06:59 +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
Andreas Kling
4de3449ad6 LibWeb: Recurse into block-level children when hit testing a box
Otherwise, we always say you hit the parent, even when you're really
clicking on a child that's visually above the parent.
2022-11-04 10:38:00 +01:00
Andreas Kling
5aeb6fec68 LibWeb: Make hit testing traverse positioned descendants in right order
We were doing a forward traversal in hit testing which led to sometimes
incorrect results when multiple boxes were occupying the same X and Y
coordinate.
2022-11-04 10:38:00 +01:00
Andreas Kling
305cb8a5d1 LibWeb: Treat unresolvable percentage sizes as auto on replaced elements
For replaced elements with percentage width or height, we were treating
them as 0 instead of auto when their containing block had an indefinite
corresponding size.

This produced incorrect layouts in various cases, and although I can't
actually find something about this exact scenario in specs, the new
behavior does match other browsers.
2022-11-03 19:22:40 +01:00
Andreas Kling
db318aece0 LibWeb: Move should_treat_{width,height}_as_auto() to FormattingContext
These are not specific to BFC, so let's move them up to the super class
so that other layout classes can use them.
2022-11-03 19:22:40 +01:00
Andreas Kling
5fbe245406 LibWeb: Don't include object addresses in layout tree dumps
I've used this feature less than 3 times, and it's trivial to hack back
in if/when needed. Let's stop cluttering the layout tree dumps.
2022-11-03 18:52:53 +01:00
Timothy Flynn
b10bbac061 LibXML+LibWeb: Store the XML document's original source
Similar to how we store an HTML document's original source. This allows
the source to be inspected with "View Source" in the Browser.
2022-11-03 14:52:16 +00:00
Timothy Flynn
e7412717b4 LibWeb: Make it obvious that DOM::Document makes a copy of its source 2022-11-03 14:52:16 +00:00
Timothy Flynn
13b8eeff54 LibWeb: Fully implement the fragment serializing algorithm
Rather than assuming the node's node document is an HTML document,
handle XML documents as well.
2022-11-03 14:48:04 +00:00
Linus Groh
b572a91a6f LibWeb+WebContent: Add WebDriver infrastructure for executing scripts
This cannot be done on the Browser or WebDriver ends, or via the
existing run_javascript() IPC endpoint, as we cannot transfer JS objects
through the IPC boundary (yet), only serialized JSON, so the individual
WebDriver steps around script execution need to run in the WebContent
process.
2022-11-02 23:46:30 +00:00
Andreas Kling
43888b848c LibWeb: Resolve unresolved CSS calc() values in StyleComputer
When mixing calc() and var(), we're forced to delay resolving them until
we're in StyleComputer. Previously we'd just skip over them.

This patch handles calc() in the same pass as attr(). We reparse the
calc() value after var() expansion, and then try to resolve it to a
constant value if possible. If it's not possible, we leave the calc()
where it is, and maybe layout can figure it out later.

Note that I've only implemented resolution to integer and percentage in
this commit. There are more things a calc() could resolve to, and we
should implement those as well.
2022-11-02 22:42:48 +01:00
Andreas Kling
8869dec5fd LibWeb: Add CSS::Parser helper for parsing a standalone "calc()" value 2022-11-02 22:42:48 +01:00
Andreas Kling
f14ad0e8c1 LibWeb: Add helper functions to create CSS parser tokens
These will be used when resolving calc() values in StyleComputer.
It's indeed strange that calc() resolves to tokens, but it's how the
engine currently handles those things. There is room for improvement.
2022-11-02 22:42:48 +01:00
Andreas Kling
ab9aa9da0d LibWeb: Do CSS var() expansion in a separate pass
By expanding all the var() values first, we allow var() to occur
anywhere, even as arguments to CSS functions.
2022-11-02 22:42:48 +01:00
Andreas Kling
767d632ab7 LibWeb: Don't panic on unsupported text-decoration-line values
Instead, just log a FIXME message and move on.
2022-11-02 22:42:48 +01:00
Andreas Kling
628baafefc LibWeb: Fix justify-content: center interaction with flex item margins
When centering flex items on the main axis, we can simply ignore margin
before the first item and after the last item.
2022-11-02 22:42:48 +01:00
Aliaksandr Kalenik
e4db71c88b LibWeb: Support translate3d 2022-11-02 11:04:23 +00:00
Aliaksandr Kalenik
f099e2aa12 LibWeb: Use more verbose input in CSS transform function generator 2022-11-02 11:04:23 +00:00
MacDue
fdcc73d4b1 LibWeb: Paint conic-gradient()s
This is a first pass at painting conic-gradient()s, I've yet to try to
optimize this much, but I feel like you could do better than atan2
in a loop.
2022-11-01 23:07:05 +00:00
MacDue
49497044de LibWeb: Parse conic-gradient()s
This parses conic-gradient()s while also attempting to share the bulk
of the parsing code with linear-gradient()s. This is done by extracting
the <color-stop-list> parsing to a "fill in the blacks" generic
function. This is a little awkward but cuts down on a lot of copy
pasting of code.
2022-11-01 23:07:05 +00:00
MacDue
ee72dcd523 LibWeb: Parse CSS <position>s
This parses <position> according to the following grammer:

<position> = [
  [ left | center | right ] || [ top | center | bottom ]
|
  [ left | center | right | <length-percentage> ]
  [ top | center | bottom | <length-percentage> ]?
|
  [ [ left | right ] <length-percentage> ] &&
  [ [ top | bottom ] <length-percentage> ]
]

The code is a little hairy and simply tries each alternative in turn,
manually checking the possible orders. There may be a better way to
represent this.
2022-11-01 23:07:05 +00:00
MacDue
e568c93404 LibWeb: Add PositionValue class to represent CSS <position>s
This class represents a <position> and handles resolving it to a
Gfx::FloatPoint relative to some rectangle.

It can handle all forms of <position>:

- Two presets:
  left center
- A preset + a length percentage:
  10% bottom
- Or relative to some edges:
  right 20% bottom 30px
2022-11-01 23:07:05 +00:00
MacDue
067759c0e9 LibWeb: Add ConicGradientStyleValue
This commit adds a simple style value (which is an abstract image)
to represent conic-gradient()s.

This commit also starts to factor out some reusable parts of the
linear-gradient() style value for other gradient types.
2022-11-01 23:07:05 +00: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
Timothy Flynn
6aea60e6ee LibWeb+LibWebView+WebContent: Add IPC to receive window position/size
This information will have to come from the Browser application. This
adds IPCs to receive that information when it is available or changes.
2022-11-01 21:16:50 +00:00