Net Panel Architecture Review
- HTTP Activity Observer Used to observer detailed HTTP traffic. Based on the nsIHttpActivityDistributor and utilizes the nsIHttpActivityObserver. Provides precise timing information about executed HTTP requests and post information to Net Progress context object.
- HTTP Observer Used to observe the HTTP following events
http-on-examine-cached-response (see Observer HTTP request notifications). Based on the nsIObserver and the related nsIObserverService. Mainly used for catching also events coming from BFCache, that are not observed by the HTTP Activity Observer. Also posts information to the Net Progress object.
- Net Progress Context object responsible for collecting and processing all HTTP traffic information related to a specific tab/page. All network events are stored in an Input Queue in case the Net Panel (UI) is not selected (enabled, but not selected) and so, it isn't necessary to do any rendering (needs to be fixed in Firebug). This strategy safes CPU cycles, since the entire processing is done as soon as the panel is actually selected by the user. In case when the Net panel (or any other UI) is selected, all incoming events are processed and information gathered in a set of objects, that represent individual requests. These objects are consequently put into the Output Queue. Note, that there can be many network events related to one request (e.g.: connecting, sending, waiting, receiving, blocking, etc.). Part of the processing task is to collect these events and put all information into the corresponding request related object.
- Context This object is used by Firebug to collect all meta-data about a specific page. The Net Progress object is part of it (shares the same life-cycle).
- Net Panel This object is responsible for reading the Output Queue from the Net Progress object and generate the UI. This is done upon a fixed timeout (300ms) so, heavy traffic doesn't generate to many unnecessary UI layout changes. The output queue consists of an object, that represents individual HTTP requests an so, presence of an object in the queue ensures updating of the corresponding entry existing or just generated in the panel. Part of the update process is also the generation of a waterfall graph (aka Timeline).
- UI Templates Set of Domplate based templates used by the Net panel to generate the entire panel UI (HTML/CSS).
- Net Monitor Represents a module, that is associated with the Net Panel. There is one instance of this object per browser window. Note, that there is one instance of a Net Panel per page/tab. This object manages attaching/detaching of HTTP observers. Observers are only attached, if there is at least one Net Panel, that actually wants to display HTTP network traffic.
- Client/Server Experimental separation of the diagram as preparation for Firebug remoting. It needs to be prototyped yet (the Net Progress should be partially cached on the server side and flushed on timeout in order to safe the HTTP traffic overhead).
- firebug/net/httpActivityObserver.js HTTP Activity Observer (based on nsIHttpActivityDistributor)
- firebug/net/requestObserver.js Generic HTTP Observer (based on nsIObserver)
- firebug/net/responseObserver.js HTTP response body tracking (based on nsITraceableChannel)
- firebug/net/netProgress.js Net Progress
- firebug/net/netPanel.js Net Panel
- firebug/net/netReps.js UI templates
- firebug/net/netMonitor.js Network Monitor
- firebug/net/httpLib.js HTTP related API shared across modules.
- firebug/net/netUtils.js Utility functions (should be part of firebug/net/httpLib
- firebug/net/netDebugger.js Support for XHR breakpoints.