Commit Graph
2178 Commits
Author SHA1 Message Date
Muki Kiboigo c0fc3a19c8 add CSS utility interface 2025-06-24 13:55:47 -07:00
Karl Seguin 8a005bc5a1 Merge pull request #808 from lightpanda-io/accept-header
http: send an Accept: */* header
2025-06-24 09:42:14 +08:00
Pierre Tachoire 20aabee72e http: send an Accept: */* header 2025-06-23 18:18:04 -07:00
Karl Seguin a00c2345ee Merge pull request #802 from lightpanda-io/endless_loop_fix_and_dot_slash_stitch
Don't allow timeouts to be registered when shutting down
2025-06-24 08:57:59 +08:00
Karl Seguin cb35b3624a Merge pull request #803 from lightpanda-io/inline_module_no_cache
Fix module caching
2025-06-24 08:55:23 +08:00
Karl Seguin c6f59a7aa6 Merge pull request #804 from lightpanda-io/add_error_event_web_api
add ErrorEvent webapi
2025-06-24 08:54:01 +08:00
Karl Seguin bf296ad797 add ErrorEvent webapi 2025-06-23 19:04:59 +08:00
Karl Seguin 256540934b reject long timeouts as we're shutting down 2025-06-23 17:27:22 +08:00
Karl Seguin 3c07c0818d improve variable names 2025-06-23 17:19:30 +08:00
Karl Seguin a01d18ace1 Fix module caching
In https://github.com/lightpanda-io/browser/pull/798 module caching was added.
This was necessary as the same module loaded multiple time should result in the
same v8 module instance.

To make this work, modules became cached by their full URL. The full URL of one
module was also used to determine the full URL of nested modules (full url +
specifier).

With inline scripts, the page URL was used as the full URL. While this is
correct when resolving nested modules, it's incorrect for caching the module
itself. Two inline modules on a page share the same URL, but they aren't the
same and should be cached.

To fix this, inline modules still inherit the page URL, in order to resolve the
correct URL for nested modules, but are themselves never cached.
2025-06-23 17:10:54 +08:00
Karl Seguin 55e02f01dc fix wpt runner 2025-06-23 16:47:31 +08:00
Karl Seguin fe6ccad485 loop.run now takes a maximum wait time 2025-06-23 16:43:28 +08:00
Karl Seguin 11fe79312d Don't allow timeouts to be registered when shutting down
Currently, a timeout that sets a timeout can cause loop.run to block forever.

Also, cleanup URL stitch with leading './'. The resulting URL was valid, but
since we use the URL as the module cache key, it's important to resolve various
representations of the same URL in the same way.
2025-06-23 15:01:58 +08:00
Karl Seguin bdb2338b5b Merge pull request #796 from lightpanda-io/docker
update dockerfile to multi-arch
2025-06-23 12:51:20 +08:00
Karl Seguin bbafb048d0 Merge pull request #798 from lightpanda-io/module_loading
Fix module loading
2025-06-23 08:54:17 +08:00
Karl Seguin 9fc2fa51bd Merge pull request #797 from lightpanda-io/template_content
add HTML Template's content attribute
2025-06-23 08:54:00 +08:00
Karl Seguin d8ec50345a Fix module loading
When V8 calls the ResolveModuleCallback that we give it, it passes the specifier
which is essentially the string given to `from`:

```
import {x} from './blah.js';
```

We were taking that specifier and giving it to the page. The page knew the
currently executing script, an thus could resolve the full URL. Given the full
URL, it could either return the JS content from its module cache or fetch
the source.

At best though, this isn't efficient. If two files import the same module, yes
we cache the src, but we still ask v8 to re-compile it. At worse, it crashes
due to resource exhaustion in the case of cyclical dependencies.

ResolveModuleCallback should instead detect that it has already loaded the
module and return the previously loaded module. Essentially, we shouldn't be
caching the JavaScript source, we should be caching the v8 module.

However, in order to do this, we need more than the specifier, which might only
be a relative path (and thus isn't unique). So, in addition to a module cache,
we now also maintain an module identifier lookup. Given a module, we can get
its full path. Thankfully ResolveModuleCallback gives us the referring module,
so we can look up that modules URL, stitch it to the specifier, and get the
full url (the unique identifier) within the JS runtime.

Need more real world testing, and a fully working example before I celebrate,
but for sites with many import, this appears to improve performance by many
orders of magnitude.
2025-06-20 19:17:55 +08:00
Karl Seguin 9f1cc09ca8 add HTML Template's content attribute 2025-06-20 14:36:56 +08:00
Karl Seguin 5dcc3db36b Merge pull request #795 from lightpanda-io/performance_observer
Add dummy PerformanceObserver
2025-06-20 08:01:09 +08:00
Pierre Tachoire 898b73ffc8 update dockerfile to multi-arch 2025-06-19 10:10:14 -07:00
Karl Seguin c5d49a9d34 Add dummy PerformanceObserver
Adds a dummy PerformanceObserver. Only the supportedEntryTypes static attribute
is supported, and it currently returns an empty array. This hopefully prevents
code from trying to use it. For example, before using it, reddit checks if
specific types are supported and, if not, doesn't use it.

This introduced complexity in the js runtime. Our current approach to
attributes only works with primitive types. Non-primitive types can't be
attached to a FunctionTemplate (v8 will crash saying only primitive types can
be set). Plus, all non primitive types require a context to create anyways.

We now detect "primitive" attributes and "complex" attributes. Primitive
attributes are setup as before. Complex attributes are setup per-context,
requiring another loop through our types to detect & setup on each context
creation.
2025-06-19 18:20:02 +08:00
Karl Seguin ef9f828d35 Merge pull request #790 from lightpanda-io/css-stylesheet
Minimal CSSStyleSheet
2025-06-19 10:32:13 +08:00
Karl Seguin c691764205 Merge pull request #794 from lightpanda-io/window-screen
add Screen and ScreenOrientation
2025-06-19 10:29:52 +08:00
sjorsdonkers 2c940d4fd6 browser context proxyServer 2025-06-19 10:26:33 +08:00
Karl Seguin 54bd55d45d fix CSSStyleSheet prototype 2025-06-19 10:25:13 +08:00
Karl Seguin 0b846b15b1 Merge pull request #789 from lightpanda-io/browsercontext-proxyServer
browser context proxyServer
2025-06-19 10:22:17 +08:00
Muki Kiboigo 269eb7e154 add Screen and ScreenOrientation 2025-06-18 12:53:54 -07:00
Muki Kiboigo 97bc19e4ae clean up various imports in CSSOM 2025-06-18 11:32:28 -07:00
Muki Kiboigo 2656cc7842 Add basic tests for CSSStyleSheet 2025-06-18 11:32:28 -07:00
Muki Kiboigo ba94818415 add CSSStyleSheet 2025-06-18 11:32:27 -07:00
Pierre Tachoire ac759a6eed Merge pull request #793 from lightpanda-io/domrect-bottom
add top, left, bottom, right to DOMRect
2025-06-18 09:54:08 -07:00
Pierre Tachoire 1839b346a6 Merge pull request #792 from lightpanda-io/fix_current_script_scope
Fixes the scoping of page.current_script
2025-06-18 09:51:41 -07:00
Pierre Tachoire c1ffe7f8e6 Merge pull request #791 from lightpanda-io/zig_event_target_fix
Fix crash when event.currentTarget is used with EventTargetTBase
2025-06-18 08:26:25 -07:00
Pierre Tachoire 833b4d10bd add top, left, bottom, right to DOMRect 2025-06-18 08:21:33 -07:00
Pierre Tachoire ce98c336c9 keep EventTargetTBase as the dom_event_target
Mimic a dom_node by adding the refcnt field right after the vtable
pointer.
2025-06-18 07:08:35 -07:00
Karl Seguin d05619990a Fixes the scoping of page.current_script
This was previously being set back to null before it was actually needed.

Also, added a more logs / log details.
2025-06-18 18:36:00 +08:00
Karl Seguin 8033e41d4a Merge pull request #788 from lightpanda-io/dont_keepalive_unprocess_request
Delay setting the requests' keepalive flag until the request is fully…
2025-06-18 16:46:45 +08:00
sjorsdonkers 60f4eab759 handle no params 2025-06-18 10:07:37 +02:00
sjorsdonkers d7656ea985 expires dashes and f64 2025-06-18 10:07:37 +02:00
sjorsdonkers e402998577 JS may not set/get HttpOnly cookies 2025-06-18 10:07:37 +02:00
sjorsdonkers 073f75efa3 CDP Network cookie tests 2025-06-18 10:07:37 +02:00
sjorsdonkers da414f7eb3 CDP.Storage cookies tests 2025-06-18 10:07:37 +02:00
sjorsdonkers 270b89830a Cleaning up crumbles 2025-06-18 10:07:37 +02:00
sjorsdonkers 74ce7ca416 refactor path / domain parsing 2025-06-18 10:07:37 +02:00
sjorsdonkers 3f4338cb51 wip 2025-06-18 10:07:37 +02:00
sjorsdonkers 30ee41fd0e Network.getCookies 2025-06-18 10:07:37 +02:00
sjorsdonkers 4965fec55c storage cookies 2025-06-18 10:07:37 +02:00
sjorsdonkers 18dff8455c lower case domain 2025-06-18 10:07:37 +02:00
sjorsdonkers fe16f06aee clearRetainingCapacity 2025-06-18 10:07:37 +02:00
sjorsdonkers 48c1c05a93 setCookie 2025-06-18 10:07:37 +02:00