diff options
Diffstat (limited to 'files/fr/mozilla/gecko/mozilla_embarqué')
5 files changed, 800 insertions, 0 deletions
diff --git a/files/fr/mozilla/gecko/mozilla_embarqué/api_overview/index.html b/files/fr/mozilla/gecko/mozilla_embarqué/api_overview/index.html new file mode 100644 index 0000000000..bf0dbc85cf --- /dev/null +++ b/files/fr/mozilla/gecko/mozilla_embarqué/api_overview/index.html @@ -0,0 +1,422 @@ +--- +title: Vue d'ensemble des APIS embarquées de Mozilla +slug: Mozilla/Gecko/Mozilla_embarqué/API_overview +translation_of: Mozilla/Gecko/Embedding_Mozilla/API_overview +--- +<h2 id="Introduction" name="Introduction">Introduction</h2> +<p>The Mozilla Public API consists of a collection of services and components which are accessed via XPCOM interfaces. Mozilla's XPCOM layer consists of a component model (called XPCOM) and the infrastructure necessary to support dynamic registration, instantiation and manipulation of XPCOM components.</p> +<p>At the heart of XPCOM's implementation is the Service Manager and the Component Manager. Together, these two services provide a centralized point for gaining access to all of the public Mozilla interfaces.</p> +<p>The Service Manager exposes all of the available XPCOM services - each service represents a global object which provides some piece of functionality. The Component Manager allows new instances of registered XPCOM components to be instantiated.</p> +<p><img alt="Image:public-apis-image2.gif" class="internal" src="/@api/deki/files/819/=Public-apis-image2.gif"></p> +<p>The embedding layer consists of several components built on top of XPCOM and its services. Much of the Gecko functionality is exposed through a component called the nsWebBrowser. Embedding applications can leverage this component to easily access many of Gecko's features. Each WebBrowser instance represents the "client-area" of a typical browser window. The WebBrowser exposes a set of interfaces which allow the embedding application to control activity and respond to changes within this client area. Using these interfaces an embedding application can build up its own user interface around a WebBrowser instance.</p> +<p><img alt="Image:public-apis-image1.gif" class="internal" src="/@api/deki/files/818/=Public-apis-image1.gif"></p> +<h2 id="Public_Classes" name="Public_Classes">Public Classes</h2> +<p>The following utility classes are available from the XPCOM DLL. They provide some basic functionality which should be leveraged when building new XPCOM components.</p> +<ul> + <li>nsCOMPtr<interface-type></li> +</ul> +<p>These are templatized smart pointers which transparently deal with XPCOM reference counting issues. See the nsCOMPtr User's Manual for more information.</p> +<ul> + <li>nsString</li> +</ul> +<p>There are a collection of string classes which support both unicode and ASCII strings. These classes provide a variety of string operations as well as dealing with the memory management issues of storing the underlying data. See the String Guide for more details.</p> +<ul> + <li>nsWeakPtr</li> +</ul> +<p>This is an nsCOMPtr which encapsulates XPCOM weak reference support. See the nsIWeakReference document for more information.</p> +<h2 id="Public_Return_Codes" name="Public_Return_Codes">Public Return Codes</h2> +<ul> + <li>NS_SUCCEEDED</li> + <li>NS_ERROR_FAILURE</li> + <li>NS_ERROR_NOT_IMPLEMENTED</li> +</ul> +<h2 id="Public_Functions" name="Public_Functions">Public Functions</h2> +<p>The following functions are available from the XPCOM DLL.</p> +<ul> + <li>NS_InitEmbedding</li> +</ul> +<p>This function initializes the Gecko embedding support. This must be the first function call made into Gecko.</p> +<ul> + <li>NS_TermEmbedding</li> +</ul> +<p>This function shuts down Gecko and cleans up any remaining resources... Currently, once Gecko has been shutdown, it cannot be restarted in the same process space... This should change in the future.</p> +<ul> + <li>nsMemory + <ul> + <li>nsMemory::Alloc</li> + <li>nsMemory::Realloc</li> + <li>nsMemory::Free</li> + </ul> + </li> +</ul> +<p>This helper class provides static accessors to the global nsMemory Service.</p> +<ul> + <li>NS_GetGlobalComponentManager</li> +</ul> +<p>This function returns an instance of the Component Manager service.</p> +<ul> + <li>NS_ConvertASCIItoUCS2</li> +</ul> +<p>This is a helper class which converts an ASCII string into a UCS2 string. Typically, instances of this class are stack allocated, and wrap ASCII arguments which must be converted into UCS2.</p> +<ul> + <li>do_QueryInterface</li> +</ul> +<p>This is a helper class which works in conjunction with nsCOMPtr to perform a simplified call to nsISupports::QueryInterface(...) with a typesafe assignment.</p> +<ul> + <li>do_GetInterface</li> +</ul> +<p>This function simplfies retrieving interfaces via the nsIInterfaceRequestor::GetInterface(...) method. Using this function, one can use nsISupports instances and still easily access other interfaces via nsIInterfaceRequestor.</p> +<p>Internally, this function tries to convert the nsISupports argument into an nsIInterfaceRequestor and then calls GetInterface(...) to retrieve the requested interface.</p> +<ul> + <li>do_QueryReferent</li> +</ul> +<p>This function is the equivilent of do_QueryInterface except that it performs the QI through a weak reference.</p> +<ul> + <li>do_GetService</li> +</ul> +<p>This function simplifies accessing services from the Service Manager.</p> +<ul> + <li>do_CreateInstance</li> +</ul> +<p>This function simplifies creating new component instances.</p> +<ul> + <li>nsCOMTypeInfo<interface-type>::GetIID()</li> +</ul> +<p>This template helper class allows easy access to an interface's nsIID. Typically the NS_GET_IID(...) macro is used instead of using the nsCOMTypeInfo template directly.</p> +<ul> + <li>NS_GetWeakReference</li> +</ul> +<p>This function creates a weak reference to a component which implements the nsIWeakReference interface.</p> +<h2 id="Global_Services" name="Global_Services">Global Services</h2> +<p><strong>nsServiceManager</strong></p> +<p>The Service Manager is the central repository for accessing instances of the various XPCOM services. Each service is represented by a singleton object which is instantiated the first time it is requested and remains alive until the Service Manager is shut down, or the service is explicitly unloaded.</p> +<p>Through the Service Manager, individual services can be loaded, unloaded and accessed.</p> +<p><em>Implemented Interfaces:</em></p> +<ul> + <li>nsIServiceManager</li> +</ul> +<p><em>Related Interfaces:</em></p> +<ul> + <li>nsIShutdownListener</li> +</ul> +<p><strong>nsMemory</strong></p> +<p>The nsMemory service provides the global memory manager implementation for XPCOM. In addition to memory allocation and release, this service provides low memory notifications, called a memory pressure observers, which are notified when memory is low - thus allowing cached resources to be freed.</p> +<p>All heap access should be done via the nsMemory service. To facilitate this, a set of global functions are available to access the nsMemory methods without requiring an instance of the nsMemory service (see nsMemory.h).</p> +<p><em>Contract-id:</em> NS_MEMORY_CONTRACTID</p> +<p><em>Implemented Interfaces:</em></p> +<ul> + <li>nsIMemory</li> +</ul> +<p><em>Related Interfaces:</em></p> +<ul> + <li>nsIObserver</li> +</ul> +<p><strong>nsComponentManager</strong></p> +<p>The nsComponentManager service is responsible for creating new instances of XPCOM components. The Component Manager is also responsible for registering and managing the class factories used for component creation...</p> +<p><em>Contract-id:</em> NS_COMPONENTMANAGER_CONTRACTID</p> +<p><em>Implemented Interfaces:</em></p> +<ul> + <li>nsIComponentManager</li> + <li>nsIInterfaceRequestor</li> +</ul> +<p><em>Requestor Interfaces:</em></p> +<ul> + <li>nsIServiceManager</li> +</ul> +<p><em>Related Interfaces:</em></p> +<ul> + <li>nsIFactory</li> +</ul> +<p><strong>nsURILoader</strong></p> +<p>The nsURILoader service is responsible for targeting a URI at an appropriate content handler. A content handler may be an existing or new window, a helper application or the Unknown Content Handler - if no other handler can be found for the content-type.</p> +<p><em>Contract-id:</em> NS_URI_LOADER_CONTRACTID</p> +<p><em>Implemented Interfaces:</em></p> +<ul> + <li>nsIURILoader</li> +</ul> +<p><em>Related Interfaces:</em></p> +<ul> + <li>nsIURIContentListener</li> +</ul> +<p><strong>nsUnknownContentTypeHandler</strong></p> +<p>The UnknownContentTypeHandler service is the last resort of the URILoader when no other content handler can be located. If no registered content handlers are available, the UnknownContentTypeHandler is notified.</p> +<p>The default implementation of this service displays a dialog box asking the user if the content should be saved to disk...</p> +<p><em>Contract-id:</em> NS_IUNKNOWNCONTENTTYPEHANDLER_CONTRACTID</p> +<p><em>Implemented Interfaces:</em></p> +<ul> + <li>nsIUnknownContentTypeHandler</li> +</ul> +<p><strong>HelperApp Launch Dialog</strong></p> +<p><em>Contract-id:</em> NS_EXTERNALHELPERAPPSERVICE_CONTRACTID</p> +<p><em>Implemented Interfaces:</em></p> +<ul> + <li>nsIExternalHelperAppService</li> +</ul> +<p><strong>Preferences Service</strong></p> +<p>The Preferences service provides access to persistent data stored within a user's profile directory.</p> +<p><em>Contract-id:</em> NS_PREF_CONTRACTID</p> +<p><em>Implemented Interfaces:</em></p> +<ul> + <li>nsIPrefService</li> + <li>nsIPrefBranch</li> +</ul> +<p><em>Related Interfaces:</em></p> +<ul> + <li>nsIPrefListener</li> +</ul> +<p><strong>Profile Manager Service</strong></p> +<p><em>Contract-id:</em></p> +<p><em>Implemented Interfaces:</em></p> +<p><strong>Document Loader Service (WebProgress)</strong></p> +<p>Eventually, this service will be replaced by theWebProgress service...</p> +<p><em>Contract-id:</em> NS_DOCUMENT_LOADER_SERVICE_CONTRACTID</p> +<p><em>Implemented Interfaces:</em></p> +<ul> + <li>nsIWebProgress</li> + <li>nsIDocumentLoader</li> +</ul> +<p><em>Related Interfaces:</em></p> +<ul> + <li>nsIWebProgressListener</li> +</ul> +<h2 id="Public_Components" name="Public_Components">Public Components</h2> +<h3 id="nsWebBrowser" name="nsWebBrowser">nsWebBrowser</h3> +<p>The nsWebBrowser is the main embedding component which Gecko exposes. Conceptually, each nsWebBrowser instance represents a HTML content area.</p> +<p>Conceptually, for each document being rendered, Gecko creates a container called a DOMWindow. Each WebBrowser exposes a tree of DOMWindows - representing the frame hierarchy for the current document. As such, access to individual document frames is done via the DOMWindow interfaces. Manipulation of the entire document structure is done via the various WebBrowser interfaces.</p> +<p><em>Contract-id:</em> NS_WEBBROWSER_CONTRACTID</p> +<p><em>Implemented Interfaces:</em></p> +<ul> + <li>nsIWebBrowser</li> + <li>nsIWebNavigation</li> + <li>nsIWebBrowserSetup</li> + <li>nsIWebBrowserPersist</li> + <li>nsIWebBrowserFind</li> + <li>nsIWebBrowserPrint</li> + <li>nsIWebBrowserFocus</li> + <li>nsIBaseWindow</li> +</ul> +<p><em>Requestor Interfaces:</em></p> +<ul> + <li>nsIDOMWindow</li> + <li>nsIDOMDocument</li> + <li>nsIWebProgress</li> + <li>nsIClipboardCommands</li> + <li>nsIPrompt</li> +</ul> +<p><em>Related Interfaces:</em></p> +<ul> + <li>nsIPrompt</li> + <li>nsIWebBrowserChrome</li> + <li>nsIWebBrowserSiteWindow</li> + <li>nsIWebProgressListener</li> + <li>nsIContextMenuListener</li> + <li>nsIPrintOptions</li> +</ul> +<p><strong>Overview:</strong></p> +<p>Most of Gecko's functionality is exposed through the nsWebBrowser component. The WebBrowser provides a simple mechanism for other applications to leverage Gecko functionality. Each instance of a WebBrowser encapsulates a full featured HTML content area.</p> +<p>The embedding application receives notifications from Gecko through a set of callback interfaces it may choose to implement.</p> +<p><img alt="Image:public-apis-image3.gif" class="internal" src="/@api/deki/files/820/=Public-apis-image3.gif"></p> +<p>Below is a code snippet which an embedding application can use to create and initialize a WebBrowser:</p> +<pre> nsresult rv; + nsCOMPtr<nsIBaseWindow> baseWindow; + nsCOMPtr<nsIWebBrowser> webBrowser; + + // Create a nsWebBrowser instance... + webBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv); + if (NS_FAILED(rv)) return rv; + + // Give the WebBrowser a pointer to the embedding component which + // implements the callback interfaces. Replace 'this' with + // an appropriate object... + rv = webBrowser->SetContainerWindow((nsIWebBrowserChrome*)this); + if (NS_FAILED(rv)) return rv; + + baseWindow = do_QueryInterface(webBrowser); + + // Initialize the WebBrowser with a native parent window + // (ie. HWND on Win32). Replace 'nativeWindow' with a + // reference to an appropriate native resource... + rv = baseWindow->InitWindow(nativeWindow, // Native window + nsnull, // Always nsnull. + x, y, cx, cy); // Initial dimensions... + if (NS_FAILED(rv)) return rv; + + // Create the child window for the WebBrowser. + rv = baseWindow->Create(); + if (NS_FAILED(rv)) return rv; + + // At this point webBrowser contains the new initialized instance + // of the nsWebBrowser component... + // Save webBrowser before it goes out of scope :-) + +</pre> +<p><strong>Web Navigation</strong></p> +<p>The nsIWebNavigation interface is used to load URIs into the WebBrowser and provide access to session history capabilities - such as back and forward.</p> +<p><strong>Clipboard</strong></p> +<p>The WebBrowser exposes access to the system clipboard via the nsIClipboardCommands interface. This interface supports cut/copy/paste operations on the current selection within the WebBrowser window.</p> +<p><strong>Printing (not yet implemented)</strong></p> +<p>Printing the contents of a DOMWindow within a WebBrowser is a two step process. First, the printer and page options are collected via the nsIPrintOptions interface. On most platforms this involves displaying a native Print dialog box. Once all of the options have been set, the nsIWebBrowserPrint interface is used to print the contents of the desired DOMWindow.</p> +<p><strong>Searching</strong></p> +<p>Searching within a nsWebBrowser is controlled via the nsIWebBrowserFind interface. The search is always performed within the DOMWindow which currently has the focus.</p> +<p><strong>Focus Management</strong></p> +<p>Focus managment within the WebBrowser is accessed via the nsIWebBrowserFocus interface.</p> +<p>This interface serves two purposes. First, it provides methods for the embedding application to notify a WebBrowser of activation/deactivation and to control tabbing order... This interface also allows access to the currently focused DOMWindow and DOMElement.</p> +<p><strong>Context Menu notifications</strong></p> +<p>Right-click context menu notifications are passed up to the embedding application through the nsIContextMenuListener interface. These notifications allow the embedding application to display context menus based on user activity within the WebBrowser (such as a right-click on a hypertext link).</p> +<p><strong>Saving Documents</strong></p> +<p><strong>Notification Interfaces which the embedding application should implement</strong></p> +<h3 id="nsFile" name="nsFile">nsFile</h3> +<h2 id="Public_Interfaces" name="Public_Interfaces">Public Interfaces</h2> +<p><strong>nsISupports</strong></p> +<p>Base Component Object Model interface. This interface provides runtime interface discovery and a reference counted memory model fashioned after the Microsoft COM IUnknown interface.</p> +<p><em>Interface status...</em> none</p> +<p><em>Interface definition:</em> nsISupportsUtils.h</p> +<p><br> + <strong>nsIInterfaceRequestor</strong></p> +<p>This Interface provides an interface discovery mechanism which does not imply aggregation. <em>Interface status...</em> none</p> +<p><em>Interface definition:</em> nsIInterfaceRequestor.idl</p> +<p><strong>nsIWeakReference</strong></p> +<p>This interface is used to retern a proxy reference to a component.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIWeakReference">being reviewed</a></p> +<p><em>Interface definition:</em> nsIWeakReference.idl</p> +<p><strong>nsISimpleEmunerator</strong></p> +<p>This interface provides a simple enumeration abstraction.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsISimpleEmunerator">being reviewed</a></p> +<p><em>Interface definition:</em> nsISimpleEnumerator.idl</p> +<p><strong>nsIServiceManager</strong></p> +<p>This interface allows access to global services within mozilla.</p> +<p><em>Interface status...</em> none</p> +<p><em>Interface definition:</em> nsIServiceManager.h</p> +<p><br> + <strong>nsIShutdownListener</strong></p> +<p>This interface is used to receive notifications when the Service Manager is being shutdown.</p> +<p><em>Interface status...</em> none</p> +<p><em>Interface definition:</em> nsIServiceManager.h</p> +<p><br> + <strong>nsIComponentManager</strong></p> +<p>This interface allows new instances of registered XPCOM components to be instantiated.</p> +<p><em>Interface status...</em> none</p> +<p><em>Interface definition:</em> nsIComponentManager.idl</p> +<p><br> + <strong>nsIFactory</strong></p> +<p>This interface is used by the Component Manager to create new instances of a particular XPCOM component. Each component must provide a factory implementation for creating new instances.</p> +<p><em>Interface status...</em> none</p> +<p><em>Interface definition:</em> nsIFactory.idl</p> +<p><br> + <strong>nsIMemory</strong></p> +<p>This interface provides access to the global memory management functionality.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIMemory">being reviewed</a></p> +<p><em>Interface definition:</em> nsIMemory.idl</p> +<p><br> + <strong>nsIDOMWindow</strong></p> +<p>This interface is used to represent the window containing a specific document.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIDOMWindow">being reviewed</a></p> +<p><em>Interface definition:</em> nsIDOMWindow.idl</p> +<p><br> + <strong>nsIBaseWindow</strong></p> +<p>This interface provides access to various window operations.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIBaseWindow">being reviewed</a></p> +<p><em>Interface definition:</em> nsIBaseWindow.idl</p> +<p><br> + <strong>nsIRequest</strong></p> +<p>This interface provides a means to control various operations.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIRequest">being reviewed</a></p> +<p><em>Interface definition:</em> nsIRequest.idl</p> +<p><br> + <strong>nsIWebBrowser</strong></p> +<p>This is the primary interface to the WebBrowser component.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIWebBrowser">being reviewed</a></p> +<p><em>Interface definition:</em> nsIWebBrowser.idl</p> +<p><br> + <strong>nsIWebBrowserSetup</strong></p> +<p>This interface is used to enable or disable various capabilities of a nsWebBrowser instance.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIWebBrowserSetup">being reviewed</a></p> +<p><em>Interface definition:</em> nsIWebBrowserSetup.idl</p> +<p><br> + <strong>nsIWebBrowserChrome</strong></p> +<p>This interface provides access to the window containing an nsWebBrowser instance.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIWebBrowserChrome">being reviewed</a></p> +<p><em>Interface definition:</em> nsIWebBrowserChrome.idl</p> +<p><br> + <strong>nsIWebNavigation</strong></p> +<p>This interface exposes the web navigation functionality of the nsWebBrowser component.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIWebNavigation">being reviewed</a></p> +<p><em>Interface definition:</em> nsIWebNavigation.idl</p> +<p><br> + <strong>nsIWebBrowserPersist</strong></p> +<p>This interface exposes the save-as functionality of the nsWebBrowser component.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIWebBrowserPersist">being reviewed</a></p> +<p><em>Interface definition:</em> nsIWebBrowserPersist.idl</p> +<p><br> + <strong>nsIWebBrowserPrint</strong></p> +<p>This interface allows printing of individual (or a collection of) DOM Windows within a nsWebBrowser component.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIWebBrowserPrint">being reviewed</a></p> +<p><em>Interface definition:</em> nsIWebBrowserPrint.idl</p> +<p><br> + <strong>nsIWebBrowserFind</strong></p> +<p>This interface exposes the searching capabilities of the nsWebBrowser component.</p> +<p><em>Interface status...</em> none</p> +<p><em>Interface definition:</em> nsIWebBrowserFind.idl</p> +<p><br> + <strong>nsIWebBrowserFocus</strong></p> +<p>This interface provides access to the focus information of a nsWebBrowser instance.</p> +<p><em>Interface status...</em> <a class="external" href="http://www.mozilla.org/projects/embedding/apiReviewNotes.html#nsIWebBrowserFocus">being reviewed</a></p> +<p><em>Interface definition:</em> nsIWebBrowserFocus.idl</p> +<p><br> + <strong>nsIWebProgress</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>nsIWebProgressListener</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>nsIPrompt</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>nsIPrefs</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>{{ interface("nsIProfile") }}</strong></p> +<p>The Profile Manager creates and manages user profiles; each profile is essentially a complete configuration of the application, including preferences, installed extensions, and so forth.</p> +<p><br> + <strong>nsIDirectoryServiceProvider</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>nsILocalFile</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>nsIFile</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>nsIClipboardCommands</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>nsISelection</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>nsIURILoader</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p><br> + <strong>nsIURIContentListener</strong></p> +<p><em>Interface status...</em></p> +<p><em>Interface definition:</em></p> +<p> </p> +<h2 id="Defining_New_XPCOM_Components" name="Defining_New_XPCOM_Components">Defining New XPCOM Components</h2> +<div class="originaldocinfo"> + <h2 id="Original_Document_Information" name="Original_Document_Information">Original Document Information</h2> + <ul> + <li>Author(s): rpotts, alecf, oeschger at netscape.com</li> + <li>Last Updated Date: March 5, 2003</li> + <li>Copyright Information: Creative Commons</li> + </ul> +</div> +<p> </p> diff --git a/files/fr/mozilla/gecko/mozilla_embarqué/faq_de_mozilla_embarqué/embarquer_gecko/index.html b/files/fr/mozilla/gecko/mozilla_embarqué/faq_de_mozilla_embarqué/embarquer_gecko/index.html new file mode 100644 index 0000000000..e35036fbf4 --- /dev/null +++ b/files/fr/mozilla/gecko/mozilla_embarqué/faq_de_mozilla_embarqué/embarquer_gecko/index.html @@ -0,0 +1,133 @@ +--- +title: Embarquer Gecko +slug: Mozilla/Gecko/Mozilla_embarqué/FAQ_de_Mozilla_embarqué/Embarquer_Gecko +tags: + - FAQ_de_Mozilla_embarqué +translation_of: Mozilla/Gecko/Embedding_Mozilla/FAQ/Embedding_Gecko +--- +<div class="blockIndicator obsolete obsoleteHeader"><p><strong><span class="icon-only-inline" title="This is an obsolete API and is no longer guaranteed to work."><i class="icon-trash"> </i></span> Obsolète</strong><br>Cette fonctionnalité est obsolète. Bien qu'encore supportée par des navigateurs, son utilisation est découragée pour tout nouveau projet. Évitez de l'utiliser.</p></div> + +<div class="warning">Embedding of Gecko is no longer supported. If you currently embed Gecko, you should use an alternate solution, because you will not be able to pick up new security improvements. <strong>Do not use the techniques covered on this page; this material is retained for historical purposes only.</strong></div> + +<h2 id="Section_2__Embarquer_Gecko" name="Section_2_:_Embarquer_Gecko">Section 2 : Embarquer Gecko</h2> + +<h3 id="De_quels_fichiers_ai-je_besoin_pour_embarquer_.3F" name="De_quels_fichiers_ai-je_besoin_pour_embarquer_.3F">De quels fichiers ai-je besoin pour embarquer ?</h3> + +<p>Actuellement, vous devez télécharger et compiler toute l'arborescence des sources du navigateur Mozilla puis choisir les fichiers binaires que vous souhaitez embarquer dans votre application.<br> + Les<em>nightly builds</em> sont créées automatiquement depuis les manifests donc vous pouvez commencer à chercher de ce coté.</p> + +<p>Comment puis-je compiler les sources à embarquer ?</p> + +<p>Premièrement <a href="fr/Documentation_sur_la_compilation">compilez Mozilla</a>, puis saisissez :</p> + +<pre class="eval">cd mozilla/embedding/config +make +</pre> + +<p>Note : Si vous utilisez un <code>objdir</code>, placez-vous plutôt dans le répertoire <code>mozilla/<objdir>/embedding/config</code> puis lancez la compilation avec <code>make</code>.</p> + +<p>Un répertoire appelé <code>mozilla/dist/Embed</code> est créé, il contient les fichiers spécifiés par les manifests par défaut et chrome. Vous pouvez tester les compilations par défaut en exécutant les applications de test TestGtkEmbed sous Unix ou MFCEmbed sous Win32. Pour exécuter TestGtlEmbed sous Unix saisissez :</p> + +<pre class="eval">cd mozilla/dist/Embed +./run-mozilla.sh ./TestGtkEmbed +</pre> + +<h3 id="Comment_est_faite_la_distribution_embarqu.C3.A9e_.3F" name="Comment_est_faite_la_distribution_embarqu.C3.A9e_.3F">Comment est faite la distribution embarquée ?</h3> + +<p>Look in <code><a href="https://dxr.mozilla.org/mozilla-central/source/embedding/config/" rel="custom">embedding/config/</a></code> to see a the embedding build process. The basebrowser-win (or basebrowser-unix etc.) file determines which files need to be copied. The embed-jar.mn specifies what chrome is required.</p> + +<p>Note that this sample only contains a<em>typical</em> subset of files. You may wish to add or remove files from basebrowser-foo (where foo is win, unix or mach as appropriate) depending on the capabilities you need in your product, or supplement these files by writing your own client-foo file which will be read in addition to basebrowser-foo.</p> + +<p>For instance, you can remove the "necko2" library if you do not need FTP, but you will need to add the "appcomps" and "mork" libraries in order to use the Mozilla browser's global history implementation.</p> + +<p>The embedding distribution <a href="https://dxr.mozilla.org/mozilla-central/source/embedding/config/readme.html" rel="custom">readme file</a> provides more information.</p> + +<p><small>Todo: provide a more complete map of features <-> files</small></p> + +<h3 id="Pourquoi_ai-je_besoin_de_distribuer_des_fichiers_XPT_avec_mon_application_.3F" name="Pourquoi_ai-je_besoin_de_distribuer_des_fichiers_XPT_avec_mon_application_.3F">Pourquoi ai-je besoin de distribuer des fichiers XPT avec mon application ?</h3> + +<p>XPT files are XPCOM type libraries and contain binary definitions of interfaces used by cross-thread marshalling routines and JavaScript to call objects. In other words they are as vital as DLLs to ensure Gecko functions properly.</p> + +<p>XPT files can be concatenated together using the xpt_link tool to reduce clutter and improve startup performance. There is a special perl script for this purpose, that you can see <a href="https://dxr.mozilla.org/mozilla-central/source/xpinstall/packager/xptlink.pl" rel="custom">here</a>.</p> + +<h3 id="Comment_me_pr.C3.A9munir_des_changements_de_Gecko_.3F" name="Comment_me_pr.C3.A9munir_des_changements_de_Gecko_.3F">Comment me prémunir des changements de Gecko ?</h3> + +<p>If you want to be protected against changes in the Gecko, you should only use interfaces and API that are clearly marked FROZEN in their idl description. This query will find most of the frozen interfaces: <a href="http://mxr.mozilla.org/mozilla-central/search?string=us+FROZEN">Frozen Interface and APIs</a>. Interfaces are being reviewed and frozen all the time and cover most things embedders will want to do.</p> + +<p>You can still use unfrozen interfaces (hey it's open source and we can't stop you!) and even reach into the guts of the code but you do so at your own risk. Subsequent releases of Mozilla may well change these interfaces and your source and binary will break as a result.</p> + +<p>See the <a class="external" href="http://www.mozilla.org/projects/embedding/embedapiref/embedapiTOC.html">Embedding API Reference</a> for more information</p> + +<h3 id="Cela_veut-il_dire_que_mon_application_fonctionnera_avec_toutes_les_futures_versions_de_GRE.2FGecko.2FMozilla_.3F" name="Cela_veut-il_dire_que_mon_application_fonctionnera_avec_toutes_les_futures_versions_de_GRE.2FGecko.2FMozilla_.3F">Cela veut-il dire que mon application fonctionnera avec toutes les futures versions de GRE/Gecko/Mozilla ?</h3> + +<p>As long as you use frozen interfaces, the answer is: "Almost." Unfortunately vtable layout can vary from compiler to compiler. This mostly affects Linux compilers such as gcc which have changed their vtable layout more than once in the past few years. See the document on <a class="external" href="http://www.mozilla.org/projects/xpcom/binary-compatibility.html">binary compatibility</a>. <span class="comment">when ported too, this should be an internal link</span></p> + +<h3 id="Quelles_plate-formes_sont_support.C3.A9es_.3F" name="Quelles_plate-formes_sont_support.C3.A9es_.3F">Quelles plate-formes sont supportées ?</h3> + +<p>Short answer is anything Mozilla can run on, then Gecko can too. However, the embedding is concentrating on three primary platforms:</p> + +<ul> + <li>Windows (95? definitely 98 and later)</li> + <li>Linux (and probably most other X-windows based *nix variants)</li> + <li>Macintosh OS X. MacOS 8.6 and 9 support is now deprecated to the ports section of the Mozilla project and are not being actively worked on.</li> +</ul> + +<h3 id="L.27embarquement_supporte-t-il_des_protocoles_s.C3.A9curis.C3.A9s_comme_HTTPS_.3F" name="L.27embarquement_supporte-t-il_des_protocoles_s.C3.A9curis.C3.A9s_comme_HTTPS_.3F">L'embarquement supporte-t-il des protocoles sécurisés comme HTTPS ?</h3> + +<p>Yes, psm is supported in embedding.</p> + +<h3 id="Comment_mes_applications_communiquent-elles_avec_Gecko_.3F" name="Comment_mes_applications_communiquent-elles_avec_Gecko_.3F">Comment mes applications communiquent-elles avec Gecko ?</h3> + +<p>The Embedding API provides a set of interfaces and to control the embedded application, and another set of interfaces that the containing application must implement in order to receive asynchronous notifications from the embedded browser.</p> + +<p><small>Todo: insert jud's picture here?</small></p> + +<h3 id="Puis-je_embarquer_sans..." name="Puis-je_embarquer_sans...">Puis-je embarquer sans...</h3> + +<p>(Some of the more common questions)</p> + +<ul> + <li>FTP support? Yes.</li> + <li>HTTPS support? Yes.</li> + <li>Network support? No, maybe someday</li> + <li>XUL support? No, but someday yes.</li> + <li>JavaScript support? No, maybe someday.</li> + <li>CSS support? No, never.</li> + <li>DOM support? No, probably never.</li> + <li>XML support? No, probably never.</li> + <li>International Characters Sets? Yes.</li> + <li>Java support? Yes.</li> +</ul> + +<h3 id="Puis-je_embarquer_l.27.C3.A9diteur_HTML_de_Mozilla_.3F" name="Puis-je_embarquer_l.27.C3.A9diteur_HTML_de_Mozilla_.3F">Puis-je embarquer l'éditeur HTML de Mozilla ?</h3> + +<p>Sort of. The latest word is that you can embed an editor in a native app, and do command handling and updating via the command handling APIs. There is some lacking functionality (e.g. controlling editor types, inserting and extracting HTML). In addition, the command handling APIs are soon going to change, when Mike Judge lands a long-standing patch (which missed the 1.0 change, and bas been delayed way too long).</p> + +<p>Documentation is lacking, mostly because of pending API changes. Check out the <a class="external" href="http://www.mozilla.org/editor/editor-embedding.html">Embedding Editor</a> page for more info.</p> + +<h3 id="Quel_toolkit_de_widget_peut_utiliser_Mozilla_.3F" name="Quel_toolkit_de_widget_peut_utiliser_Mozilla_.3F">Quel toolkit de widget peut utiliser Mozilla ?</h3> + +<p>Mozilla makes its own cross-platform widgets for HTML forms, and does not use a 3rd-party cross platform toolkit, nor the native widgets that a platform provides. The widgets are drawn using GFX, Mozilla's abstraction of a drawing toolkit. They are styled with CSS, including minor per-platform tweaks to allow them to look like the native platform's native widgets. This allows full CSS and DOM support of all HTML widgets across all platforms, without requiring each platform to separately support every part of CSS and DOM.</p> + +<p>There have been a number of requests for native widget support but at this time there are no plans to support a second widget set beyond the cross-platform widgets.</p> + +<p>In the future, widgets may be defined with XBL.</p> + +<h3 id="Mozilla_embarqu.C3.A9_supporte-t-il_Java_.3F" name="Mozilla_embarqu.C3.A9_supporte-t-il_Java_.3F">Mozilla embarqué supporte-t-il Java ?</h3> + +<p>We provide Java support through the OJI plugin API. The Java plugin from Sun takes ~7Mb of disk space (Linux). If you want Java support you should edit the basebrowser-win / basebrowser-unix etc. file and uncomment the OJI section or copy those files manually after an embedding dist has been created.</p> + +<h3 id="Puis-je_embarquer_Mozilla_dans_n.27importe_quel_autre_cas_.3F" name="Puis-je_embarquer_Mozilla_dans_n.27importe_quel_autre_cas_.3F">Puis-je embarquer Mozilla dans n'importe quel autre cas ?</h3> + +<p>Aside from programming direct to the embedding API you may also embed Mozilla:</p> + +<ul> + <li>In GTK applications using the <a class="external" href="http://www.mozilla.org/unix/gtk-embedding.html">Gtk Mozilla Embedding Widget</a>.</li> + <li>In Win32 ActiveX applications using the <a class="external" href="http://www.iol.ie/%7Elocka/mozilla/mozilla.htm">Mozilla ActiveX Control</a>.</li> + <li>In Mac applications using <a href="https://dxr.mozilla.org/mozilla-central/source/embedding/browser/powerplant/" rel="custom">PPEmbed</a>.</li> + <li>In a Java Application using <a class="external" href="http://www.mozilla.org/projects/blackwood/webclient/">Webclient</a>.</li> +</ul> + +<p><span class="comment">Interwiki Language Links</span></p> + +<div class="noinclude"> </div> diff --git a/files/fr/mozilla/gecko/mozilla_embarqué/faq_de_mozilla_embarqué/introduction_à_gecko_et_à_l'embarqué/index.html b/files/fr/mozilla/gecko/mozilla_embarqué/faq_de_mozilla_embarqué/introduction_à_gecko_et_à_l'embarqué/index.html new file mode 100644 index 0000000000..1836cab0bb --- /dev/null +++ b/files/fr/mozilla/gecko/mozilla_embarqué/faq_de_mozilla_embarqué/introduction_à_gecko_et_à_l'embarqué/index.html @@ -0,0 +1,53 @@ +--- +title: Introduction à Gecko et à l'embarqué +slug: >- + Mozilla/Gecko/Mozilla_embarqué/FAQ_de_Mozilla_embarqué/Introduction_à_Gecko_et_à_l'embarqué +tags: + - FAQ_de_Mozilla_embarqué +translation_of: Mozilla/Gecko/Embedding_Mozilla/FAQ/How_do_I... +--- +<p> </p> +<h2 id="Introduction_.C3.A0_Gecko_et_.C3.A0_l.27embarquement" name="Introduction_.C3.A0_Gecko_et_.C3.A0_l.27embarquement">Introduction à Gecko et à l'embarquement</h2> +<h3 id="Qu.27est-ce_que_Gecko_.3F" name="Qu.27est-ce_que_Gecko_.3F">Qu'est-ce que Gecko ?</h3> +<p>Gecko est le moteur interne du navigateur, ce qui inclut networking, un parser, un modèle de contenu, chrome et les autres technologies sur lesquelles Mozilla et les autres applications sont basées. En d'autres termes, tout ce qui n'est pas spécifique à une application.</p> +<p>La FAQ de Gecko est légèrement obsolète <a class="external" href="http://www.mozilla.org/newlayout/faq.html">FAQ</a>.</p> +<h3 id="Qu.27est-ce_que_Mozilla_.3F" name="Qu.27est-ce_que_Mozilla_.3F">Qu'est-ce que Mozilla ?</h3> +<p>Mozilla est un navigateur web open-source multi plates-formes, un éditeur et une application de messagerie / newsgroup créé sur Gecko.</p> +<h3 id="Qu.27est-ce_que_le_GRE_.3F" name="Qu.27est-ce_que_le_GRE_.3F">Qu'est-ce que le GRE ?</h3> +<p>Le GRE (formellement le MRE) qui est l'acronime de <a href="fr/GRE">Gecko Runtime Environment</a>, est un support d'exécution partagé que toutes les applications peuvent utiliser. Il est maintenant développé comme un projet indépendant connu sous le nom de <a href="fr/XULRunner">XULRunner</a>.</p> +<h3 id="Qu.27est-ce_que_XPCOM_.3F" name="Qu.27est-ce_que_XPCOM_.3F">Qu'est-ce que XPCOM ?</h3> +<p>XPCOM est un + <i> + modèle objet de composants</i> + (semblable à COM/DCOM de MS Windows mais conçut pour être portable sur plusieurs plates-formes) utilisé pour unifier la création, le contrôle, et la suppression d'objets et d'autres données à travers Mozilla. Le coeur de XPCOM est l'interface + <i> + nsISupports</i> + , qui offre des services de comptage des références et d'introspection (possibilité d'interroger les objets afin de se renseigner sur leurs capacités). Tout les objets XPCOM implémentent l'interface + <i> + nsISupports</i> + , en plus de toutes les interfaces spécifiques qui lui sont nécessaire. En fin de compte, XPCOM fournit une couche de services indépendante du language appelé + <i> + XPConnect</i> + qui permet l'implémentation d'objets dans tout language supporté. Grâce à + <i> + XPConnect</i> + , ces objets peuvent aussi être appelés à partir de n'importe lequel de ces languages.</p> +<p>On peut trouver plus d'informations <a class="external" href="http://www.mozilla.org/projects/xpcom/">ici</a>.</p> +<h3 id="Que_signifie_embarquer_Gecko_.3F" name="Que_signifie_embarquer_Gecko_.3F">Que signifie embarquer Gecko ?</h3> +<p>Gecko autorise des developpeurs tiers à utiliser la même technologie que Mozilla. Cela signifie que vous pouvez tirer partie, dans une application tierce, des services d'un navigateur web, ouvrir des canaux de communications et faire transiter des flux de données à travers le service réseau, le + <i> + Modèle Objet de Document</i> + (NdT: en anglais DOM, + <i> + Document Object Model</i> + ) et plus encore. Vous pouvez même bâtir entièrement une nouvelle application en utilisant Gecko.</p> +<h3 id="Quels_sont_les_termes_de_licence_pour_embarquer_Gecko_.3F" name="Quels_sont_les_termes_de_licence_pour_embarquer_Gecko_.3F">Quels sont les termes de licence pour embarquer Gecko ?</h3> +<p>Les mêmes que pour le reste de Mozilla. Voir la <a class="external" href="http://www.mozilla.org/MPL/">page du MPL</a> pour plus d'informations.</p> +<h3 id="Existe-t.27il_un_SDK_.3F" name="Existe-t.27il_un_SDK_.3F">Existe-t'il un SDK ?</h3> +<p>Nous travaillons lentement sur une SDK, gelant et documentant les interfaces et retouchant le processus de construction. Pour le moment nous vous recommandons de <a class="external" href="http://developer.mozilla.org/fr/docs/T%C3%A9l%C3%A9chargement_du_code_source_de_Mozilla">télécharger le code source</a> puis de le <a class="external" href="http://developer.mozilla.org/fr/docs/Documentation_sur_la_compilation">compiler</a>.</p> +<p>Des compilations nocturnes du SDK pour la plateforme Windows 32bits peuvent être disponibles <a class="link-ftp" href="ftp://ftp.mozilla.org/pub/mozilla.org/mozilla/nightly/latest-trunk/gecko-sdk-i586-pc-msvc.zip">ici</a>.</p> +<h3 id="Quelle_est_la_derni.C3.A8re_version_.3F_Quelle_version_utiliser_.3F" name="Quelle_est_la_derni.C3.A8re_version_.3F_Quelle_version_utiliser_.3F">Quelle est la dernière version ? Quelle version utiliser ?</h3> +<p>Les compilations embarquées et les source tarballs sont produites la nuit et peuvent être obtenues <a class="link-ftp" href="ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/">ici</a>. Si vous privilégiez la stabilité, les compilations de la branche 1.7.x de Mozilla sont vivement recommendées.</p> +<h3 id="Qui_utilise_d.C3.A9j.C3.A0_gecko_.3F" name="Qui_utilise_d.C3.A9j.C3.A0_gecko_.3F">Qui utilise déjà gecko ?</h3> +<p>Voir <a class="external" href="http://www.mozilla.org/projects/embedding/examples/">ici</a> la liste des logiciels embarquant Gecko.</p> +<p><span class="comment">Interwiki Language Links</span></p> diff --git a/files/fr/mozilla/gecko/mozilla_embarqué/index.html b/files/fr/mozilla/gecko/mozilla_embarqué/index.html new file mode 100644 index 0000000000..b8a2b5bb4c --- /dev/null +++ b/files/fr/mozilla/gecko/mozilla_embarqué/index.html @@ -0,0 +1,59 @@ +--- +title: Mozilla embarqué +slug: Mozilla/Gecko/Mozilla_embarqué +tags: + - Mozilla_embarqué +translation_of: Mozilla/Gecko/Embedding_Mozilla +--- +<div> +<p><a href="/fr/Gecko" title="fr/Gecko">Gecko</a> permet aux développeurs d'applications tierces de pouvoir bénéficier de la même technologie que celle présente dans Mozilla. Il est possible d'intégrer un navigateur Web à l'intérieur d'une autre application, d'ouvrir des canaux et de parcourir des flux de données à travers le réseau, de manipuler le <a href="/fr/DOM" title="fr/DOM">DOM</a> et ainsi de suite. Des applications entières peuvent être crées en s'appuyant sur Gecko.</p> +</div> + +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h2 class="Documentation" id="Documentation"><a href="/Special:Tags?tag=Mozilla_embarqué&language=fr" title="Special:Tags?tag=Mozilla_embarqué&language=fr">Documentation</a></h2> + + <dl> + <dt><a href="/fr/docs/FAQ_de_Mozilla_embarqué" title="fr/FAQ_de_Mozilla_embarqué">FAQ de Mozilla embarqué</a></dt> + <dd><small>Une Foire Aux Questions très complète concernant Mozilla embarqué.</small></dd> + </dl> + + <dl> + <dt><a href="/fr/docs/Gecko/Gecko_Embedding_Basics" title="fr/Les_bases_de_Gecko_embarqué">Les bases de Gecko embarqué</a></dt> + <dd><small>Une introduction à l'incorporation du moteur de rendu Gecko dans une application (à traduire de <a href="/en/Gecko_Embedding_Basics">en:Gecko Embedding Basics</a>).</small></dd> + </dl> + + <dl> + <dt><a href="/fr/docs/Intégration_de_l'éditeur" title="fr/Intégration_de_l'éditeur">Intégration de l'éditeur</a></dt> + <dd><small>Ce document détaille la situation actuelle de l'éditeur dans ce domaine, les problèmes dans l'implémentation existante, certains scénarios possibles d'intégration de l'éditeur qui doivent être pris en compte, et une solution embarquée qui les intègrera</small>.</dd> + </dl> + + <dl> + <dt><a href="https://developer.mozilla.org/fr/docs/Gecko/Mozilla_embarqué/Roll_your_own_browser" title="fr/Construisez_votre_propre_navigateur_-_Comment_embarquer_Mozilla">Construisez votre propre navigateur - Comment embarquer Mozilla</a></dt> + <dd><small>Une introduction rapide à Mozilla embarqué (à traduire de <a href="/en/Roll_your_own_browser_-_An_embedding_HowTo">en:Roll your own browser - An embedding HowTo</a>.</small></dd> + </dl> + + <p><span class="alllinks"><a href="/Special:Tags?tag=Mozilla_embarqué&language=fr" title="Special:Tags?tag=Mozilla_embarqué&language=fr">Tous les articles…</a></span></p> + </td> + <td> + <h2 class="Community" id="Communauté">Communauté</h2> + + <ul> + <li>Voir les forums de Mozilla…</li> + </ul> + + <p>{{ DiscussionList("dev-embedding", "mozilla.dev.embedding") }}</p> + + <h2 class="Related_Topics" id="Sujets_liés">Sujets liés</h2> + + <dl> + <dd><a href="/fr/Gecko" title="fr/Gecko">Gecko</a>, <a href="/fr/XPCOM" title="fr/XPCOM">XPCOM</a></dd> + </dl> + </td> + </tr> + </tbody> +</table> + +<p> </p> diff --git a/files/fr/mozilla/gecko/mozilla_embarqué/intégration_éditeur/index.html b/files/fr/mozilla/gecko/mozilla_embarqué/intégration_éditeur/index.html new file mode 100644 index 0000000000..4e6e8c8281 --- /dev/null +++ b/files/fr/mozilla/gecko/mozilla_embarqué/intégration_éditeur/index.html @@ -0,0 +1,133 @@ +--- +title: Intégration de l'éditeur +slug: Mozilla/Gecko/Mozilla_embarqué/Intégration_éditeur +tags: + - Midas + - Mozilla_embarqué +translation_of: Mozilla/Gecko/Embedding_Mozilla/Embedding_the_editor +--- +<h3 id="Introduction" name="Introduction">Introduction</h3> + +<p>Ce document présente les possibilités actuelles d'intégration d'un éditeur, les problèmes causés par l'intégration existante, quelques scénarios d'intégration possibles pour s'en sortir, et une solution d'intégration pour les réaliser. Pour finir, la solution retenue sera décrite étape par étape.</p> + +<h3 id="Mises_en_.C5.93uvre_possibles_de_l.27int.C3.A9gration" name="Mises_en_.C5.93uvre_possibles_de_l.27int.C3.A9gration">Mises en œuvre possibles de l'intégration</h3> + +<p>Ici sont décrits des scénarios d'intégration nécessaires pour faire fonctionner un éditeur. Notez que j'utilise le terme de « Compositeur » pour désigner une interface de composition au format HTML qui fait de l'édition de texte enrichi et « Éditeur » pour un éditeur en texte brut (aussi bien que pour la technologie sous-jacente du compositeur). <code><htmlarea></code> est vu comme une formule pour désigner un objet texte contenant du texte enrichi, cela ne veut pas dire pour autant que cette balise sera supportée dans les versions suivantes de Mozilla.</p> + +<h4 id="Compositeur_int.C3.A9gr.C3.A9_dans_une_application_XUL" name="Compositeur_int.C3.A9gr.C3.A9_dans_une_application_XUL">Compositeur intégré dans une application XUL</h4> + +<p>Les développeurs ont besoin d'intégrer des compositeurs dans leurs applications XUL en utilisant la balise <code><editor></code>, comme cela se fait aujourd'hui. Ils devraient avoir le moins possible de travail à faire pour obtenir les fonctions basiques d'édition, avoir autant d'<code><editor></code>s par fenêtre qu'ils le souhaitent et pouvoir contrôler si ces <code><editor></code>s sont en mode HTML ou en mode texte.</p> + +<h4 id="Compositeur_int.C3.A9gr.C3.A9_dans_une_application_native" name="Compositeur_int.C3.A9gr.C3.A9_dans_une_application_native">Compositeur intégré dans une application native</h4> + +<p>Dans ce cas de figure, l'<code><iframe></code> dans laquelle fonctionne l'éditeur est directement intégrée dans l'application native. Cela revient à intégrer un navigateur via nsIWebBrowser, mais en obtenant, à la place, un document éditable. L'interface du compositeur (barres d'outils, etc.) doit être implémentée à partir des éléments d'interface graphique présents dans le conteneur ou en utilisant du XUL. Cette interface doit être configurable, avec notamment des barres d'outils flottantes déplaçables (dockable ?), une même barre d'outils pour plusieurs objets compositeur, ou une pour chaque.</p> + +<p>Ce type d'intégration requiert que le code du compositeur fonctionne quelle que soit l'interface utilisateur (IU). La communication entre le noyau de l'éditeur et l'interface utilisateur doit pouvoir passer par une ou plusieurs interfaces qui isolent l'éditeur de l'application hôte. (L'<code>nsEditorShell</code> existant fait des suppositions sur l'hébergement de document XUL, qui doivent être contredites.)</p> + +<h4 id="Compositeur_int.C3.A9gr.C3.A9_dans_une_page_web_.28.3Chtmlarea.3E.29" name="Compositeur_int.C3.A9gr.C3.A9_dans_une_page_web_.28.3Chtmlarea.3E.29">Compositeur intégré dans une page web (<code><htmlarea></code>)</h4> + +<p>IE 5 supporte l'<a class="external" href="http://www.siteexperts.com/ie5/htmlarea/page1.asp">élément <code><HTMLArea></code></a> ; si Mozilla travaille à supporter quelque chose de similaire, l'éditeur devra être intégrable dans la mesure du possible. Il est probable qu'on utilise <a class="external" href="http://www.mozilla.org/projects/xbl/xbl.html">XBL</a> pour implémenter ce type d'objet, comme c'est prévu pour d'autres types de contrôles.</p> + +<p>Dans le cas de l'intégration du compositeur dans une application native, il est donc ici nécessaire de rendre l'interface utilisateur configurable, de façon que l'on puisse aussi bien l'afficher comme une barre d'outils au dessus de <code><htmlarea></code>, comme une fenêtre flottante, ou comme une barre d'outil de haut-niveau (top-level).</p> + +<h3 id="Probl.C3.A8mes_connus" name="Probl.C3.A8mes_connus">Problèmes connus</h3> + +<p>L'architecture du compositeur existant a été créée alors que d'autres parties de Mozilla étaient encore en cours de développement. Il en résulte de nombreux points faibles et anachronismes. Cette section décrit ses défauts majeurs.</p> + +<h4 id="Probl.C3.A8me_d.27appartenance_de_l.27.C3.A9diteur" name="Probl.C3.A8me_d.27appartenance_de_l.27.C3.A9diteur">Problème d'appartenance de l'éditeur</h4> + +<p>L'éditeur d'une fenêtre compositrice appartient au <code><a class="external" href="http://lxr.mozilla.org/seamonkey/source/editor/base/nsEditorShell.cpp">nsEditorShell</a></code>, qui à son tour est créé, dirigé et détruit par <code><a class="external" href="http://lxr.mozilla.org/seamonkey/source/layout/xul/base/src/nsEditorBoxObject.cpp">nsEditorBoxObject</a></code>. L'objet box est une structure de présentation qui appartient aux noeuds de contenu et survit à la destruction/reconstitution de la frame. L'objet box a également une référence vers le docShell de la frame éditrice. XBL créé un <code>nsEditorBoxObject</code> pour chaque balise <code><editor></code>, et permet à Javascript d'accéder aux propriétés de cet objet box (tel que le <code>nsIEditorShell</code>). La balise <code><editor></code> est tout simplement une <code><iframe></code> dans laquelle l'éditeur est créé. Dans les autres aspects, il se comporte comme une <code><iframe></code> XUL.</p> + +<p>Le problème avec ce modèle d'appartenance est qu'il ne peut y avoir qu'un éditeur par balise <code><editor></code>, alors que le document chargé dans l'<code><iframe></code> peut très bien contenir de multiples <code><iframe></code>s (dans le cas d'un document frameset ou dans un document contenant lui-même un <code><html:iframe></code>). Aujourd'hui, le compositeur ne fonctionne pas très bien avec ce types de document.</p> + +<h4 id="Limitation_d.27un_.C3.A9diteur_par_fen.C3.AAtre" name="Limitation_d.27un_.C3.A9diteur_par_fen.C3.AAtre">Limitation d'un éditeur par fenêtre</h4> + +<p>Le compositeur construit sur une architecture XUL/C++ s'est développé sur le présupposé qu'une seule balise <code><editor></code> par fenêtre suffirait. Lors de la construction de la fenêtre, nous prenons l'editorShell de l'élément <code><editor></code> <a class="external" href="http://lxr.mozilla.org/seamonkey/source/editor/ui/composer/content/editor.js#169">que l'on met dans <code>window.editorShell</code></a>. A partir de là, beaucoup de Javascript dans editor.js, ComposerCommands.js et les différents fichiés JS de dialogue s'assurent de pouvoir atteindre le seul bon éditeur via <code>window.editorShell</code>. Ce présupposé manquait de clairevoyance et doit être corrigé.</p> + +<h4 id="L.27.C3.A9diteur_suppose_une_structure_de_document_XUL" name="L.27.C3.A9diteur_suppose_une_structure_de_document_XUL">L'éditeur suppose une structure de document XUL</h4> + +<p>Du code C++ et JS présent dans l'éditeur suppose que celui-ci se trouve dans un document XUL et qu'il y ait des nœuds du document XUL en dehors, dont les attributs peuvent être récupérés pour changer l'état de l'interface utilisateur (par exemple le style des boutons). Cela doit être changé pour permettre aux conteneurs d'utiliser leurs propres apparences, probablement natives. L'éditeur doit pouvoir faire des appels à travers une ou plusieurs interfaces quand il communique avec l'interface utilisateur.</p> + +<h3 id="Objectifs_de_l.27int.C3.A9gration" name="Objectifs_de_l.27int.C3.A9gration">Objectifs de l'intégration</h3> + +<p>L'éditeur requiert des changements de conception de façon à ce que les applications intégrées soient fonctionnelles. Ces changements doivent nécessairement prendre en compte les problèmes existants. Brièvement, les objectifs de l'intégration sont :</p> + +<ul> + <li><code><editor></code> devrait vous offrir un éditeur fonctionnel dans une application XUL</li> + <li>possibilité d'avoir plusieurs <code><editor></code>s par fenêtre XUL</li> + <li>possibilité d'intégrer une frame éditable dans une application native</li> + <li>Les conteneurs devraient être capables de fournir leur propre interface (barre d'outils, etc).</li> +</ul> + +<p>Atteindre ces objectifs doit également permettre de résoudre les problèmes suivants, liés au compositeur :</p> + +<ul> + <li>il doit pouvoir traiter les documents de type frameset</li> + <li>il doit pouvoir traiter les documents contenant des <code><iframe></code>s</li> + <li>il ne doit pas dépendre d'une structure de document XUL donnée</li> +</ul> + +<h3 id="Solutions_propos.C3.A9es" name="Solutions_propos.C3.A9es">Solutions proposées</h3> + +<h4 id="R.C3.A9gler_les_probl.C3.A8mes_d.27appartenance_de_l.27.C3.A9diteur" name="R.C3.A9gler_les_probl.C3.A8mes_d.27appartenance_de_l.27.C3.A9diteur">Régler les problèmes d'appartenance de l'éditeur</h4> + +<p>Comme décrit plus haut, les liens d'appartenance (racines) de l'éditeur doivent être changés de façon à ce qu'un éditeur se trouve au plus haut niveau du nsDocShell, plutôt que d'être accroché à l'objet <code>nsEditorBoxObject</code>. Il doit y avoir un docShell par <code><iframe></code> éditable. Cela implique :</p> + +<ul> + <li>Faire une nouvelle interface : <strong><code>nsIEditorFrame</code></strong> qui est exécutée par <code>nsDocShell</code> ou une classe liée. On doit pouvoir faire appel à l'une d'entres elle à partir de <code>nsIDocShell</code>, si l'appel réussit, il indique que la frame est éditable. <code>nsIEditorFrame</code> doit contenir des méthodes pour obtenir la session d'édition et faire certains traitements génériques liés à l'éditeur (probablement commun à l'édition HTML et texte brut). Une partie de <code>nsIEditorShell</code> devraient probablement passer dans cette interface. (Cela devrait être analogue à l'interface [<a class="external" href="http://lxr.mozilla.org/seamonkey/source/docshell/base/nsIWebNavigation.idl" rel="freelink">http://lxr.mozilla.org/seamonkey/sou...Navigation.idl</a> <code>nsIWebNavigation</code> utilisée par le navigateur.)</li> +</ul> + +<ul> + <li>Quand on aura un éditeur par docShell, charger un document frameset ou une page avec une iframe dans le compositeur instanciera plus d'un éditeur de bas-niveau. Nous avons besoin d'un concept de "session d'édition" - pour avoir un seul document de haut-niveau éditable qui puisse incorporer plusieurs éditeurs. Cette interface s'appellerait <strong><code>nsI????</code></strong>. L'IU de haut-niveau et le code intégré doivent communiquer avec cette interface de session d'édition sans connaitre les éditeurs sous-jacents. La session d'édition enverra les commandes aux éditeurs individuels en fonction du focus et gérera l' annuler/rétablir entre eux.</li> + <li><em>La solution alternative</em> : Plutôt que d'avoir de multiples éditeurs, dans ce scénario on pourrait avoir un seul éditeur capable d'enregistrer et de restorer un état, de sorte qu'il puisse être transmis entre les différents sous-documents édités. Cette état doit inclure le document, la pile d'actions 'annuler' et l'état de la saisie (? typing state). La mise en place de la session d'édition permettra la permutation de l'état de l'éditeur en fonction du changement de focus ect.</li> +</ul> + +<h4 id="Plus_d.27un_.C3.A9diteur_par_fen.C3.AAtre" name="Plus_d.27un_.C3.A9diteur_par_fen.C3.AAtre">Plus d'un éditeur par fenêtre</h4> + +<p>Les clients compositeurs basés sur Mozilla supposent tous qu'il n'y a qu'une balise <code><editor></code> par fenêtre. Ils ont tous besoin de fonctionner avec plusieurs éditeurs. Corriger cela nécessite des modifications JS de cette ordre :</p> + +<ul> + <li>Standardiser la façon dont les clients obtiennent l'editorShell (ou son remplacant, travail post-intégration) à partir de la fenêtre.</li> + <li>S'assurer que les changements de focus entre éditeurs mettent bien à jour la notion de session courante de la fenêtre. Si on continue à utiliser <code>window.editorShell</code>, il doit être mis à jour pour supporter les changements de focus.</li> + <li>S'assurer que chaque éditeur est correctement construit lors de la création de la fenêtre et supprimé lors de destruction de la fenêtre.</li> + <li>S'assurer que les tests de fermeture de fenêtre (par exemple appelé <code>window.tryToClose</code>) consultent convenablement l'état de chaques éditeurs.</li> +</ul> + +<h4 id="Isoler_l.27.C3.A9diteur_de_l.27interface" name="Isoler_l.27.C3.A9diteur_de_l.27interface">Isoler l'éditeur de l'interface</h4> + +<p>Le compositeur doit ne rien connaitre de l'IU qui le contrôle. Le plan est d'isoler le compositeur de l'IU via une nouvelle interface que le conteneur implémente. N'importe quel IU qui est aujourd'hui créée par le compositeur doit passer par cette interface.</p> + +<ul> + <li>Utiliser une nouvelle interface, <code>nsIEditorUserInterface</code> pour diffuser la communication entre l'éditeur et l'IU. Un conteneur pourrait avoir besoin de l'implémenter pour avoir des menus et barres d'outils natives. Dans le compositeur, on aurait une implémentation en JS qui communique avec les commandes existantes et met à jour les noeuds XUL.</li> + <li>Corriger le code JS et C++ qui s'adresse explicitement à des éléments dans le document XUL pour passer par <code>nsIEditorUserInterface</code>.</li> +</ul> + +<h3 id="Les_.C3.A9tapes_de_l.27int.C3.A9gration" name="Les_.C3.A9tapes_de_l.27int.C3.A9gration">Les étapes de l'intégration</h3> + +<p>Cette section tente de préparer un plan d'implémentation, dans le but de garder tout en état de marche étape après étape (? as the various steps are taken). Certaines de ces tâches peuvent être faite simultanément.</p> + +<ol> + <li>Décider comment implémenter <a href="#Probl.C3.A8me_d.27appartenance_de_l.27.C3.A9diteur">le support d'une session édition muti-éditeur</a></li> + <li>Éliminer <a href="#Isol.C3.A9_l.27.C3.A9diteur_de_l.27interface">les interdépendances spécifiques entre le compositeur et le document XUL</a>, via <code>nsIEditorUserInterface</code></li> + <li>Créer <a href="#Plus_d.27un_.C3.A9diteur_par_fen.C3.AAtre">un goulet d'étranglement pour communiquer avec l'éditeur qui a le focus; s'assurer que les changements de focus mettent bien à jour l'état</a></li> + <li>Faire du docShell,<a href="#R.C3.A9gler_les_probl.C3.A8mes_d.27appartenance_de_l.27.C3.A9diteur">le propriétaire de l'éditeur, créant <code>nsIEditorFrame</code></a></li> + <li>Créer l'API de la session d'édition qui s'occupera des collections d'éditeurs (ou rendre l'éditeur refocusable)</li> +</ol> + +<h3 id="Questions_ouvertes" name="Questions_ouvertes">Questions ouvertes</h3> + +<h4 id="Ou_doit_se_trouver_la_logique_d.27ouverture_et_enregistrement_de_fichier_.3F" name="Ou_doit_se_trouver_la_logique_d.27ouverture_et_enregistrement_de_fichier_.3F">Ou doit se trouver la logique d'ouverture et enregistrement de fichier ?</h4> + +<p>Il semble que certains conteneurs voudront composer leur logique d'ouverture et enregistrement de fichier, d'autres non. Ou devrait se trouver cette logique ? Peut-elle être en JavaScript ? Bien sur, un conteneur doit pouvoir utiliser ses propres boîtes de dialogue Ouvrir et Enregistrer et communiquer avec le compositeur pour coordonner le processus d'ouverture et enregistrement.</p> + +<h5 id="R.C3.A9ponse_possible" name="R.C3.A9ponse_possible">Réponse possible</h5> + +<p>Le conteneur fournit les boîtes de dialogue Ouvrir et Enregistrer s'il le veut. Dans le compositeur, on peut adopter (? pose) ces boîtes de dialogue à partir de JS (? certains problèmes liés à <code>nsIFile</code> ont été résolu - once some <code>nsIFile</code> problems have been solved).</p> + +<h4 id="Toute_l.27IU_du_compositeur_doit-elle_.C3.AAtre_rempla.C3.A7able_.3F" name="Toute_l.27IU_du_compositeur_doit-elle_.C3.AAtre_rempla.C3.A7able_.3F">Toute l'IU du compositeur doit-elle être remplaçable ?</h4> + +<p>Une immense partie de l'IU du compositeur se trouve dans les différentes boîtes de dialogue pour l'édition des tableaux, liens, images etc. Doit-on donner la possibilité à un conteneur de remplacer tout cela par une IU native ?</p> + +<h5 id="R.C3.A9ponse_possible_2" name="R.C3.A9ponse_possible_2">Réponse possible</h5> + +<p>Les boîtes de dialogue utilisent les API de l'éditeur disponible pour obtenir et affecter les données, donc elles peuvent faire tout leur travail en passant par les API existantes. Si un intégrateur veut une IU entièrement native, il aura à coder ses propres boîtes de dialogue et logiques associées, mais les API devraient toujours leurs être accessibles. Il semble que ce ne soit pas une bonne solution.</p> |