Commit Graph

53 Commits

Author SHA1 Message Date
Karl Seguin
2017d4785b replace zig-async-io and std.http.Client with a custom HTTP client 2025-03-23 19:01:40 +08:00
Karl Seguin
21c9dde858 Zig 0.14 compatibility 2025-03-19 16:28:15 +01:00
Karl Seguin
d501cbf765 Make the the short git SHA available within the program 2025-02-26 20:44:44 +08:00
Karl Seguin
94be7a0e79 Make TCP server websocket-aware
Adding HTTP & websocket awareness to the TCP server.

HTTP server handles `GET /json/version` and websocket upgrade requests.

Conceptually, websocket handling is the same code as before, but receiving
data will parse the websocket frames and writing data will wrap it in
a websocket frame.

The previous `Ctx` was split into a `Server` and a `Client`. This was
largely done to make it easy to write unit tests, since the `Client` is
a generic, all its dependencies (i.e. the server) can be mocked out. This
also makes it a bit nicer to know if there is or isn't a client (via the
server's client optional).

Added a MemoryPool for the Send object (I thought that was a nice touch!)

Removed MacOS hack on accept/conn completion usage.

Known issues:
- When framing an outgoing message, the entire message has to be duped. This
is no worse than how it was before, but it should be possible to eliminate
this in the future. Probably not part of this PR.

- Websocket parsing will reject continuation frames. I don't know of a single
client that will send a fragmented message (websocket has its own
message fragmentation), but we should probably still support this just in
case.

- I don't think the receive, timeout and close completions can safely be
re-used like we're doing. I believe they need to be associated with a specific
client socket.

- A new connection creates a new browser session. I think this is right (??),
but for the very first, we're throwing out a perfectly usable session. I'm
thinking this might be a change to how Browser/Sessions work.

- zig build test won't compile. This branch reproduces the issue with none
of these changes:
https://github.com/karlseguin/browser/tree/broken_test_build

(or, as a diff to main):
https://github.com/lightpanda-io/browser/compare/main...karlseguin:broken_test_build
2025-02-13 08:51:19 +08:00
Karl Seguin
2c4661a250 Add a new unittest build step
Preserves all existing behavior (i.e. make test and zig build test are not
changed in any way).

The new 'unittest' only runs unit tests and is fast to build. It takes ~1.7 to
build unittest, vs ~11.09 to build test. This is really the main goal, and
hopefully any unit test which are (a) fast and (b) don't impact build times
will be run here.

The test runner is based on:
https://gist.github.com/karlseguin/c6bea5b35e4e8d26af6f81c22cb5d76b

It allow filtering, i.e. `make unittest F="parse query dup"`.

'unittest' does memory leak detection when tests use std.testing.allocator.

Fixed a memory leak in url/query which was detected/reported with by the new
'unittest'.

In order to avoid having 3 src/test_xyx.zig files, I merged the existing
test_runner.zig and run_tests.zig into a single main_tests.zig. (this change
is superfluous, but I thought it was cleaner this way. Happy to revert this).
2025-02-09 11:04:21 +08:00
Francis Bouvier
d95462073a websockets: fix port default in help
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-11-29 15:06:22 +01:00
Francis Bouvier
325ecedf0b websocket: first implementation
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-11-27 21:24:09 +01:00
Francis Bouvier
7dbb55da06 update zig-js-runtime
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-11-26 12:58:45 +01:00
Francis Bouvier
de286dd78e async: use zig-async-io
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-11-21 16:42:48 +01:00
Francis Bouvier
b9e2be2052 build: support multi os/arch conf for netsurf
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-10-29 20:06:29 +01:00
Francis Bouvier
be5d7022cc build: support multi os/arch conf for libiconv
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-10-28 21:08:46 +01:00
Francis Bouvier
d1951b286c build: support multi os/arch conf for mimalloc
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-10-28 16:06:41 +01:00
Francis Bouvier
46d0aa6f9e Remove all references to the name 'browsercore'
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-10-29 22:16:56 +01:00
Francis Bouvier
486c19079a Merge get and server binaires
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-10-18 16:06:23 +02:00
Pierre Tachoire
6a4d64ed00 use tls.zig with async client
see https://github.com/ziglang/zig/compare/master...ianic:zig:tls23 for
http.std.Client integration
2024-07-19 14:39:50 +02:00
Pierre Tachoire
f2a406d224 move netsurf and mimalloc into modules 2024-06-18 16:13:27 +02:00
Pierre Tachoire
68c8372493 build: use path() func 2024-06-18 16:13:27 +02:00
Pierre Tachoire
33c92776f0 build.zig: upgrade to zig 0.12.1 2024-06-18 16:13:26 +02:00
Pierre Tachoire
4ba4ce0f7c build: upgrade build.zig to 0.12 2024-06-18 16:13:25 +02:00
Francis Bouvier
986e69f45d Update dependancy jsruntime-lib -> zig-js-runtime
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-05-14 11:35:23 +02:00
Pierre Tachoire
2a3a243d1c add AGPL license header in zig files 2024-05-13 20:51:36 +02:00
Pierre Tachoire
53a5326248 mimalloc: avoid mimalloc override
By default mimalloc is built to override default allocation functions.
So it is used also by v8.

This change avoid the mimalloc override to keep the native stdlib
functions.
2024-04-19 11:47:03 +02:00
Pierre Tachoire
9363acf4ec glue mimalloc with netsurf C libs 2024-04-19 11:46:42 +02:00
Pierre Tachoire
d080dde361 test: bench: use pretty for console output 2024-04-08 14:54:55 +02:00
Pierre Tachoire
32349e472c test: add test arguments and expose json benchmark result 2024-04-08 14:40:52 +02:00
Pierre Tachoire
0af69fee6d build: remove deprecated usage 2024-04-03 14:58:11 +02:00
Pierre Tachoire
20f25fc352 build: remove useless getInstallStep deps
the dependance of getInstallStep is useful only if we need a previous
binary to exists before using running the step.
2024-04-03 14:55:38 +02:00
Pierre Tachoire
b59618120f build: remove shell installation 2024-04-03 14:55:10 +02:00
Pierre Tachoire
ff0b7ed6bf build: fix path error 2024-04-03 14:55:01 +02:00
Pierre Tachoire
52d3f3e966 deps: remove lexbor 2024-03-28 11:13:17 +01:00
Pierre Tachoire
a1af89b6a0 build: use test step option struct 2024-03-06 15:59:12 +01:00
Pierre Tachoire
1642741027 browser: start browser API 2024-01-17 18:21:47 +01:00
Francis Bouvier
a5dfa6cb44 Adopt global Types changes in jsruntime
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
2024-01-10 11:56:53 +01:00
Pierre Tachoire
681dd2390c netsurf: remove wrapper C files 2024-01-08 16:02:54 +01:00
Pierre Tachoire
bda6a843ca update addCSourceFiles signature
see https://github.com/ziglang/zig/pull/17420
2023-12-05 14:08:06 +01:00
Pierre Tachoire
0d0628b39e build: don't alias zig version 2023-12-04 17:33:48 +01:00
Pierre Tachoire
f210c773f0 zig: add a zig version check 2023-12-04 11:19:49 +01:00
Pierre Tachoire
22b9b1841c wpt: rename file into main and create make wpt 2023-10-11 09:35:52 +02:00
Pierre Tachoire
8321aa42c7 wpt: create a command instead of a test 2023-10-11 09:35:52 +02:00
Pierre Tachoire
d171b0ff01 wpt: first draft for tests 2023-10-11 09:35:47 +02:00
Pierre Tachoire
a8c4977ed8 build: run test suite 2023-09-28 07:43:40 +02:00
Pierre Tachoire
d7fec31b8a build libiconv from sources 2023-09-22 16:10:22 +02:00
Francis Bouvier
26a38cc16e build: add netsurf private apis
Signed-off-by: Francis Bouvier <francis.bouvier@gmail.com>
2023-09-20 22:49:10 +02:00
Francis Bouvier
f06d1396f7 netsurf: add wrapper
Signed-off-by: Francis Bouvier <francis.bouvier@gmail.com>
2023-09-20 22:48:44 +02:00
Francis Bouvier
bb87055900 build: adapt to zig 0.11 and use netsurf/include
Signed-off-by: Francis Bouvier <francis.bouvier@gmail.com>
2023-09-20 22:45:39 +02:00
Francis Bouvier
d6027b238b build: link netsurf
Signed-off-by: Francis Bouvier <francis.bouvier@gmail.com>
2023-09-07 16:51:29 +02:00
Pierre Tachoire
81b3aed888 0.11: ugrade build.zig 2023-09-19 17:29:25 +02:00
Pierre Tachoire
5d5411e75e 0.11: build: optimize replaces release-safe zig option 2023-09-19 17:29:24 +02:00
Pierre Tachoire
3bfefcb047 vendor: seperate lexbor source from build
* add `vendor/lexbor-src` submodule
* build lexbor static lib into `vendor/lexbor`
2023-09-01 16:00:27 +02:00
Pierre Tachoire
257d0337f0 build: lexbor is now under vendor/ 2023-09-01 16:00:26 +02:00