XUL applications use the
<browser> to create a browse-able web content widget. The
<browser> XBL binding exposes many useful properties.
In the world of Electrolysis, a browser enables out-of-process web content using the
<browser remote="true" ... />
Out-of-process web content breaks many of the XBL properties. The DocShell is not valid so many of the core properties fail:
contentDocument. These properties make up the foundation of many other properties as well.
We can create an IPC-aware XBL binding, which extends the current
<browser> binding. The goal would be to override as many properties as possible, so the properties either work - or throw errors. We should not silently fail or cause errors far from the root cause.
The IPC-aware XBL binding would live in the same XBL file the current non-IPC binding lives. We can use the
remote attribute to enable the IPC-aware binding.
The IPC-aware binding would use a content process script, loaded in its constructor using
messageManager. The content process script would setup some utility code that would send or receive messages from the chrome XBL binding.
Some examples of content script helpers include:
- WebProgress: Used to send the current URI from LocationChange which the XBL uses to implement
currentURI. Also used to update the
- DOMEvents: Used to listen for some DOM events, like DOMTitleChanged, and send a message back to chrome XBL. The XBL then uses the data, setting
contentTitlefor example, and then also re-dispatches the DOM event into chrome.
- WebNavigation: Used by the XBL to implement nsIWebNaviagtion-based methods like
The current work is happening in bug 560827.