Firebug 1.8 Architecture Review
The current initialization is triggered by the panelbar XBL constructor in bindings.xml. It calls Firebug which has a counter. Each panelBar (main or side) calls the initializer and after both arrive, Firebug.chrome.initialize starts. It first constructs the Firebug namespace by calling the functions created by the script tags. That causes Firebug.Module registration. Then it calls Firebug.initialize() which dispatches 'initialize' to the Modules. These initialize state. Finally it sets 'load' event listeners on the panel browsers. Up to this point I believe that all the operations are synchronous. So the Modules are all set before we ever finish browser.xul.
When both internal browser hit 'load', initializeUI is called to allow the event listeners to bind the UI.