1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-25 15:15:09 +00:00
Commit graph

8354 commits

Author SHA1 Message Date
Sam Atkins
050823bea7 LibWeb: Fire MediaQueryListEvents when an MQL's match-state changes
The HTML event loop does a check for MQL match-state changes and
dispatches the events. This requires us to keep a list of MQLs on the
Document.
2021-10-05 18:51:39 +02:00
Sam Atkins
1c829e0417 LibWeb: Implement MediaQuery matching :^)
Currently, `evaluate()` recalculates whether the MediaQuery matches or
not, and stores it in `m_matches`, which users can query using
`matches()`. This allows us to know when the match-state changes, which
is required to fire MediaQueryList's change event.
2021-10-05 18:51:39 +02:00
Sam Atkins
f354fd72f1 LibWeb: Split Length::absolute_length_to_px() out from to_px()
In cases where we know the Length is absolute, we know we don't need to
pass in a Layout::Node or FontMetrics etc, and yet we were required to
before. Splitting it means jumping through less hoops that we don't have
to. :^)
2021-10-05 18:51:39 +02:00
Sam Atkins
fd51b02f9d LibWeb: Implement Window::query_media_feature()
This method provides the needed information to evaluate media queries.

Every feature in Media Queries Level 4 is present, either as code or as
a FIXME: https://www.w3.org/TR/mediaqueries-4/#media-descriptor-table
There's a draft Level 5 which I have ignored for now.

Some are unimplemented for now since we do not have access to the
requested information. Some require StyleValue types that we do not yet
support. Many are hard-coded for now since we do not (and may never)
support monochrome or text-only displays for Browser.
2021-10-05 18:51:39 +02:00
Sam Atkins
de82764f2f LibWeb: Add identifiers used by MEDIAQUERIES-4
To avoid duplicating a lot of functionality, we're using StyleValues for
the values of media-features. So, we need their identifiers added here.
2021-10-05 18:51:39 +02:00
Sam Atkins
68c246368b LibWeb: Predeclare MediaList and CSSRuleList 2021-10-05 18:51:39 +02:00
Sam Atkins
341c67453c LibWeb: Add resolved style lookup for border properties
The only one I didn't implement is `border` itself, because there isn't
an obvious sensible value for it if the borders are different.
2021-10-05 18:49:47 +02:00
Sam Atkins
a521c02db2 LibWeb: Add resolved style lookup for margin/padding shorthands 2021-10-05 18:49:47 +02:00
Sam Atkins
fc7af21c7c LibWeb: Make things aware of box-sizing
Of course, we don't actually *use* the box-sizing property yet, but the
value is applied and shows up in the computed style.
2021-10-05 18:49:47 +02:00
Andreas Kling
a31855ae10 LibWeb: Improve resolved style for CSS {min,max}-{width,height}
If the specified value for these properties is "none", we end up storing
it as an "undefined" CSS::Length in the computed values.

We need to convert it back into "none" for getComputedStyle().
2021-10-04 22:54:50 +02:00
Idan Horowitz
4bd089616e LibWeb: Implement window.location's stringifier
The location IDL interface includes a stringifier on the href
attribute i.e. the object's toString should return the value of the
href attribute.
2021-10-04 18:42:58 +01:00
Tobias Christiansen
0c0951d2ce LibWeb: Flexbox: Don't outgrow parent in main axis when using wrap 2021-10-04 18:54:52 +02:00
Tobias Christiansen
6283086c2f LibWeb: Handle inline-block children of a flex-container as block
We don't want to wrap the inline-blocks the same way we want to wrap
pure inline children.
2021-10-04 18:54:52 +02:00
Tobias Christiansen
6102a486ee LibWeb: Flexbox: Collect empty inline-block flex children
A flex-child that was display:inline-block but also had no text inside
of it was previously skipped.
2021-10-04 18:54:52 +02:00
Tobias Christiansen
873e95cb6a LibWeb: Flexbox: Care more about cross-axis margins
Auto margins are still not supported at all, but this is a good start
into supporting margins on flex items.
The way cross-before (top for row, left for column) is handled is very
naive.
2021-10-04 13:59:28 +02:00
Tobias Christiansen
9af85881f5 LibWeb: Flexbox: Take parents' specified main size into account
Previously, if the parent of the container had a definite main size, it
would've been disregarded when calculating the main size of the
container if it had no definite size and neither min- nor max-main-size
constraints.
This patch fixes that behavior by additionally checking whether the main
size is not only not constrained but also infinite.
2021-10-04 13:35:36 +02:00
Andreas Kling
643e2dec2c LibWeb: Make WindowObject::clear_interval() call correct function
This was incorrectly calling DOM::Window::clear_timeout(). In practice,
these functions are interchangeable, but let's have things looking
correct regardless.
2021-10-04 12:13:25 +02:00
Linus Groh
7ee3432ab6 LibWeb: Add basic support for script string argument to setInterval()
Instead of passing a function it is also possible to pass a string,
which is then evaluated as a classic script.
2021-10-04 09:54:24 +01:00
Linus Groh
9f4ac38f08 LibWeb: Add basic support for script string argument to setTimeout()
Instead of passing a function it is also possible to pass a string,
which is then evaluated as a classic script.

This means we now support the following example from the "timer
initialization steps", step 16 - except that it runs the timers in
reverse order, so the `log` result is `"TWO ONE "`.

https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timer-initialisation-steps

    var log = '';
    function logger(s) { log += s + ' '; }

    setTimeout({ toString: function () {
      setTimeout("logger('ONE')", 100);
      return "logger('TWO')";
    } }, 100);
2021-10-04 09:54:24 +01:00
Linus Groh
0a49a2db60 LibJS: Convert set_immutable_prototype() to ThrowCompletionOr 2021-10-04 09:52:15 +01:00
Andreas Kling
a7b1c7eb16 LibWeb: Don't send a request body in XMLHttpRequest GET or HEAD 2021-10-04 00:06:48 +02:00
Andreas Kling
f8354c5503 LibWeb+Browser: Disable Same-Origin Policy by default for now
Until we have CORS preflight checks working, this is only getting in the
way of testing and I have to disable it manually all the time.
2021-10-03 23:39:07 +02:00
Andreas Kling
573955be7f LibWeb: Basic support for location.replace(url)
This is not entirely to spec, but gets the basic job done.
2021-10-03 23:36:56 +02:00
Linus Groh
37784a85c0 LibWeb: Run clang-format on HTMLAreaElement.cpp 2021-10-03 21:40:37 +01:00
Andreas Kling
ba0c907a6f LibWeb: Make the URL.port setter return after assigning the empty string
This matches the spec ("3. Otherwise, ...")
2021-10-03 21:31:46 +02:00
Andreas Kling
a7a3f41f67 LibWeb: Implement the HTMLHyperlinkElementUtils mixin
This is used by HTMLAnchorElement and HTMLAreaElement to share
functionality related to their href attribute.
2021-10-03 21:31:46 +02:00
Linus Groh
ed5a9aa038 LibJS: Convert set_integrity_level() to ThrowCompletionOr 2021-10-03 20:14:03 +01:00
Linus Groh
1d45541278 LibJS: Convert Object::set() to ThrowCompletionOr 2021-10-03 20:14:03 +01:00
Linus Groh
b7e5f08e56 LibJS: Convert Object::get() to ThrowCompletionOr
To no one's surprise, this patch is pretty big - this is possibly the
most used AO of all of them. Definitely worth it though.
2021-10-03 20:14:03 +01:00
Andreas Kling
478b36c37b LibWeb: Only auto-reschedule HTML::EventLoop when there are runnables
HTML::EventLoop tries to reschedule itself when there are more tasks in
any of its queues, but let's not do it if none of them are runnable.
2021-10-03 18:25:15 +02:00
Andreas Kling
9f886d499a LibWeb: Remove unnecessary this capture in RequestAnimationFrameDriver 2021-10-03 18:12:36 +02:00
Andreas Kling
c4be098b7d LibWeb: Remove pointless brackets from Length::to_string()
Since we expose these strings to web content via LengthStyleValue,
let's not have non-standard brackets in there to confuse anyone trying
to parse these values. :^)
2021-10-03 17:59:15 +02:00
Andreas Kling
956968d4b2 LibWeb: Make ColorStyleValue serialization spec compliant
[CSS Color 4] tells us to use either rgb() or rgba() notation, depending
on the color's alpha value.
2021-10-03 17:59:15 +02:00
Andreas Kling
962298b040 LibWeb: Don't update rendering in BrowsingContexts without opportunity
This patch adds the "has a rendering opportunity" concept from the spec
to BrowsingContext and uses it to filter out contexts that are unable
to render right now when doing the event loop's rendering updates.

Note that we actually consider all contexts to have a rendering
opportunity at all times right now. Coming up with reasons to avoid
rendering is left as a FIXME. :^)
2021-10-03 17:39:13 +02:00
Andreas Kling
6e341cd696 LibWeb: Let HTML::EventLoop drive the firing of resize events 2021-10-03 16:42:34 +02:00
Andreas Kling
81ef2b646e LibWeb: Let HTML::EventLoop drive animation frame callbacks 2021-10-03 16:42:34 +02:00
Andreas Kling
ae71e5f99b LibWeb: Let HTML::EventLoop keep track of live DOM::Document objects
This will be used by the event loop processing model.
2021-10-03 16:42:34 +02:00
Andreas Kling
6f0d7245d7 LibWeb: Allow Document::ref() when ref-count is zero
DOM::Document has some special lifetime rules to support the DOM
lifetime semantics expected on the web. Any DOM node will keep its
document alive as well, even after the document's ref-count has reached
zero. This is achieved by the Document::m_referencing_node_count
counter.

Because of this mechanism, we can't VERIFY(m_ref_count) in TreeNode
where T may be a DOM::Document.
2021-10-03 16:42:34 +02:00
Andreas Kling
bbfde63f79 LibWeb: Only take runnable tasks from the HTML task queue
We were previously willing to execute tasks before they had become
runnable.
2021-10-03 16:42:34 +02:00
Andreas Kling
6283c098ad LibWeb: Improve HTML::EventLoop::spin_until()
This algorithm now saved and restores the JavaScript execution context
stack while performing a microtask checkpoint, as the spec mandates.
2021-10-03 16:42:34 +02:00
Luke Wilde
17e56661db LibWeb: Have CSSStyleRule inherit from CSSRule in IDL
This also allows removing the cssText attribute being on CSSStyleRule.
2021-10-03 16:39:17 +02:00
Andreas Kling
97ea277f8f LibWeb: Pass the correct timestamp to requestAnimationFrame callbacks
The timestamp needs to be consistent with the "current high resolution
time" as reflected by window.performance.now
2021-10-03 13:36:40 +02:00
Andreas Kling
5cf439cce0 LibWeb: Run setTimeout() and setInterval() callbacks as HTML tasks
We now invoke DOM timer callbacks via HTML tasks. This brings callback
sequencing closer to the spec, although there are still many
imperfections in this area.
2021-10-03 13:36:40 +02:00
Luke Wilde
6a7739c645 LibWeb: Convert Node.childNodes to NodeList
This changes the old child_nodes implementation to children_as_vector
so that can still be used in insert_before.
2021-10-03 00:18:52 +02:00
Luke Wilde
2f7fb1fe63 LibWeb: Convert ParentNode.querySelectorAll to NodeList 2021-10-03 00:18:52 +02:00
Luke Wilde
8d6db36cbb LibWeb: Add support for NodeList
This introduces 3 classes: NodeList, StaticNodeList and LiveNodeList.
NodeList is the base of the static and live versions. Static is a
snapshot whereas live acts on the underlying data and thus inhibits
the same issues we have currently with HTMLCollection.

They were split into separate classes to not have them weirdly
mis-mashed together.

The create functions for static and live both return a NNRP to the base
class. This is to prevent having to do awkward casting at creation
and/or return, as the bindings expect to see the base NodeList only.
2021-10-03 00:18:52 +02:00
Andreas Kling
6a1b82df2b LibJS: Put zombie cell tracking code behind a compile-time flag
Since this is a debug-only feature, let's not have it impact GC marking
performance when you don't need it.
2021-10-02 16:39:28 +02:00
Linus Groh
ba6e4c7ae1 LibJS+LibWeb: Use Object::set_prototype() in more places 2021-10-02 14:53:06 +01:00
Linus Groh
c500ebdcd5 LibWeb: Implement Navigator.cookieEnabled 2021-10-02 13:55:19 +01:00
Andreas Kling
3db847c64a LibWeb: Implement CSSRule and CSSStyleDeclaration serialization
There are a handful of FIXME's here, but this seems generally good.
Note that CSS *values* don't get serialized in a spec-compliant way
since we currently rely on StyleValue::to_string() which is ad-hoc.
2021-10-01 20:17:15 +02:00