Description: This patch is part 1 in the draft for asynchronous IPC. This patch is responsible for 100% for the functionality that is added to make async IPC possible. The following patches in this series, contains the changes to code in Ladybird at large, that needs to change in order to compile and although I know this breaks with convention, I figured this would be easier to review as a draft. I can squash/refactor, as soon as some review of this has started. It also allows me to write additional patches that can show how this should work. Changes made Added a sequence id to all messages, which is provided by the endpoint as a static monotonic id. Changed the int value for messages and responses (for debuggability purposes). All messages are uneven values and all responses are that value + 1, to encode additional data into the value. Messages that respond with data, now must be changed from: Messages::SomeEndpoint::ResponseType foo(Foo arg1, Bar arg2) to NonnullRefPtr<Core::Promise<Messages::SomeEndpoint::ResponseType>> foo(Foo arg1, Bar arg2) After in-depth discussion, maintainers of the project opted to go for non-industry standard approach to maintain a logical cohesiveness with ladybird, where the return of a Promise<T> is more logically suitable, even if it incurs a little extra verbosity. Existing IPC methods, now needs to do the following 4 things, and commit 2 of this Async IPC proposal will do a few of them for existing messages: - Change the return type from `Messages::EndPointName::MessageNameResponse` to `NonnullRefPtr<Messages::EndPointName::MessageName::Promise>` - Construct the correct Promise type, which can be found in the `Messages::EndPointName::MessageName::Promise` typedef. - Resolve the promise with a value, where appropriate. - Return the promise (Note: Under no circumstances are you allowed to configure a `when_resolved` for this `Promise` as the IPC system relies on using this to pickle the message and then write the message buffer over the socket. You are only allowed to to resolve it with a value). |
||
---|---|---|
.devcontainer | ||
.github | ||
AK | ||
Base/res | ||
Documentation | ||
Libraries | ||
Meta | ||
Services | ||
Tests | ||
Toolchain | ||
UI | ||
Utilities | ||
.clang-format | ||
.clang-tidy | ||
.clangd | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.gn | ||
.mailmap | ||
.pre-commit-config.yaml | ||
.prettierignore | ||
.prettierrc | ||
.swift-format | ||
.ycm_extra_conf.py | ||
CMakeLists.txt | ||
CMakePresets.json | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
ISSUES.md | ||
LICENSE | ||
README.md | ||
SECURITY.md | ||
vcpkg-configuration.json | ||
vcpkg.json |
Ladybird
Ladybird is a truly independent web browser, using a novel engine based on web standards.
Important
Ladybird is in a pre-alpha state, and only suitable for use by developers
Features
We aim to build a complete, usable browser for the modern web.
Ladybird uses a multi-process architecture with a main UI process, several WebContent renderer processes, an ImageDecoder process, and a RequestServer process.
Image decoding and network connections are done out of process to be more robust against malicious content. Each tab has its own renderer process, which is sandboxed from the rest of the system.
At the moment, many core library support components are inherited from SerenityOS:
- LibWeb: Web rendering engine
- LibJS: JavaScript engine
- LibWasm: WebAssembly implementation
- LibCrypto/LibTLS: Cryptography primitives and Transport Layer Security
- LibHTTP: HTTP/1.1 client
- LibGfx: 2D Graphics Library, Image Decoding and Rendering
- LibUnicode: Unicode and locale support
- LibMedia: Audio and video playback
- LibCore: Event loop, OS abstraction layer
- LibIPC: Inter-process communication
How do I build and run this?
See build instructions for information on how to build Ladybird.
Ladybird runs on Linux, macOS, Windows (with WSL2), and many other *Nixes.
How do I read the documentation?
Code-related documentation can be found in the documentation folder.
Get in touch and participate!
Join our Discord server to participate in development discussion.
Please read Getting started contributing if you plan to contribute to Ladybird for the first time.
Before opening an issue, please see the issue policy and the detailed issue-reporting guidelines.
The full contribution guidelines can be found in CONTRIBUTING.md
.
License
Ladybird is licensed under a 2-clause BSD license.