mozilla

Compare Revisions

Jetpack Processes

Change Revisions

Revision 30546:

Revision 30546 by Avarma on

Revision 30547:

Revision 30547 by Avarma on

Title:
Jetpack Processes
Jetpack Processes
Slug:
Jetpack_Processes
Jetpack_Processes
Tags:
Jetpack
Jetpack
Content:

Revision 30546
Revision 30547
n8      Jetpack processes are created by <code><a href="/en/nsIJetpn8      Jetpack processes are created by components that implement 
>ackService">nsIJetpackService</a></code> interfaces, and their pa>the <code><a href="/en/nsIJetpackService" title="en/nsIJetpackSer
>rent chrome process communicates with them via a <code><a href="/>vice">nsIJetpackService</a></code> interface, and their parent ch
>en/nsIJetpackService">nsIJetpack</a></code> interface.>rome process communicates with them via the <code><a href="/en/ns
 >IJetpackService" title="en/nsIJetpackService">nsIJetpack</a></cod
 >e> interface.
n17      When script is evaluated in a Jetpack process via a call ton17      When script is evaluated in a Jetpack process via a call to
> <code><a href="/en/nsIJetpack#evalScript()">nsIJetpack.evalScrip> <code><a href="/en/nsIJetpack#evalScript()" title="en/nsIJetpack
>t()</a></code>, the script's global scope is endowed with the fol>#evalScript()">nsIJetpack.evalScript()</a></code>, the script's g
>lowing privileged APIs:>lobal scope is endowed with the following privileged APIs:
n24        Similar to <code><a href="/en/nsIJetpack#sendMessage()">nn24        Similar to <code><a href="/en/nsIJetpack#sendMessage()" t
>sIJetpack.sendMessage()</a></code>, this function asynchronously >itle="en/nsIJetpack#sendMessage()">nsIJetpack.sendMessage()</a></
>sends a message to the chrome process.>code>, this function asynchronously sends a message to the chrome
 > process.
n36        Similar to <code><a href="/en/nsIJetpack#registerReceivern36        Similar to <code><a href="/en/nsIJetpack#registerReceiver
>()">nsIJetpack.registerReceiver()</a></code>, this function regis>()" title="en/nsIJetpack#registerReceiver()">nsIJetpack.registerR
>ters a callback that's triggered when the chrome process sends a >eceiver()</a></code>, this function registers a callback that's t
>message with the given name.>riggered when the chrome process sends a message with the given n
 >ame.
n42        Similar to <code><a href="/en/nsIJetpack#unregisterReceivn42        Similar to <code><a href="/en/nsIJetpack#unregisterReceiv
>er()">nsIJetpack.unregisterReceiver()</a></code>, this function u>er()" title="en/nsIJetpack#unregisterReceiver()">nsIJetpack.unreg
>nregisters a callback previously registered with <code>registerRe>isterReceiver()</a></code>, this function unregisters a callback 
>ceiver()</code>.>previously registered with <code>registerReceiver()</code>.
n48        Similar to <code><a href="/en/nsIJetpack#unregisterReceivn48        Similar to <code><a href="/en/nsIJetpack#unregisterReceiv
>ers()">nsIJetpack.unregisterReceivers()</a></code>, this function>ers()" title="en/nsIJetpack#unregisterReceivers()">nsIJetpack.unr
> unregisters all callbacks for the given message name.>egisterReceivers()</a></code>, this function unregisters all call
 >backs for the given message name.
n54        Similar to <code><a href="/en/nsIJetpack#createHandle()">n54        Similar to <code><a href="/en/nsIJetpack#createHandle()" 
>nsIJetpack.createHandle()</a></code>, this function creates a new>title="en/nsIJetpack#createHandle()">nsIJetpack.createHandle()</a
> <a href="#Handles">handle</a> and returns it.>></code>, this function creates a new <a href="#Handles">handle</
 >a> and returns it.
n79      Messages that communicate between the browser and jetpack pn79      Messages that communicate between the browser and jetpack p
>rocess may contain only serializable (JSON) data and <em>handles<>rocess may contain only serializable (JSON) data and <em>handles<
>/em>. A handle can be used to provide context for messages. Eithe>/em>. A handle can be used to provide context for messages. Eithe
>r the browser or the jetpack implementation may create a handle. >r the browser or the jetpack implementation may create one.
>A handle keeps any arbitrary properties attached to it alive, and 
> has the following native methods and properties: 
80    </p>
81    <p>
82      A handle keeps any arbitrary properties attached to it aliv
 >e, but those properties aren't transmitted across the process bou
 >ndary. These arbitrary properties are the primary means through w
 >hich context can be provided for messages; for instance, if the h
 >andle is meant to represent a network request, an <code>XMLHttpRe
 >quest</code> instance can be attached to the handle on the chrome
 > process.
83    </p>
84    <p>
85      Because a handle's existence crosses process boundaries and
 > cross-process garbage collection doesn't exist, the lifetime of 
 >a handle needs to be controlled manually by code. By default, a h
 >andle is rooted in the JavaScript interpreter's garbage collector
 >, meaning that even if a process throws it away, it won't be garb
 >age collected unless the other process explicitly does something 
 >to indicate that it's no longer needed. If that other process doe
 >sn't do something explicit and simply removes all references to i
 >t, the handle remains rooted yet unreachable in both processes an
 >d a memory leak is created.
86    </p>
87    <p>
88      To prevent such memory leaks, a process can either <em>inva
 >lidate</em> a handle, immediately preventing it from being passed
 > as a message argument, or it can <em>unroot</em> the handle, all
 >owing it to be passed as a message argument until all references 
 >to it are removed, at which point it is garbage collected.
89    </p>
90    <p>
91      Handles have the following native methods and properties:
t119    <p>t
120      A handle that is created without a parent stays alive until
> it is either explicitly invalidated or unrooted. 
121    </p>

Back to History