Labs/Jetpack/Reboot/JEP/105

JEP 105 - Life-cycle

  • Champion: Aza Raskin - aza@mozilla.com
  • Status: Under Review
  • Bug Ticket:
  • Type: API
  • Difficulty: 4


Proposal

This JEP describes an API for handling the life-cycle of Jetpacks. In particular, it gives a Jetpack methods for registering event handlers for various install and uninstall states.

In addition to the event handlers, it provides a more declarative format.

Events

All methods of an add-on introspecting and interacting with its environmental metas using the Jetpack API live in the "me" module.

The event handlers can be used as follows:

me = require("me");

// eventName is one of install, upgrade
me.bind(eventName, callback);


// These are potential convenience functions
me.onInstall( function )
me.onUpgrade( function )

The me.onInstall gets called on the first run of an extension. If an extension is uninstalled and reinstalled it gets called again (as the act of uninstalling removes all data associated with the add-on). me.onUpgrade get's called when an extension is upgraded.

Nothing is passed to the onInstall handler. An object which contains version info for the add-on prior to being updated gets passed to onUpgrade.

There does not seem to be a strong use-case for allowing for event handlers that act upon disabling, enabling, and un-installing an extension.

Declarative

The first-run experience is coded inside of manifest.json, the feature's manifest, which is (not un-coincidentally) where the settings are placed.

manifest = {
  installPage: stringOrXml,
  uninstallPage: stringOrXml
}

installPage is shown after the extension has been instantiated, so has access to settings and version info.

uninstallPage is shown before the extension has been removed, so has access to settings and version info.

Difficulty

Rating: Easy

Key Issues

  • enable/disable?
  • when is it run?

Dependencies & Requirements

Internal Methods

  • What methods, mechanisms, or resources does this provide internally within the Jetpack platform code.

Use Cases

  • Show a welcome page/tutorial when you install an add-on.
  • Show a set of tooltips for the UI that an extension has added, in vivo to the interface.
  • Give a survey when you uninstall an add-on.