This is the thirteenth edition of the XUL/XBL Replacement Newsletter. Since the last edition, we’ve gotten close to shipping the main browser window as an HTML document, made some platform improvements related to ongoing frontend work, and continued to remove XBL bindings.
We’ve gotten close to shipping the main browser window as XHTML instead of XUL. In addition to the broader top-level HTML support which is now complete, we filed a new metabug specifically for shipping browser.xhtml.
The biggest piece of work here was Brendan Dahl adding prototype cache support to XHTML documents. With this change we are seeing equivalent performance between browser.xul and browser.xhtml.
As part of that project, he also added <html:template>
support
to documents loaded with the prototype cache. This is a nice change to
bring our chrome UI more in line with the Web platform and gives us a
more standard way to lazify DOM creation (there’s a metabug to do so).
The final steps before enabling browser.xhtml are fixing some assertions (1, 2) that surfaced due to nsHTMLDocument being a DOM proxy and XULDocument not being a proxy. Once those are resolved we plan to flip the switch to enable browser.xhtml by default.
I wanted to mention some platform improvements and code removal related to these projects, and acknowledge the people who’ve worked on them. These are mostly changes that were unblocked by removing in-content XBL and XBL stylesheets, and fixes for bugs we’ve discovered from dogfooding Web Components in the browser chrome.
<resources>
after debugging the last piece of UI that relied on some quirky XBL-specific style behavior.<menuitem>
Custom Element conversion, we discovered a bug where Custom Elements wouldn’t get attached, and Emilio landed a fix for it.<wizard>
Custom Element conversion, we discovered a bug where focus navigation was broken in Shadow DOM, and Emilio landed a fix for it.-moz-binding
CSS property from content.print
CSS rule in the HTML UA sheet that was related to the old XBL <marquee>
.Element::WrapObject
in the content process, since it was only needed to check if a XBL binding had to be atttached.There are 44 bindings left, compared to 55 from the last update and 300 from the start of the project. Here’s a list of changes:
wizard-buttons
binding to a Custom Element.wizard-header
binding by creating the relevant DOM directly within <wizard>
.toolbarbutton-badged-menu
and toolbarbutton-badged-menu
, which were unnecessary ever since [display="xul:menu"]
was removed.<menu>
element to a Custom Element, which removed the menu-base
, menu
, menu-menubar
, menu-menubar-iconic
, and menu-iconic
bindings.radio
binding to a Custom Element.tabbrowser-arrowscrollbox
binding by attaching the relevant events inside of the parent tabbrowser-tabs
element. This change also allowed us to stop loading the tab-overflow-indicator.png image at startup.