Who is Rob Wu?
- MSc student Information Security Technology @ TU/e (Netherlands)
- Chromium contributor, extension developer
- Reviewer at addons.mozilla.org
- Firefox intern
WebExtensions
- Cross-browser API to develop browser add-ons
- Successor to XUL overlays, bootstrapped extensions and Add-on SDK
- Shields the volatile internals of Firefox from add-ons
- Compatible with multi-process Firefox (e10s)
- Well-documented
Out-of-process WebExtensions
- Goal: run add-ons in a separate process
- Must stay compatible with single-process Firefox
- Getting started:
- Check correctness of existing implementation
- Unique IDs must really be unique
(1287245,
1287626,
1288279)
- Script contexts must close upon page unload
(1288276)
- Namespace isolation for code in different "processes"
Registering API implementations
- Script types: content scripts & extension pages
- Separate JS sandbox for each "process" (main, content, addon)
- Declare APIs with specific script and process types
(1287010)
extensions.registerSchemaAPI("runtime", "content_child", (context) => {
return {
runtime: {
get id() { return context.extension.id; },
sendMessage(message, callback) { /* ... */ },
},
};
});
→ ExtensionContext
(direct)
→ addon API
→ ExtensionContext → ParentAPIManager → ProxyContext → content API
→ ExtensionContext → ChildA↑ (asynchronous)
→ ExtensionContext → ChildAPIManager
→ ExtensionContext → WannabeChildAPIManager ↘ (direct)
→ ExtensionContext → Wan ↓ (asynchronous)
→ ExtensionContext → ParentAPIManager → ProxyContext → ... API
→ ExtensionContext → ChildA↑ (asynchronous)
→ ExtensionContext → ChildAPIManager
→ ExtensionContext → ParentAPIManager → ... API
→ ExtensionContext → ChildA↑ (asynchronous)
→ ExtensionContext → ChildAPIManager
Thanks to
- Bill McCloskey
- Andy McKay
- WebExtensions team
- Amy Tsay & ACE team
- Fellow interns (Enes, Emilio, Nima, ...)
- University team
- Mozilla and Mozillians