Files
Sylvestre Ledru b7646161c5 Bug 2060009 - Fix duplicate documentation labels. r=ai-platform-reviewers
With autosectionlabel_maxdepth = 1, every page's H1 becomes a global
label, so two pages sharing a title collide.

 - mozinfo, WebIDL, AsyncShutdown, FirstStartup and Region carried an
   explicit (slug)= target left over from the reStructuredText
   conversion, immediately above an H1 generating the very same label.
   Drop the redundant target; the autosectionlabel one is identical and
   points at the same place, so existing refs keep working.
 - Give four generic titles a component-specific name: the TypeScript
   linter page, the ML inference architecture page, the Glean
   preferences page and the stylelint no-browser-refs-in-toolkit rule.
 - The eslint and stylelint enabling-rules pages used several H1s where
   they meant sections; demote the later ones so each page has a single
   H1.

./mach doc goes from 683 to 672 warnings (76 -> 65 duplicate labels).

Differential Revision: https://phabricator.services.mozilla.com/D315867
2026-08-04 17:49:00 +00:00

2.7 KiB

FirstStartup

FirstStartup is a module which is invoked on application startup by the Windows Installer, to initialize services before the first application window appears.

This is useful for:

  • one-time performance tuning
  • downloading critical data (hotfixes, experiments, etc)

Blocking until the first Application window appears is important because the Installer will show a progress bar until this happens. This gives a user experience of:

  1. User downloads and starts the Windows Stub Installer.
  2. Progress bar advances while the application is downloaded and installed.
  3. Installer invokes the application with --first-startup.
  4. Application window appears, and the installer window closes.

Overall, the user experiences a very fast first-startup, with critical tasks that normally would be deferred until after UI startup already complete.

(firststartup-architecture)=

FirstStartup: Example use case

An example use of the FirstStartup module is to invoke the Normandy client to download an experiment that will be used to customize the first-run page that Firefox shows.

In this example, the first-run page would be loaded experimentally based on an attribution code provided by the Installer. The flow for this looks like:

  1. User clicks on download link containing an attribution (UTM) code(s).
  2. The download page serves a custom Windows Stub Installer with the appropriate attribution code embedded.
  3. The installer invokes Firefox with the --first-startup flag, which blocks the first window.
  4. Normandy is run by FirstStartup and downloads a list of available experiments, or "recipes".
  5. Recipes are evaluated and filtered based on local information, such as the OS platform and the attribution codes.
  6. A recipe is found which matches the current attribution code, and appropriate data is made available to the first-run page.
  7. FirstStartup completes and unblocks, which causes Firefox to show the first window and load the appropriate first-run data.

List of phases

FirstStartup.NOT_STARTED

The FirstStartup module has not been initialized (the init() function has not been called). This is the default state.

FirstStartup.IN_PROGRESS

FirstStartup.init() has been called, and the event loop is spinning. This state will persist until either all startup tasks have finished, or time-out has been reached.

The time-out defaults to 30 seconds, but is configurable via the first-startup.timeout pref, which is specified in milliseconds.

FirstStartup.TIMED_OUT

The time-out has been reached before startup tasks are complete.

FirstStartup.SUCCESS

All startup tasks have completed successfully, and application startup may resume.

FirstStartup.UNSUPPORTED

No startup tasks are supported, and FirstStartup exited.