Commit graph

1109 commits

Author SHA1 Message Date
Sam Atkins
4b711932cc LibWeb: Split PercentageStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
Sam Atkins
9a84151169 LibWeb: Split LengthStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
Sam Atkins
35b240c87d LibWeb: Split ImageStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
Sam Atkins
76de017a51 LibWeb: Split IdentifierStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
Sam Atkins
77b2826402 LibWeb: Split ColorStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
Luke Wilde
cbe0901706 LibWeb: Implement performance.mark and performance.clearMarks 2023-03-23 21:00:43 +00:00
Luke Wilde
31b507afbf LibWeb: Introduce Performance Timeline and its Performance functions 2023-03-23 21:00:43 +00:00
Srikavin Ramkumar
5c8be3b072 LibWeb: Add missing constructors to HTMLElement IDLs 2023-03-23 13:37:40 +01:00
Luke Wilde
95da08e035 LibWeb: Add workaround to restore cross-origin stylesheet functionality
CORS cross-origin responses in the No CORS request mode provide an
opaque filtered response, which is the original response with certain
attributes removed/changed.

The relevant effect it has is setting the body to `null`, which means
`body_bytes` has `Empty` in the process_response_consume_body callback.
This effectively disables cross-origin linked resources
(e.g. stylesheets).

However, the web actually depends on this, especially for stylesheets
retrieved from a cross-origin CDN. For example, Shopify websites
request stylesheets from `cdn.shopify.com` and Substack websites
request stylesheets from `substackcdn.com`.

This makes this a specification bug, as this code was written from it.

The workaround is to read the actual body from the unfiltered response
and then call `process_linked_resource` from there.

This _should_ be safe to do, as linked resource fetches do not include
credentials (i.e. cookies and the Authorization header), so it cannot
provide personalized responses.
2023-03-22 22:26:16 +00:00
Timothy Flynn
2a410f8985 LibWeb: Change "popup"-related storage types to named enums 2023-03-22 00:12:53 +01:00
Timothy Flynn
bff109ee50 LibWeb: Change the "noreferrer" storage type to a named enum 2023-03-22 00:12:53 +01:00
Timothy Flynn
1b811191cd LibWeb+WebContent: Change the "noopener" storage type to a named enum 2023-03-22 00:12:53 +01:00
Lucas CHOLLET
496b7ffb2b LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
Timothy Flynn
e6fc35897f WebContent+Everywhere: Add an option to not activate new tabs over IPC
WebDriver, for example, will want to create new tabs without activating
them.
2023-03-21 09:39:49 +00:00
Simon Wanner
03c225b023 LibWeb: Move Element.prototype.style to ElementCSSInlineStyle mixin
Also adds the `PutForwards` extended attribute allowing setting the
style property.
2023-03-20 20:37:40 -04:00
Andreas Kling
a6d1307aa4 LibWeb: Don't crash on HTML input element with display: inline
This would previously assert in InlineFormattingContext because we had
an outwardly inline box that wasn't inwardly flow.

Fix this by converting text-based input boxes to inline-blocks. This is
an ad-hoc solution, and there might be a much better way to solve it.
2023-03-20 17:57:58 +01:00
Srikavin Ramkumar
d177d83b44 LibWeb: Implement indeterminate IDL attribute in HTMLInputElement 2023-03-20 10:15:58 +00:00
Elisée Maurer
38a3e28799 LibWeb: Stub out a few form validation and selection methods 2023-03-19 18:58:50 +00:00
Srikavin Ramkumar
633983d354 LibWeb: Update stylesheet loading to use fetch infrastructure 2023-03-19 14:16:15 +00:00
Srikavin Ramkumar
f7176463b5 LibWeb: Implement 'create a potential-CORS request' algorithm 2023-03-19 14:16:15 +00:00
Mathis Wiehl
ed1a7aee43 LibWeb: Don't deref HTMLInputElement parent if its null
Don't crash in case the elements parent is null.
2023-03-18 21:05:23 +01:00
Simon Wanner
a13c21c807 LibWeb: Specify height as 1lh to fix the size of empty text boxes
Previously, empty text boxes would fall back to the min-height: 16px
set on the <input> element. As soon as there is any content they
would usually gain height because the line height of that text is
more than 16px (depending on the font/font-size used).

Now they use height: 1lh for the inner div (which contains the
actual text), which matches the exact height of 1 line of content.
2023-03-18 20:14:52 +01:00
Timothy Flynn
db2ba5f1d9 LibWeb: Initialize static web strings during main-thread VM creation
These are currently initialized in a [[gnu::constructor]], which has a
weird initialization order. These constructors are invoked before main()
and, incidentally, before any user-defined default constructors of the
static strings they are initializing.

This will become an issue when these strings are ported to FlyString,
which has a user-defined default constructor. In that scenario, when the
FlyString constructor is executed after the [[gnu::constructor]], the
strings will be "reset" to the empty string.

Instead of relying on a non-standard compiler extension here, let's just
initialize these strings explicitly during main-thread VM creation, as
this now happens in WebContent's main().
2023-03-18 19:50:45 +01:00
Mathis Wiehl
8169b878f8 LibWeb: Invalidate sibling styles on input element checked state change
Checkedness of an input element can influence sibling style, as well as
style of their children, when they use the `:checked` pseudo-class in
combination with a kind of sibling selector. That means its not
sufficient to just invalidate the input elements on style.

This is actually more commonly observable than one might expect, because
this pattern is often used as a JS-free toggle solution for things like
menus.
2023-03-18 16:01:12 +01:00
Timothy Flynn
13dfadba79 LibJS: Propagate errors from VM creation 2023-03-17 16:39:08 +00:00
MacDue
a2f3b6543b LibWeb: Fix is<HTML::HTMLProgressElement>() check
Previously HTMLProgressElement implemented is_html_input_element() not
is_html_progress_element(), so is_html_progress_element() defaulted to
always returning false. This broke is<HTML::HTMLProgressElement>().
2023-03-17 08:39:37 +01:00
Timothy Flynn
57646c86ef LibWeb: Port the WebAssembly namespace to IDL 2023-03-16 19:39:17 +00:00
Aliaksandr Kalenik
7061322606 LibWeb: Create new tab if a new top level BC is requested
With current process architecture where every top level browsing
context lives in a separate WebContent process we need to request
a browser to spawn new WebContent process if new top level BC is
requested.
2023-03-16 13:17:37 -04:00
Aliaksandr Kalenik
8026c63e10 LibWeb: Introduce RemoteBrowsingContext
Remote browsing context represents top level browsing context that
lives in another WebContent process.
2023-03-16 13:17:37 -04:00
Aliaksandr Kalenik
40ec976781 LibWeb: Inherit BrowsingContext from AbstractBrowsingContext 2023-03-16 13:17:37 -04:00
Aliaksandr Kalenik
c4f94b0846 LibWeb: Introduce AbstractBrowsingContext
Introducing class for abstract browsing context is going to make it
possible to have separate implementations for:
1) Local browsing context (Top level BC of current page and iframes)
2) Remote browsing context (BC of a page that lives in another
WebContent process)
2023-03-16 13:17:37 -04:00
Aliaksandr Kalenik
6d91d2fa50 WebContent: Add IPC call to set window handle from WebContent client 2023-03-16 13:17:37 -04:00
Aliaksandr Kalenik
d87a207ca9 LibWeb: Add handle member in BrowsingContext
`handle` is uuid that is going to be used in WebDriver to identify
browsing context.
2023-03-16 13:17:37 -04:00
Timothy Flynn
2d45e1fca5 LibWeb: Port the CSS namespace to IDL 2023-03-15 12:48:25 -04:00
Sam Atkins
6d8f046fd0 LibGfx+Userland: Make TextAttributes::underline_style optional
Rather than having a style AND a field saying whether to use the style,
just make the style Optional.
2023-03-15 14:55:49 +01:00
Matthew Olsson
7c0c1c8f49 LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
Timothy Flynn
9c569e8a0f LibWeb: Implement the [PutForwards] IDL extended attribute
For example, consider the attribute:

    interface Element {
        [PutForwards=value] readonly attribute DOMTokenList classList;
    }

When `classList` is set, we should instead set the attribute `value` on
the `classList` attribute of the Element interface.
2023-03-14 16:30:19 -04:00
Timothy Flynn
0aa4466ce9 LibWeb: Port {set,clear}{Timeout,Interval} to IDL 2023-03-14 09:07:40 -04:00
Timothy Flynn
2895b7e733 LibWeb: Port the WindowOrWorkerGlobalScopeMixin timer handler to String
This will make porting to IDL a bit cleaner.
2023-03-14 09:07:40 -04:00
Timothy Flynn
dd992e7dad LibWeb: Move timer implementations to WindowOrWorkerGlobalScopeMixin
This is where it belongs according to the spec, and where these methods'
IDL will be placed.

This forces us to implement a few steps closer to the spec as well.
2023-03-14 09:07:40 -04:00
Timothy Flynn
b579093ad0 LibWeb: Change HTML::Timer to store its owning window as a JS::Object
Rather than being limited to a Window object, it will also need to be
ownable by a WorkerGlobalScope.
2023-03-14 09:07:40 -04:00
Timothy Flynn
97536e4684 LibWeb+Ladybird+Userland: Port window.[alert,confirm,prompt] to String
LibGUI and WebDriver (read: JSON) API boundaries use DeprecatedString,
so that is as far as these changes can reach.

The one change which isn't just a DeprecatedString to String replacement
is handling the "null" prompt response. We previously checked for the
null DeprecatedString, whereas we now represent this as an empty
Optional<String>.
2023-03-13 22:05:22 +00:00
Timothy Flynn
f5f1a5228e LibWeb: Escape HTML text fragments with multi-byte code point awareness
The UTF-8 encoding of U+00A0 (NBSP) is the bytes 0xc2 0xa0. By looping
over the string to escape byte-by-byte, we replace the second byte with
"&nbsp;", but leave the first byte in the resulting text. This creates
an invalid UTF-8 string, with a lone leading byte.
2023-03-13 07:29:40 +00:00
Linus Groh
41b8d81d49 LibWeb/HTML: Remove redundant namespace qualifiers from Window.{cpp,h} 2023-03-11 18:26:40 +00:00
Linus Groh
324dacbc5d LibWeb/HTML: Propagate OOM errors from Window::{local,session}_storage()
This requires a bit of error type conversion glue as HashMap::try_ensure
expects the callback to return ErrorOr<T> like the function itself does.
2023-03-11 18:26:40 +00:00
Linus Groh
4da68384e6 LibWeb/HTML: Make Window::m{location,navigator} lazily allocated
This now matches the other window-owned objects, which already do this:
m_crypto, m_performance, m_screen.
2023-03-11 17:53:50 +00:00
Linus Groh
22552382ff LibWeb/HTML: Use CreateMethodProperty for Window namespace properties
This makes sure the property attributes are correct (writable and
configurable), which they currently aren't for either CSS or
WebAssembly.
2023-03-11 17:32:07 +00:00
Linus Groh
b6a69f5f03 LibWeb/HTML: Consolidate duplicate public/private sections in Window.h 2023-03-11 17:09:01 +00:00
Andreas Kling
1cf5737e9e LibWeb: Add fast_is<T>() for various types stood out in a profile 2023-03-11 10:46:26 +01:00
Andreas Kling
ff7b949061 LibWeb: Make HTMLScript private members private once again
These were accidentally made public a while ago. Thankfully nobody
started poking into script element internals since then. :^)
2023-03-10 14:59:46 +01:00