canmove, Confirmed users
1,570
edits
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
__NOTOC__Bootstrapped add-ons exist as a means of restricting what is available to an add-on in order to allow it to be | __NOTOC__Bootstrapped add-ons exist as a means of restricting what is available to an add-on in order to allow it to be started up and shutdown without restarting the application. | ||
Current XPI add-ons cannot be removed from memory without restarting the application. This is because the features that we give them (XPCOM components, chrome registration and overlays etc.) cannot be removed in a managed fashion. Adding an add-on without a restart could possibly be implemented however that really only solves a small part of the problem as updates etc. would still require restarts. | |||
The approach taken here is to simplify what it means to be an add-on. Instead of registering XPCOM components and chrome in bootstrapped add-ons we do nothing except execute a bootstrap script that the add-on provides, telling it to startup. The add-on can do whatever it likes at that point however it must undo anything it has done when we call the bootstrap script to tell it to shutdown. | |||
==Starting up and Shutting down== | |||
A key feature of bootstrapped add-ons is that they must be able to be started and shutdown on demand by the platform. When told to startup it is up to the add-on's bootstrap code to do anything necessary to inject UI and behaviour into the application. When told to shutdown it is required that the add-on remove anything it has added and removing all references to its objects. Some examples of when startup and shutdown happen: | |||
* When first installed (if the add-on is compatible and enabled) the platform will tell the add-on to load. | |||
* When uninstalled (if the add-on is currently enabled) the platform will tell the add-on to unload. | |||
* When enabled or disabled while the application is running the platform will tell the add-on to startup or shutdown as appropriate. | |||
* When the application is started the platform will tell any enabled add-ons to startup. | |||
* When the user quits the application the platform will tell any enabled add-ons to shutdown. | |||
==Declaring an Add-on as Bootstrappable== | ==Declaring an Add-on as Bootstrappable== | ||
Line 17: | Line 25: | ||
==Bootstrap Events== | ==Bootstrap Events== | ||
Bootstrapped add-ons must provide a bootstrap.js file which defines main entry functions as defined below. When the platform needs to call a function the script will be loaded into a privileged sandbox which is cached until the add-on is shutdown. | |||
===Startup=== | ===Startup=== | ||
Whenever an add-on needs to be | Whenever an add-on needs to be started the platform will call a function named <code>startup</code> in the bootstrap script. It will be passed the following arguments: | ||
;data :A JS object containing basic information about the add-on, <code>id</code>, <code>version</code> and <code>installPath</code>. | ;data :A JS object containing basic information about the add-on, <code>id</code>, <code>version</code> and <code>installPath</code>. | ||
;reason :A number representing the reason for loading the add-on. This may be APP_STARTUP or ADDON_ENABLE. | ;reason :A number representing the reason for loading the add-on. This may be APP_STARTUP or ADDON_ENABLE. | ||
The add-on must at this point do anything necessary to make its functionality available, the platform will do nothing else to load the add-on. | |||
===Shutdown=== | ===Shutdown=== | ||
Whenever an add-on needs to be | Whenever an add-on needs to be shutdown the platform will call a function named <code>shutdown</code> in the bootstrap script. It will be passed the following arguments: | ||
;data :A JS object containing basic information about the add-on, <code>id</code>, <code>version</code> and <code>installPath</code>. | ;data :A JS object containing basic information about the add-on, <code>id</code>, <code>version</code> and <code>installPath</code>. | ||
;reason :A number representing the reason for unloading the add-on. This may be APP_SHUTDOWN or ADDON_DISABLE. | ;reason :A number representing the reason for unloading the add-on. This may be APP_SHUTDOWN or ADDON_DISABLE. | ||
The add-on must at this point remove anything it has added to the application so its memory can be reclaimed. | |||
===Install=== | ===Install=== |