Encapsuler Gecko (Mozilla)

Introduction

Gecko est le moteur de rendu de Mozilla. Le nom de Gecko est initialement un terme marketing, avancé par Netscape, désignant les projets NGLayout (ou Raptor) et XPFE (voir cette note). Il est aussi dit ici que ce nouveau nom découle d'un problème de marque déposée. Il faut retenir de tout ceci que ces différents termes désignent tous successivement le moteur de rendu de Mozilla, de 1998 à nos jours.

Le moteur est invisible du point de vue de l'utilisateur : il décode les pages du Web et les affiche. Gecko est conçu pour supporter les standards ouverts ayant cours sur Internet tels HTML, CSS 1 et 2, DOM, XML 1.0, RDF et Javascript. Gecko est portable grâce à l'utilisation de l'architecture XPCOM Cross Platform Component Object Module, développée aussi au sein du projet Mozilla. Enfin, Gecko peut être intégré dans n'importe quel outil nécessitant cette capacité, ce qui va bien au-delà du domaine des navigateurs. Cette page recence quelques exemples d'applications utilisant Mozilla ou le moteur Gecko seul. Ainsi, dans Mozilla lui-même, Gecko gère non seulement le rendu des pages du Web, mais aussi l'affichage de toute l'interface par l'intermédiaire de la technologie XUL.

Obtenir Gecko

Permettre l'encapsulation du moteur Gecko dans une application tierce est un projet à part entière présenté ici. A l'heure actuelle, Gecko fait encore partie intégrante du tronc principal Mozilla. Cela signifie que pour obtenir les sources de Gecko, il est nécessaire de télécharger l'ensemble des sources de Mozilla. Cette page explique comment télécharger la dernière version des sources de Mozilla à partir d'une archive ou du serveur CVS. Ce problème est actuellement pris en compte par le projet Mozilla Embedding SDK.

Des versions binaires sont compilées chaque nuit et sont disponible ici.

Compilation

Tous les noms de fichier et les commandes données ici sont relatifs au répertoire ou se trouvent les sources de Mozilla.

Si vous avez téléchargé les sources, il est nécessaire de compiler tout d'abord Mozilla. Les instructions nécessaires pour compiler Mozilla sont disponibles ici en anglais.

Sous Linux, il suffit de tapper gmake -f client.mk build pour compiler, ou bien gmake -f client.mk pour télécharger la dernière version du serveur CVS et la compiler. Pour modifier les nombreuses options de compilations, et plutôt que d'utiliser soi-même le script configure, il est recommandé d'utiliser l'outil Unix Build Configurator. Cet outil permet de choisir précisément la configuration souhaitée à partir de toutes les options de compilation disponibles. Il génère un fichier qui, une fois sauvegardé dans son répertoire personnel, sera pris en compte par les scripts de compilation de Mozilla.

Une fois Mozilla compilé, on peut réellement construire une version embarquée (Embedded) du moteur Gecko. Pour cela, il suffit de tapper les commandes suivantes :

cd mozilla/embed/config
make
Cette compilation aussi peut être personnalisée afin de construire un moteur Gecko contenant uniquement les fonctionnalités que vous souhaitez. Ce point est traitée dans cette partie de la FAQ.

La version compilée de Mozilla se trouve dans le répertoire dist et le moteur Gecko dans le répertoire dist/Embed.

Encapsulation

Observer l'existant

Le meilleur moyen de se familiariser avec l'exploitation du moteur Gecko reste la lecture des exemples existants. Les sources de Mozilla contiennent plusieurs exemples d'encapsulation de Gecko, et il existe de nombreux navigateurs libres (et donc dont on peut observer les sources) qui l'utilisent. Parmi eux ;

Utiliser un objet intermédiaire

Les sources de Mozilla contiennent déjà un premier niveau d'encapsulation. Plutôt que d'employer directementl'API de Gecko, il est possible de s'appuyer sur des classes déjà écrites, s'appuyant sur des bibliothèques largement distribuées et encapsulant elle-mêmes Gecko.

Ainsi, un widget GTK (Gtk Mozilla Embedding Widget) est fourni pour être utilisé comme n'importe quel autre widget dans une application GTK. De même, il est possible d'utiliser un contrôle ActiveX (Mozilla ActiveX Control) dans une application MS Windows ou Webclient dans une application Java.

Toutes ces classes définissent une couche au-dessus de Gecko qui facilite l'encapsulation du moteur en masquant XPCOM. En contrepartie, ces interfaces entre Gecko et le programme client cachent certaines fonctionnalités, et toutes n'offrent pas tout ce que Gecko permet de faire.

Un aperçu de XPCOM

Ce document introduit l'utilisateur aux technologies employées et aux tâches essentielles nécessaires à l'encapsulation de Gecko. La technologie la plus importante à prendre en compte lorsque l'on programme avec Gecko est XPCOM. C'est en effet par son intermédiaire que l'on communique avec le moteur de rendu.

XPCOM, comme son nom semble l'indiquer, est une technologie semblable à MS COM. Toutefois les deux technologies ne sont pas pensées exactement de la même manière et ne sont pas compatibles entre elles. XPCOM est opensource, portable, et peut être utilisé indépendamment de Mozilla.

XPCOM repose sur la notion de composants. Un composant est une sous-partie réutilisable d'un programe (une bibliothèque .dll ou .so par exemple). Il procure à l'utilisateur des services groupés dans des interfaces, lesquelles peuvent être décrites dans un langage neutre (XPIDL, interface description language).

Une application souhaitant utiliser un composant ne le manipule qu'à travers les interfaces qu'il procure. Les interfaces sont une sorte de contrat entre le composant et le logiciel client, spécifiant que les méthodes qu'elles procurent resteront les mêmes d'une version du composant à l'autre.

Par exemple, la création d'un objet de navigation s'effectue de la manière suivante, en fournissant à do_CreateInstance l'identifiant unique du composant WebBrowser:

// Create a web shell  
nsresult rv;
_webBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
if (NS_FAILED(rv)) {
  return rv;
}

Toutes les méthodes d'un composant XPCOM utilisent une valeur de retour pour spécifier le résultat de l'opération. Les exceptions du C++ ne sont pas utilisées afin de faciliter la portabilité du code.

Lorsqu'un objet est ainsi créé, l'application cliente utilise do_QueryInterface pour obtenir un pointeur sur l'interface qui l'intéresse. Ici, l'interface nsIWebNavigation de l'objet _webBrowser est enregistrée dans la variable _webNav. Cette interface servira plus tard dans le programme à la navigation.

rv = NS_OK;
_webNav = do_QueryInterface(_webBrowser, &rv);

La première chose à écrire est d'initialiser Gecko. Cette initialisation initialise en particulier XPCOM. Il existe de la même manière une procédure pour arrêter le moteur Gecko à la toute fin du programme.

nsresult rv;
rv = NS_InitEmbedding(nsnull, provider);
if (NS_FAILED(rv)) {
  ASSERT(FALSE);
  return FALSE;
}

Encapsuler Gecko nécessite de bien comprendre XPCOM, ce qui dépasse le cadre de ce document. Cet article en cinq parties explore plus profondément le fonctionnement de XPCOM, avec de longs exemples à l'appui. Cette page et celle-ci expliquent et détaillent l'API de Gecko.

Modifié le 12/06/2003 et généré par Achille 2.0 le Friday 01 June 2007 20:19