Voici une réponse descendante (la plupart des autres réponses sont ascendantes) :
Firefox est un XUL (voir également : XUL ) ; XUL est une variante de XML utilisée pour décrire une interface graphique qui est interprétée par un moteur de rendu, de la même manière que le HTML est rendu dans le navigateur, mais XUL inclut les menus du navigateur, les boutons, la barre d'état, les raccourcis clavier, etc. C'est assez intéressant ; j'ai été capable de mettre en place des applications GUI simples beaucoup plus rapidement avec XUL qu'avec d'autres frameworks (et c'est indépendant de la plate-forme !).
Si vous regardez dans le répertoire de l'application Firefox (là où vous l'avez installé sur votre système), vous verrez un répertoire "chrome" avec un tas de fichiers .jar. Il s'agit simplement de fichiers .zip avec une structure particulière (y compris un manifeste) et vous pouvez les parcourir vous-même.
Une grande partie du navigateur Firefox est en fait XUL + Javascript. Il utilise de nombreuses bibliothèques de bas niveau écrites en C++ et accessibles à Javascript via XPCOM, mais si vous voulez comprendre (et modifier) le comportement de haut niveau, les parties XUL+Javascript sont probablement le point de départ.
edit : p.s. voici quelques tutoriels/références pour XUL : 1 2 et aussi le Le livre d'O'Reilly
edit : Les documents XUL sont très similaires aux documents HTML (mais plus encore !) dans la façon dont ils interagissent avec l'utilisateur + événements. Il y a un modèle de document pour en modifiant dynamiquement le XUL, et il y a modèles d'événements qui ont des écouteurs d'événements. Les deux agissent comme HTML + DOM + son modèle d'événement, mais avec un ensemble plus riche d'objets/interfaces/événements/etc. intégrés. Les gestionnaires d'événements sont des interfaces d'un type particulier, et peuvent être implémentés par des objets Javascript (déclarés dans le XUL avec la commande onclick="blah()"
ou ajoutés dynamiquement par des appels Javascript à addEventListener()
-- les deux sont exactement la même syntaxe que les événements HTML dans Firefox) ou par C++ ou d'autres langages qui peuvent mettre en œuvre des objets XPCOM avec les interfaces appropriées.