It shouldn't because it tracks the extensions added by prefs. The flow is something like this:

1. pref maps `.foo` to javacript
2. that goes through this code under `newNames`
3. the `last` state now contains that `foo -> javascript` mapping
4. pref changes to map `.foo` to php
5. the `newMapping` of php doesn't match the `last` mapping of javascript
6. the default mapping for `.foo` is restored (via that `_restoreOveriddenDefault` call)
7. that default mapping is undefined in the case of `.foo`, so no override is saved
8. *then* the new mapping of `foo -> php` is created

So, the only overrides that are saved are actually the default mappings since we always restore the default before creating a new mapping.