1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-08-02 05:27:45 +00:00
Commit graph

8581 commits

Author SHA1 Message Date
Idan Horowitz
d6cfa34667 AK: Make URL::m_port an Optional<u16>, Expose raw port getter
Our current way of signalling a missing port with m_port == 0 was
lacking, as 0 is a valid port number in URLs.
2021-09-14 00:14:45 +02:00
Idan Horowitz
af5b62d8cd LibWeb: Move url_{encode, decode} to URL/URLSearchParams.{h, cpp}
The new URL built-in that will reside in URL.{h, cpp} will have an
URLSearchParams member, which means it has to include its header, and
as such URLSearchParams.h can't include URL's header, which it needs as
it uses the url_{encode, decode} functions.
2021-09-14 00:14:45 +02:00
Andreas Kling
bf86419979 LibWeb: Use ComputedCSSStyleDeclaration to generate data for inspector 2021-09-13 22:21:57 +02:00
Tobias Christiansen
416559414c LibWeb: Use right dimension when positioning flex-items
Previously the cross-size was used to determine the position along the
main axis which is obviously wrong.
2021-09-13 21:20:35 +01:00
Linus Groh
8cd4a889fe LibWeb: Stop dumping selectors in ParentNode::query_selector{,_all}()
This isn't particularly useful (anymore), especially without any context
about _why_ this output suddenly appears in the debug console.
2021-09-13 21:16:33 +01:00
Tobias Christiansen
1d47ec380f LibWeb: FlexBox: Use correct source when querying for the main size
This was an error in understanding what calculated_values are and that
those are not what is wanted when getting the main available size of the
box in the FlexFormattingContext.
The calculation around the size calculation is still a bit wonky, but
this is definietly better.
2021-09-13 21:37:16 +02:00
Tobias Christiansen
4c1da4d43a LibWeb: Fix opacity ComputedCSSStyleDeclaration
There was a classic copy&paste error, opacity wasn't getting the right
computed value to convert.
2021-09-13 21:26:31 +02:00
Tobias Christiansen
f160fe0407 LibWeb: Add support for a bunch of ComputedCSSStyleDeclarations
This patch adds support for a whole lot of other more easy
ComputedCSSStyleDeclararions.
2021-09-13 20:31:06 +02:00
Brian Gianforcaro
7852b0fbc3 LibWeb: Identical sub-expression bug in URLSearchParams::set
Flagged by sonarcloud, we appear to want to make sure the entry.name
matches the name we are searching for duplicates of.

Link:
https://sonarcloud.io/project/issues?fileUuids=AXvdC606QRvsO1F91p5C&id=SerenityOS_serenity&open=AXvdC_NEQRvsO1F91p6j
2021-09-13 14:05:22 +00:00
Andreas Kling
09087b8f8e LibWeb: Add handful of CSS properties and identifiers
This is just to make the CSS parser stop whining when it encounters some
very common properties and identifiers. More work will be required to
actually support these things. :^)
2021-09-13 15:25:53 +02:00
Andreas Kling
449cbd5ecc LibWeb: Implement Node.isEqualNode(Node? otherNode) 2021-09-13 12:54:24 +02:00
Andreas Kling
a0528598b5 LibWeb: Implement Node.isSameNode(Node? otherNode) 2021-09-13 12:49:23 +02:00
Andreas Kling
7632cce5e5 LibWeb: Make requestAnimationFrame() work in multi-process mode
Since we don't have a direct connection to WindowServer, this is slighly
more naive implementation than what we were doing for single-process
mode.

Basically, there's a global RequestAnimationFrameDriver object that
has a 16ms single-shot timer. Whenever someone registers for a RAF
callback, we start the timer (if needed).

This is not ideal, but it's better than nothing. :^)
2021-09-13 02:03:06 +02:00
Idan Horowitz
f21041861b LibWeb: Add the URLSearchParams built-in
This is a very partial implementation, as some features (like 2 of the
possible constructor types, iteration and the getAll method) are
missing, and other's are not implemented due to the currently missing
URL built-in.
2021-09-13 01:43:10 +02:00
Idan Horowitz
de19dcf81a LibWeb: Add URL::url_decode for decoding form url encoded parameters 2021-09-13 01:43:10 +02:00
Idan Horowitz
4629f2e4ad LibWeb: Add the Web::URL namespace and move URLEncoder to it
This namespace will be used for all interfaces defined in the URL
specification, like URL and URLSearchParams.

This has the unfortunate side-effect of requiring us to use the fully
qualified AK::URL name whenever we want to refer to the AK class, so
this commit also fixes all such references.
2021-09-13 01:43:10 +02:00
Luke Wilde
e946316618 LibWeb: Implement MediaQueryList.{addListener,removeListener} 2021-09-13 01:43:03 +02:00
Andreas Kling
f6ad7dfc0b LibWeb: Log classic script start, finish, and duration
When waiting for a page to load, it's nice to see which scripts run,
and how long they take to finish.
2021-09-12 23:39:17 +02:00
Sam Atkins
5bb6936a2a LibWeb: Tidy up CSS parser logging 2021-09-12 21:34:57 +02:00
Sam Atkins
8f6017bc4e LibWeb: Ignore CSS properties with vendor-prefixed values
For example, this CSS previously produced a lot of log spam about the
`display` properties having invalid values:
```css
.foo {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
}
```

Now, it just ignores them, because we don't need to know about it. :^)
2021-09-12 21:34:57 +02:00
Sam Atkins
00b84249d6 LibWeb: Rename CSS::Parser::SelectorParsingResult => ParsingResult
I'm going to use it for non-selector purposes too, so the name needed to
change.
2021-09-12 21:34:57 +02:00
Sam Atkins
6c27e2938a LibWeb: Ignore vendor-prefixed at-rules
I don't know if I have ever seen one, but they are mentioned in the
spec, so we might as well do this.
https://wiki.csswg.org/spec/vendor-prefixes#css-vendor-prefixes
2021-09-12 21:34:57 +02:00
Sam Atkins
13c67f9920 LibWeb: Ignore vendor-prefixed pseudo-element/classes in selectors
Our debug logging when we fail to parse a legitimate selector, is less
useful when it's hidden among selectors that don't parse because they
contain vendor-prefixed pseudo-elements and classes. So, now we
specifically ignore these and don't produce a log message.
2021-09-12 21:34:57 +02:00
Sam Atkins
83cd2eef8f LibWeb: Return SelectorParsingResult from all selector parsing functions
This will allow us to know why a selector failed to parse, in situations
where that matters. (Like, when a selector includes vendor prefixes...)
2021-09-12 21:34:57 +02:00
Sam Atkins
e30b702c6c LibWeb: Reduce CSS_PARSER_DEBUG spam
Having every single function emit a debug message was useful at the
time, but now makes it impossible to spot important things.
2021-09-12 21:34:57 +02:00
Sam Atkins
7817c681d0 LibWeb: Ignore CSS properties with other people's vendor prefixes
This removes some `Property '-webkit-foo' has no value.` log spam. :^)
2021-09-12 21:34:57 +02:00
Andreas Kling
a2f5589d3a LibWeb: Implement CSSStyleDeclaration.getPropertyValue(property) 2021-09-12 20:44:50 +02:00
Andreas Kling
a72fd78713 LibWeb: Log a FIXME when unimplemented computed style is requested
This will help us know which properties to compute next. :^)
2021-09-12 20:44:50 +02:00
Andreas Kling
8b27bc078c LibWeb: Add ComputedCSSSstyleDeclaration and support 2 properties :^)
getComputedStyle(element) now returns a ComputedCSSStyleDeclaration
object, which is a live view of the computed style of a given element.

This works by ComputedCSSStyleDeclaration being a wrapper around an
element pointer. When you ask it for a CSS property, it gets the latest
computed style values from the element and returns them as a
CSS::StyleProperty object.

This first cut adds support for computed 'color' and 'display'.

In case the element doesn't have a corresponding node in the layout
tree, we fall back to using specified style instead. This is achieved by
performing an on-the-fly style resolution for the individual element and
then grabbing the requested property from that resolved style.
2021-09-12 20:44:50 +02:00
Andreas Kling
0bcab60463 LibWeb: Make CSSStyleDeclaration an abstract class
This patch moves the CSS property+value storage down to a new subclass
of CSSStyleDeclaration called PropertyOwningCSSStyleDeclaration.

The JavaScript wrapper for CSSStyleDeclaration now calls virtual
functions on the C++ object.

This is preparation for supporting computed style CSSStyleDeclaration
objects which won't have internal property storage, but rather an
internal element pointer. :^)
2021-09-12 20:44:50 +02:00
Linus Groh
51da5d03da LibWeb: Implement window.matchMedia() 2021-09-12 18:25:45 +02:00
Linus Groh
4155cc7ed5 LibWeb: Start implementing the MediaQueryList interface 2021-09-12 18:25:45 +02:00
Sam Atkins
640a980080 LibWeb: Parse CSS selectors with no space before a combinator
Previously selectors like `.foo>.bar` did not parse, because there is no
whitespace between `.foo` and `>`. Now we correctly parse these. :^)
2021-09-12 17:27:34 +02:00
Brian Gianforcaro
189066d91d LibWeb: Log resource loading success, failure, and duration
When debugging why your website isn't loading in LibWeb the
resource loader is a blind spot as we don't have much logging
except on certain error paths. This can lead to confusing situations
where the browser just appears to hang.

This changes attempts to fix that by adding common success and
failure logging handlers so all resource loading outcomes can
are logged.
2021-09-12 16:39:23 +02:00
Brian Gianforcaro
bca8707e15 LibWeb: Start tracking elapsed time when a resource is loaded 2021-09-12 16:39:23 +02:00
Brian Gianforcaro
e92b576cba LibWeb: Include headers HashMap in the LoadRequest::hash() calculation 2021-09-12 16:39:23 +02:00
Andreas Kling
7691c7abcb LibWeb: Explicitly zero-initialize WindowObject::m_location_object 2021-09-12 16:32:12 +02:00
Sam Atkins
c66689ea76 LibWeb: Remove unused PropertyID parameter to StyleValue parsing methods
It's no longer used, and awkward to pass around.
2021-09-12 16:30:38 +02:00
Sam Atkins
8e4a4fd4db LibWeb: Remove "takes integer value" concept from parse_css_value()
This was only needed when numeric values had to be wrapped as Lengths,
and now serves no purpose.
2021-09-12 16:30:38 +02:00
Sam Atkins
2a141600a3 LibWeb: Correctly parse numeric and 'auto' z-index values
As with `opacity`, this code expected a Length value, when it is specced
to take a Number or `auto`. Now it's correct. :^)
2021-09-12 16:30:38 +02:00
Sam Atkins
b8c4320ffa LibWeb: Fix CSS opacity parsing
The StyleProperties code for opacity existed before NumericStyleValue
was a thing, and was affected by over-enthusiastic unitless-length
parsing, so it assumed everything was a length. Now it matches the
Color4 spec instead, accepting either a number, or a percentage.

We also get to remove the hack! :^)
2021-09-12 16:30:38 +02:00
Sam Atkins
8dc4f3763d LibWeb: Only apply the unitless-length quirk to needed properties
Previously, we applied the unitless length quirk to all numbers in
quirks mode. Now, we correctly only do so for the set of properties
listed in the quirks-mode spec:
https://quirks.spec.whatwg.org/#quirky-length-value

However, we do not yet prevent this quirk inside CSS expressions (like
`calc()`) as the spec directs.
2021-09-12 16:30:38 +02:00
Sam Atkins
3fa4f55f86 LibWeb: Add current_property_id to CSS ParsingContext
After `parse_css_value(PropertyID, TokenStream)`, we only need to know
the current PropertyID when checking for property-specific quirks, which
will take place in only 2 places, which happen deep down. Making the
current PropertyID part of the context means that those places can check
it easily, without us having to pass it to every one of the parsing
functions, which otherwise do not care.
2021-09-12 16:30:38 +02:00
Sam Atkins
9c873fc4dc LibWeb: Add CSS quirks information to Properties.json
Two CSS quirks are specced to only apply to specific properties:

- The hashless hex color quirk
  https://quirks.spec.whatwg.org/#the-hashless-hex-color-quirk
- The unitless length quirk
  https://quirks.spec.whatwg.org/#the-unitless-length-quirk

These are now represented in `Properties.json` like so:
```json
"property-name-here": {
    "quirks": [
        "hashless-hex-color",
        "unitless-length"
    ]
}
```

Every property that either of those two quirks applies to is included in
`Properties.json` and now has their quirks listed. :^)
2021-09-12 16:30:38 +02:00
Sam Atkins
8ddce2faaf LibWeb: Don't assert if reconsuming on an empty TokenStream
This fixes #9978.

When a TokenStream is empty, reading its `current_token()` still returns
a token (for EOF) so it makes sense to allow users to
`reconsume_current_input_token()` that token, so they do not have to
handle that themselves. Instead of VERIFY()ing, we can just no-op when
reconsuming token 0.
2021-09-12 16:11:48 +02:00
Andreas Kling
f58f58fb77 LibWeb: Fix out-of-order DOM tree dumps
There were a few calls to the standalone version of dump_tree() inside
the recursive version of dump_tree(), which led to the output getting
jumbled out of order.
2021-09-12 16:07:35 +02:00
Luke Wilde
678dd2d180 LibWeb: Expose the location object via Document.location
Both Window.location and Document.location use the same instance of the
Location object. Some sites use it via Window, some via Document.
2021-09-12 16:07:24 +02:00
Luke Wilde
ee5bac0891 LibWeb: Implement some custom JS internal overrides for Location
As required by the spec. Note that this isn't the full suite of
overrides.
2021-09-12 16:07:24 +02:00
Linus Groh
7991077284 LibWeb: Implement window.event as a [Replaceable] property
This is the result of debugging React DOM, which would throw a TypeError
when assigning to window.event in strict mode and then not complete
rendering - here:
cae6350/packages/shared/invokeGuardedCallbackImpl.js (L134)

With this change, the following minimal React example now works!

    <div id="app"></div>
    <script src="react.development.js"></script>
    <script src="react-dom.development.js"></script>
    <script>
        ReactDOM.render(
            React.createElement("h1", null, "Hello World"),
            document.getElementById("app")
        );
    </script>
2021-09-12 15:53:48 +02:00
Linus Groh
a05c998e69 LibWeb: Add A JS setter macro for [Replaceable] IDL properties
The [Replaceable] attribute "indicates that setting the corresponding
property on the platform object will result in an own property with the
same name being created on the object which has the value being
assigned. This property will shadow the accessor property corresponding
to the attribute, which exists on the interface prototype object."
(https://heycam.github.io/webidl/#Replaceable)

The spec doesn't tell how exactly this is supposed to be done, but other
engines just have a setter as well that just redefines the property
as a data descriptor when called, and returns undefined.
It's bound to the property name and requires an object of the correct
type, so I mirrored these constraints here. Storing the setter and
calling it multiple times will therefore just work.

Implementing this in the wrapper generator is left as an exercise for
the reader, this is going to be used in WindowObject, which isn't
generated from IDL yet.
2021-09-12 15:53:48 +02:00