Compare Revisions

Gecko Embedding Basics

Revision 108811:

Revision 108811 by Jchlee74 on

Revision 108812:

Revision 108812 by Jeev on

Title:
Gecko Embedding Basics
Gecko Embedding Basics
Slug:
Gecko/Gecko_Embedding_Basics
Gecko/Gecko_Embedding_Basics
Tags:
"Embedding Mozilla"
"Embedding Mozilla"
Content:

Revision 108811
Revision 108812
n26      Finally, licensing Gecko is royalty-free, even if the finaln26      Finally, licensing Gecko is royalty-free, even if the final
> application is an otherwise proprietary commercial product. <i>V> application is an otherwise proprietary commercial product. <em>
>ery</i> generally, any modifications of the original Mozilla-supp>Very</em> generally, any modifications of the original Mozilla-su
>lied source code (but not the code in which it is embedded) must >pplied source code (but not the code in which it is embedded) mus
>be returned to the community, that same original code must be mad>t be returned to the community, that same original code must be m
>e available to the application's users (often by a link to the mo>ade available to the application's users (often by a link to the 
>zilla.org website), and the application must indicate in some obv>mozilla.org website), and the application must indicate in some o
>ious way (for example, a logo on the box or on the About: page) t>bvious way (for example, a logo on the box or on the About: page)
>hat the product embeds Gecko. Exact descriptions of the possible > that the product embeds Gecko. Exact descriptions of the possibl
>licensing arrangements are presented at <a class="external" href=>e licensing arrangements are presented at <a class="external" hre
>"http://www.mozilla.org/MPL/">Mozilla &amp; Netscape Public Licen>f="http://www.mozilla.org/MPL/">Mozilla &amp; Netscape Public Lic
>ses</a>, which is the only legally complete source for licensing >enses</a>, which is the only legally complete source for licensin
>information.>g information.
n38      At the moment, the best way to get the files you will need n38      At the moment, the best way to get the files you will need 
>to embed Gecko is to download and build the entire Mozilla source>to embed Gecko is to download and build the entire Mozilla source
> tree. This is actually a fairly simple process. Full instruction> tree. This is actually a fairly simple process. Full instruction
>s and appropriate links are available at <a href="en/Download_Moz>s and appropriate links are available at <a href="/en/Mozilla_Sou
>illa_Source_Code">Download Mozilla Source Code</a>. A second, com>rce_Code_(HTTP//FTP)" title="en/Mozilla_Source_Code_(HTTP//FTP)">
>ponent by component, method is under development, but is still at>Download Mozilla Source Code</a>. A second, component by componen
> a beta stage. Information on this project can be found at <a cla>t, method is under development, but is still at a beta stage. Inf
>ss="external" href="http://www.mozilla.org/projects/embedding/boo>ormation on this project can be found at <a class="external" href
>tstrap.html">REQUIRES-based build mechanism</a>. In addition, wor>="http://www.mozilla.org/projects/embedding/bootstrap.html">REQUI
>k is also being done on developing a Gecko Runtime Environment, o>RES-based build mechanism</a>. In addition, work is also being do
>r <a href="en/GRE">GRE</a>, which would support multiple applicat>ne on developing a Gecko Runtime Environment, or <a href="/en/GRE
>ions built on Mozilla components using a single set of core libra>" title="en/GRE">GRE</a>, which would support multiple applicatio
>ries. (If you intend to work component by component you must be p>ns built on Mozilla components using a single set of core librari
>articularly aware of issues of versioning and binary compatibilit>es. (If you intend to work component by component you must be par
>y. For help in this area, look at <a class="external" href="http:>ticularly aware of issues of versioning and binary compatibility.
>//mozilla.org/projects/xpcom/glue/Component_Reuse.html">XPCOM Com> For help in this area, look at <a class="external" href="http://
>ponent Reuse</a>.)>mozilla.org/projects/xpcom/glue/Component_Reuse.html">XPCOM Compo
 >nent Reuse</a>.)
n56      The most important of the Mozilla technologies is <a href="n56      The most important of the Mozilla technologies is <a href="
>en/XPCOM">XPCOM</a>, the Cross-Platform Component Object Model. X>/en/XPCOM" title="en/XPCOM">XPCOM</a>, the Cross-Platform Compone
>PCOM provides a framework which manages the creation, ownership, >nt Object Model. XPCOM provides a framework which manages the cre
>and deletion of objects and other data throughout Mozilla. If you>ation, ownership, and deletion of objects and other data througho
> have used MSCOM, you will recognize certain basic similarities. >ut Mozilla. If you have used MSCOM, you will recognize certain ba
>But there are also significant differences -- XPCOM is cross-plat>sic similarities. But there are also significant differences -- X
>form and designed to run largely in a single thread -- and the tw>PCOM is cross-platform and designed to run largely in a single th
>o are not at this time compatible.>read -- and the two are not at this time compatible.
n138      Mozilla actually provides a large number of built-in macrosn138      Mozilla actually provides a large number of built-in macros
> (by convention, written in all caps in the code) and utilities l> (by convention, written in all caps in the code) and utilities l
>ike <code>nsCOMPtr</code> that can make the entire process of cod>ike <code>nsCOMPtr</code> that can make the entire process of cod
>ing with XPCOM easier. Many of these can be found in the followin>ing with XPCOM easier. Many of these can be found in the followin
>g files: <tt>nsCom.h</tt>, <tt>nsDebug.h</tt>, <tt>nsError.h</tt>>g files: <code>nsCom.h</code>, <code>nsDebug.h</code>, <code>nsEr
>, <tt>nsIServiceManager.h</tt>, and <tt>nsISupportsUtils.h</tt>. >ror.h</code>, <code>nsIServiceManager.h</code>, and <code>nsISupp
>Mozilla also supplies other development tools for tracking memory>ortsUtils.h</code>. Mozilla also supplies other development tools
> usage and the like. More information on these can be found at <a> for tracking memory usage and the like. More information on thes
> class=" external" href="http://www.mozilla.org/performance/" rel>e can be found at <a class=" external" href="http://www.mozilla.o
>="freelink">http://www.mozilla.org/performance/</a>>rg/performance/" rel="freelink">http://www.mozilla.org/performanc
 >e/</a>
n144      More information on XPCOM in general can be found at <a hren144      More information on XPCOM in general can be found at <a hre
>f="en/XPCOM">XPCOM</a>. For an overview of creating XPCOM compone>f="/en/XPCOM" title="en/XPCOM">XPCOM</a>. For an overview of crea
>nts, see Chapter 8 of O'Reilly's <i><a class="external" href="htt>ting XPCOM components, see Chapter 8 of O'Reilly's <em><a class="
>p://books.mozdev.org/chapters/ch08.html">Creating Applications wi>external" href="http://books.mozdev.org/chapters/ch08.html">Creat
>th Mozilla</a></i>. There is also a new book completely devoted t>ing Applications with Mozilla</a></em>. There is also a new book 
>o this topic, <i><a href="en/Creating_XPCOM_Components">Creating >completely devoted to this topic, <em><a href="/en/Creating_XPCOM
>XPCOM Components</a></i>. A fuller explanation of some of the und>_Components" title="en/Creating_XPCOM_Components">Creating XPCOM 
>erlying logic to COM systems can be found in the early chapters o>Components</a></em>. A fuller explanation of some of the underlyi
>f <i>Essential COM</i> by Don Box. While it focuses on MSCOM in p>ng logic to COM systems can be found in the early chapters of <em
>articular, the book does provide an excellent background on some >>Essential COM</em> by Don Box. While it focuses on MSCOM in part
>of the core rationales for using such an object model.>icular, the book does provide an excellent background on some of 
 >the core rationales for using such an object model.
n153      The compiler can be set to output a number of things, but gn153      The compiler can be set to output a number of things, but g
>enerally the output is two-fold: a C++ .h file that includes a co>enerally the output is two-fold: a C++ .h file that includes a co
>mmented out template for a full C++ implementation of the interfa>mmented out template for a full C++ implementation of the interfa
>ce and an XPT file that contains type library information which w>ce and an XPT file that contains type library information which w
>orks with XPConnect to make the interface available to JavaScript>orks with XPConnect to make the interface available to JavaScript
>. More information on the syntax of <a href="en/XPIDL">XPIDL</a> >. More information on the syntax of <a href="/en/XPIDL" title="en
>(a simple C-like language) and the use of the <a href="en/XPIDL/x>/XPIDL">XPIDL</a> (a simple C-like language) and the use of the <
>pidl">compiler</a> is available.>a href="/en/XPIDL/xpidl" title="en/XPIDL/xpidl">compiler</a> is a
 >vailable.
n156      <a href="en/XPConnect">XPConnect</a> and XPT filesn156      <a href="/en/XPConnect" title="en/XPConnect">XPConnect</a> 
 >and XPT files
n159      <a href="en/XPConnect">XPConnect</a> is an <a href="en/XPCOn159      <a href="/en/XPConnect" title="en/XPConnect">XPConnect</a> 
>M">XPCOM</a> module that allows code written in <a href="en/JavaS>is an <a href="/en/XPCOM" title="en/XPCOM">XPCOM</a> module that 
>cript">JavaScript</a> to access and manipulate XPCOM components w>allows code written in <a href="/en/JavaScript" title="en/JavaScr
>ritten in C++ and vice versa. By means of XPConnect, components o>ipt">JavaScript</a> to access and manipulate XPCOM components wri
>n either side of an XPCOM interface do not, in general, need to k>tten in C++ and vice versa. By means of XPConnect, components on 
>now or care about which of these languages the object on the othe>either side of an XPCOM interface do not, in general, need to kno
>r side is implemented in.>w or care about which of these languages the object on the other 
 >side is implemented in.
n171      Web browsing typically involves a large amount of string man171      Web browsing typically involves a large amount of string ma
>nipulation. Mozilla has developed a hierarchy of C++ classes to f>nipulation. Mozilla has developed a hierarchy of C++ classes to f
>acilitate such manipulation and to render it efficient and quick.>acilitate such manipulation and to render it efficient and quick.
> To make communication among objects simpler and more error free,> To make communication among objects simpler and more error free,
> Mozilla uses interfaces, which are, in essence, abstract classes> Mozilla uses interfaces, which are, in essence, abstract classes
>. The string hierarchy is also headed up by a set of abstract cla>. The string hierarchy is also headed up by a set of abstract cla
>sses, <code>nsAString</code>, <code>nsASingleFragmentString</code>sses, <code>nsAString</code>, <code>nsASingleFragmentString</code
>>, and <code>nsAFlatString</code>, and for the same reasons. (The>>, and <code>nsAFlatString</code>, and for the same reasons. (The
>se refer to double-byte strings. There is a parallel hierarchy to>se refer to double-byte strings. There is a parallel hierarchy to
>pped with <code>nsACString</code>, etc., that refers to single-by>pped with <code>nsACString</code>, etc., that refers to single-by
>te strings.) <code>nsAString</code> guarantees only a string of c>te strings.) <code>nsAString</code> guarantees only a string of c
>haracters. <code>nsASingleFragmentString</code> guarantees that t>haracters. <code>nsASingleFragmentString</code> guarantees that t
>he characters will be stored in a single buffer. <code>nsAFlatStr>he characters will be stored in a single buffer. <code>nsAFlatStr
>ing</code> guarantees that the characters will be stored in a sin>ing</code> guarantees that the characters will be stored in a sin
>gle null-terminated buffer. While there are underlying concrete c>gle null-terminated buffer. While there are underlying concrete c
>lasses, in general it is best to use the most abstract type possi>lasses, in general it is best to use the most abstract type possi
>ble in a given situation. For example, concantenation can be done>ble in a given situation. For example, concantenation can be done
> virtually, through the use of pointers, resulting in an nsAStrin> virtually, through the use of pointers, resulting in an nsAStrin
>g that can be used like any other string. This saves the allocati>g that can be used like any other string. This saves the allocati
>ng and copying that would otherwise have to be done. For more inf>ng and copying that would otherwise have to be done. For more inf
>ormation, see "<a href="en/XPCOM_string_guide">XPCOM string guide>ormation, see "<a href="/En/Mozilla_internal_string_guide" title=
></a>".>"En/Mozilla_internal_string_guide">XPCOM string guide</a>".
n177      Use of this final Mozilla technology is optional, dependingn177      Use of this final Mozilla technology is optional, depending
> on how you decide to create the user interface for your applicat> on how you decide to create the user interface for your applicat
>ion. <a href="en/XUL">XUL</a> is Mozilla's highly flexible XML UI>ion. <a href="/en/XUL" title="en/XUL">XUL</a> is Mozilla's highly
> Language. It provides a number of largely platform independent w> flexible XML UI Language. It provides a number of largely platfo
>idgets from which to construct a UI. Netscape and Mozilla both us>rm independent widgets from which to construct a UI. Netscape and
>e XUL for their interfaces, but not all embedders choose to use i> Mozilla both use XUL for their interfaces, but not all embedders
>t. XBL or the eXtensible Binding Language allows you to attach be> choose to use it. XBL or the eXtensible Binding Language allows 
>haviors to XUL's XML elements. More information on XUL can be fou>you to attach behaviors to XUL's XML elements. More information o
>nd at <a class="external" href="http://www.mozilla.org/xpfe/xulre>n XUL can be found at <a class="external" href="http://www.mozill
>f/">XUL Programmer's Reference</a> and on <a href="en/XBL">XBL</a>a.org/xpfe/xulref/">XUL Programmer's Reference</a> and on <a href
>> at <a href="en/XBL/XBL_1.0_Reference">XBL:XBL_1.0_Reference</a>>="/en/XBL" title="en/XBL">XBL</a> at <a href="/en/XBL/XBL_1.0_Ref
>. There is also a wealth of good information on XUL at <a class=">erence" title="en/XBL/XBL_1.0_Reference">XBL:XBL_1.0_Reference</a
>external" href="http://www.xulplanet.com/">XULPlanet</a>.>>. There is also a wealth of good information on XUL at <a class=
 >"external" href="http://www.xulplanet.com/">XULPlanet</a>.
nn205          <td>
206            &nbsp;
205          <td></td>207          </td>
nn216          <td>
217            &nbsp;
214          <td></td>218          </td>
nn227          <td>
228            &nbsp;
223          <td></td>229          </td>
n372      <a href="en/NsIWebProgressListener">nsIWebProgressListener<n378      <a href="/en/nsIWebProgressListener" title="en/nsIWebProgre
>/a>>ssListener">nsIWebProgressListener</a>
n390      <a href="en/NsIPromptService">nsIPromptService</a>n396      <a href="/en/nsIPromptService" title="en/nsIPromptService">
 >nsIPromptService</a>
n505      The <code>BrowserImpl</code> object is added as an <a href=n511      The <code>BrowserImpl</code> object is added as an <a href=
>"en/NsIWebProgressListener">nsIWebProgressListener</a>. It will n>"/en/nsIWebProgressListener" title="en/nsIWebProgressListener">ns
>ow receive progress messages. These callbacks will be used to upd>IWebProgressListener</a>. It will now receive progress messages. 
>ate the status/progress bars.>These callbacks will be used to update the status/progress bars.
n539      <img alt="Image:EmbeddingBasicsa.gif" fileid="189" src="Filn545      <img alt="Image:EmbeddingBasicsa.gif" class="internal" src=
>e:en/Media_Gallery/EmbeddingBasicsa.gif">>"/@api/deki/files/189/=EmbeddingBasicsa.gif">
n548      Calculations continue as new information flows into the sysn554      Calculations continue as new information flows into the sys
>tem using a process called <b>reflow</b>. As information in the F>tem using a process called <strong>reflow</strong>. As informatio
>rame Tree changes, the section of the Frame Tree involved is mark>n in the Frame Tree changes, the section of the Frame Tree involv
>ed "dirty" by the Frame Constructor. Reflow repeatedly steps thro>ed is marked "dirty" by the Frame Constructor. Reflow repeatedly 
>ugh the tree, processing every "dirty" item it encounters until a>steps through the tree, processing every "dirty" item it encounte
>ll the items it encounters are "clean". Every item in the Frame T>rs until all the items it encounters are "clean". Every item in t
>ree has a pointer back to its corresponding item in the Content M>he Frame Tree has a pointer back to its corresponding item in the
>odel. A change in the Content Model, say through using the DOM AP> Content Model. A change in the Content Model, say through using 
>Is to change an element from hidden to visible, produces an equiv>the DOM APIs to change an element from hidden to visible, produce
>alent change in the Frame Tree. It's important to note that all o>s an equivalent change in the Frame Tree. It's important to note 
>f these operations are purely data manipulations. Painting to the>that all of these operations are purely data manipulations. Paint
> display itself is not yet involved at this point.>ing to the display itself is not yet involved at this point.
n554      If you want to take a look at the code underlying these strn560      If you want to take a look at the code underlying these str
>uctures, the code for the Content Model can be found in <tt>/mozi>uctures, the code for the Content Model can be found in <code>/mo
>lla/content</tt>, for the Frame Constructor, CSS, and Reflow in <>zilla/content</code>, for the Frame Constructor, CSS, and Reflow 
>tt>/mozilla/layout</tt>, for the View Manager in <tt>/mozilla/vie>in <code>/mozilla/layout</code>, for the View Manager in <code>/m
>w</tt>, and for the DOM APIs in <tt>/mozilla/dom</tt>.>ozilla/view</code>, and for the DOM APIs in <code>/mozilla/dom</c
 >ode>.
n561        <li>Author(s): <a class="external" href="mailto:jeev@jeevn567        <li>Author(s): <a class="external" href="/mailto:jeev@jee
>13@gmail.com">Ellen Evans</a>>v13@gmail.com" title="mailto:jeev@jeev13@gmail.com">Ellen Evans</
 >a>
n565        <li>Copyright Information: Copyright (C) <a class="link-mn571        <li>Copyright Information: Copyright (C) <span style="tex
>ailto" href="mailto:jeev13@gmail.com">Ellen Evans</a>>t-decoration: underline;">Creative Commons Attribution</span>
tt574    </div>
575    <p>
568    </div>{{ languages( { "ja": "ja/Gecko_Embedding_Basics" } ) }576      {{ languages( { "ja": "ja/Gecko_Embedding_Basics" } ) }}
>} 
577    </p>

Back to History