Support/Firefox Features/Clean up user profile
|Ability to clean up user profile|
|Release target||Firefox 13|
|Status note||Startup crash detection landed in 13. Migrator with stub import landed (no add-ons) in 12. UI to initiate from about:support landed in 13. UI from safe mode dialog landed in 15.|
|Product manager||Asa Dotzler|
|Directly Responsible Individual||Matthew Noorenberghe|
|Lead engineer||Matthew Noorenberghe|
|QA lead||Ioana Budnar|
|UX lead||Alex Limi|
|Product marketing lead||`|
- Since OS X and Linux don't have installers, we don't have a way to trigger this process for them upon re-installation. The other use-cases are still valid though.
Stage 1: Definition
1. Feature overview
The Reset Firefox feature will provide a way for users to automatically fix Firefox by creating a new profile and migrating their data (bookmarks, history, passwords, etc).
This feature falls primarily in the Experience category (from the "Discover, Experience, and Connect" vision statement.)
There are a number of serious Firefox issues (not starting, crashing, unexpected behavior, lost toolbars and more) that can be solved by creating a new profile. The problem is, creating a new profile (which is an incredibly difficult task) is not enough. A user will almost always want to also migrate their data to the new profile which is another difficult task. See these two articles (1, 2) for complete steps.
Many users try to reinstall Firefox to solve these issues but reinstallation doesn't do anything to the profile folder. Providing this option upon reinstallation and, in addition, offering this after consecutive start-up crashes and on the Troubleshooting Information page will make this feature both intuitive and discoverable.
- There is a plan to remove the Profile Manager UI (Bug 214675) and add an external Profile Manager application (Bug 539524). This solution is fine from a testing point of view but for the user who is just trying to fix Firefox this will complicate an already difficult process. Our feature would make the removal of the profile manager ui irrelevant from the user's point of view.
2. Users & use cases
The goal is to take a difficult and confusing repair process that most people never discover (and often need one-on-one help to complete when they do find it) and turn it into an easy and discoverable operation that can be done by most users without guidance.
A user determines that "something" is wrong with Firefox, so they attempt to fix it by reinstalling. When the installer detects that the same version of Firefox already exists on the computer it will offer the option to repair Firefox by resetting it to its default state. That intent can be passed on to Firefox and the reset process will be started the next time Firefox starts.
After a third consecutive start-up crash, Firefox will offer to either start in safe mode so diagnosis can be done or to reset Firefox to it's default state.
A SUMO article or helper can direct a user to a simple method for repairing Firefox by accessing the Troubleshooting Information page and clicking the Reset Firefox button.
This will probably require the expertise of installer, migration, and Firefox front-end hackers, reviewers, and testers.
- bug 700898 - test harness for migration tools
Easy to use
- Easy to discover (Ideally the user shouldn't have to go to SUMO to figure this out)
A Clean Install is another repair process that is not covered by this feature.
Stage 2: Design
5. Functional specification
There are three ways the Reset Firefox feature can be accessed:
During installation we can detect or be told by the user that this is a repair attempt. That information will then be passed on to Firefox which will start the Reset Firefox process. Note that the reset process is not performed by the installer.
A third consecutive startup crash will trigger Firefox to offer to start in safe mode or to reset Firefox.
When the Reset Firefox command is invoked, Firefox will:
Confirm with the user what actions are about to be taken
Create a new user profile
Migrate user data
*Autofill form/search data
*Extensions and themes
Reset toolbars and controls
Reset all user preferences to Firefox defaults
Disable all add-ons and switch to the default theme
Then Firefox will open using the new profile.
*asa said: "do we want to load the add-ons manager on this restart so users can see they still have add-ons but those have been set to disabled? do we want to migrate their add-on prefs as well?
** We don't know which add-on prefs are safe so I suggest not –– MattN
6. User experience design
Preliminary Mockups: Reset Firefox on re-installation
Stage 3: Planning
7. Implementation plan
Notes to keep in mind:
- There are two different kinds of startup crashes:
- Caused by a user's profile
- Caused by code that loads in all profiles - may still crash on a new profile
- I think that third-party code (except plugins) wouldn't get loaded in safe mode but if malware has infected Firefox install files then this will still be a problem.
#** The installer repair workflow may fix some of this.
- The Reset Firefox process should run in
safe mode to prevent crashes– runs in a new profile instead and pulls data
- Non goal: Another option is to add a button to restart in safe mode from about:sessionrestore when it had trouble restoring the session. bug 347680
- Safe mode should always be used before reset since reset causes data loss which may be unnecessary if safe mode would have solved the problem. As a result, I think that a button to restart in safe mode is a higher priority for about:support than going directly to a reset.
- The safe mode dialog could provide a method to reset the profile
- Less discoverable
- We need to make the distinction between the reset process and making permanent changes in safe mode more clear as they appear to do the same thing in the UI. In reality, resetting involves more data loss since it's actually going to migrate only high priority data to a new profile.
- Use prefs in the profile to keep track of crashes for startup crash detection
- Add command-line argument(s) and/or environment variable(s) to launch the reset process
- This is needed so that the installer has a way of telling Firefox to repair after installation
- Migration to a new profile
- Use profile migrator infrastructure
- Can only migrate from the default/selected profile since the Toolkit Profile Service is going to be replaced in bug 214675
- Use profile migrator infrastructure
- Migration of Places data (notes from rnewman)
- Queries refer directly to a Places ID. If you do a low-level migration to a new DB, make sure that you don't break those foreign pseudo-keys!
- Note that Sync relies on the GUIDs assigned to records. Those must persist.
- For now, the entire places.sqlite file and bookmarkbackups directory are copied to the new profile.
- Interaction with Sync (notes from rnewman; feel free to ask for clarification):
- , clearing all user-set prefs will eliminate the user's Sync configuration, with unpleasant consequences. (Take a look in about:config for services.sync..) If you start a blank profile, it'll pull down all the old prefs from the Sync server. If you preserve timestamps, the new values won't necessarily be uploaded, unless you send Sync the correct observer notifications for change events.
- Note that Sync whitelists prefs to sync between devices (services.sync.prefs.*). You might want to think about that.
- Similar caveats apply to other data stored in Sync. Making this feature work correctly with Sync will need a little bit of thought.
- DONE - Make sure that UI isn't exposed in cases where we won't migrate due to ToolkitProfileService limitations
sec-review happened on 2012-02-03. Completed 2012-03-05.
Quality Assurance review
Stage 4: Development
- [DONE] in Mozilla 13 - bug 294260 – Safe Mode: Auto detect previous start-up failure and offer to start in safe mode
[DONE] in Mozilla 12 - bug 273874 – Create migrator with bookmark support and simple file copies (dependencies)
UI to reset profile
* [DONE] in Mozilla 15 - bug 732303 - startup crashes & safe mode dialog
* [DONE] in Mozilla 13 - bug 717070 - about:support with dialog
* bug 750979 - Installer Reset option - Add profile reset option to installer on re-install
[DONE] in Mozilla 12 - bug 721265 - form history
[DONE] in Mozilla 15 - bug 731047 - Privacy – Functionality to clean up the old profile
Make data migration more conservative
* prefer data export + import rather than file copies
Stage 5: Release
10. Landing criteria
- Ensure migration of a profile that had sync setup still works - Done
|Theme / Goal||Experience|
|Engineering team||Desktop front-end|
Team status notes
|Engineering||Startup crash detection landed in 12. Migrator with stub import landed (no add-ons). Safe mode dialog UI landed in 15.||Migrators to just copy the relevant files has landed (except add-ons). Can iterate as necessary to better handle corrupt files.|
|Quality assurance||Signed off||Test Plan|