mozilla
Your Search Results

    XPCOM

    XPCOM je systém objektů používaný Mozillou, obdoba MSCOM u Microsoftu (jsou si podobné, ale ne kompatibilní). Definuje proces vytváření a rušení komponent, způsob přístupu k nim nebo jejich vlastnictví. V širším smyslu to je soubor rozhraní (interface) pro volání metod komponent.

    Každá XPCOM komponenta musí implementovat kromě vlastního rozhraní ještě několik dalších XPCOM rozhraní. Následuje výčet těch (rozdělený do skupin), které se budou v našem příkladu objevovat:

    XPCOM Core:

    • nsISupports - dědí z něj všechna ostatní rozhraní, obhospodařuje životní cyklus objektu
    • nsIMemory - alokace a uvolnění paměti

    XPCOM Components:

    • nsIFactory - základní abstrakce XPCOM objektu, obsahuje metodu <tt>CreateInstance()</tt>, která vrací objekt podle zadaného CID nebo IID
    • nsIModule - vyšší abstrakce, soubor nsIFactory rozhraní, registruje a spravuje komponenty, metody: <tt>getClassObject()</tt>, <tt>nsIClassInfo()</tt>
    • nsIComponentManager - vytváření a organizace XPCOM objektů
    • nsIServiceManager - poskytuje prostředky přístupu k jednotlivým objektům aplikace

    XPCOM Data Structures:

    • nsICategoryManager a nsIObserver - odchytávání událostí

    Nutné je použití uvedených rozhraní ze skupin Core a Components. Pokud chceme s komponentou komunikovat (ovládat ji, získávat výsledky), musí implementovat obecný observer nsIObserver – při startu Gecka jsou k němu zaregistrované komponenty přihlášeny. Observer je objekt, který zachytává události a předává je pak komponentě, objekty si pak můžou navzájem posílat zprávy, aniž by o sobě měly explicitní znalosti (informace).

    Naše aplikace bude mít následující hierarchii tříd:

                 +-------------+
                 | nsISupports |
                 +------+------+
                 _______|_______
                /               \
        +------+------+   +------+------+
        | EmbSession  |   | nsIObserver |
        +------+------+   +------+------+
                \_______________/
                        |
                 +------+------+
                 | EmbeddedApp |
                 +-------------+
    

    Ostatní rozhraní neimplementuje přímo, ale pomocí maker. Makra jsou při psaní kódu XPCOM komponent velice užitečná – programátor se nemusí zabývat různými postupy nutnými k registraci objektu apod. Důležitá je také zastřešující funkce maker. Spousta rozhraní ještě totiž není deklarována jako <tt>FROZEN</tt> – tj. jako dokončená, dále už neměnná (pokud jsou, tak je v definičním souboru rozhraní (<tt>.idl</tt>) uvedeno <tt>@status FROZEN</tt>).

    Pro oboustrannou komunikaci (tedy volání JavaScriptu v GUI souboru z aplikace) je třeba definovat další rozhraní: <tt>embListener.idl</tt>. Je definováno obdobně jako rozhraní XPCOM komponenty. V JavaScriptovém skriptu si pak vytvoříme objekt (listener), který navážeme na JavaScriptovou funkci volanou z komponenty (a definovanou v <tt>embListener.idl</tt>). XPCOM komponentě pak tento objekt předáme jako parametr nějaké funkce (v našem případě <tt>openConnection()</tt>). V komponentě pak voláme funkci jednoduše jako metodu kteréhokoliv jiného objektu: <tt>listener->metoda;</tt>.

    Existují i jiné způsoby navázání oboustranné komunikace.

    Informace o původním dokumentu

    • Autor: Jan Ditrich

    Document Tags and Contributors

    Contributors to this page: Pawell, Majda
    Last updated by: Pawell,