We have been experimenting with embedding Servo in 3rd party rust
application, with the goal to understand better the needs of
embedders, identify issues with current Servo implementation, and
determine which features we wish to be exposed. Some early findings
are documented here:
https://github.com/paulrouget/servoshell/projects/2. Eventually, we
want to get rid of the Browser API, extract it in its own 3rd party
project (if you want to hear more about this, talk to me or Till).

Some work is already in progress to improve the embedding story
(improving startup code, support multiple top level frame, cosmetic
changes in the servo events/callbacks, exposing history).

Until the basics of the embedding mechanism is in place, I'd like to
highlight some areas of the engine we are particularly interested in
leveraging in the future. If you are working on any of these features,
and planning to do some fundamental changes, we'd love to be involved
in the discussion:

- Joint session history: at the moment, the way history is exposed is
very basic (a flatten version of the joint session history). In the
future, we would like the embedder to have better control over the
history and the state of the pipelines (conversation already started
with Alan)
- Multiple compositor/WR instances: this will be a requirement
eventually. From our side, this is blocked on supporting more than one
top level browsing context (work in progress). I know that the work
has already started. This will have an impact on startup code (at the
moment, startup creates the constellation + one (only) browser + one
(only) WR instance).
- Prerendering: we will want to prerender documents. A special kind of
pipeline with black-listed functionalities.
- Navigation hooks: navigating from a top level document should always
involve the embedder (see #15795)
- Browser restoration / LoadData: undoing tab closing, restoring a
session, or cloning a tab, will require serializing the state of a
document. At the moment, we believe this will rely on the LoadData
structure. So we are planning to make LoadData an important part of
the embedding API
- Content blocking: we identify 4 types of content blockers (popup,
tracking, mixed content, custom (extensions / ad blockers for
example)). Not sure how these will work
- libservo public methods / event, and startup code

If your work is related to any these features, I'd appreciate if you
could cc me to the relevant github issue!

Thank you.
_______________________________________________
dev-servo mailing list
dev-servo@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-servo

Reply via email to