fix(settings): don't crash on load when localStorage is blocked + tests (+6)
Prevention work found a real bug: getSettings() runs at module load, and its catch block called localStorage.removeItem() — but we often reach that catch *because* localStorage access threw (blocked storage / private mode / sandboxed context). The removeItem then re-threw, producing an uncaught error that crashed the whole app at startup. Guarded the cleanup in its own try/catch. New state/settings suite (6) covers the legacy-boolean callNoiseSuppression migration, denoise-model/ringtone-id coercion of unknown values, default merge, malformed JSON, and the blocked-storage regression. Full suite now 129 tests, all passing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -296,7 +296,15 @@ export const getSettings = (): Settings => {
|
||||
},
|
||||
};
|
||||
} catch {
|
||||
localStorage.removeItem(STORAGE_KEY);
|
||||
// We may be here precisely because localStorage access throws (blocked
|
||||
// storage / private mode / sandboxed context). Removing the key must not be
|
||||
// allowed to re-throw — getSettings() runs at module load, so an uncaught
|
||||
// error here would crash the whole app on startup.
|
||||
try {
|
||||
localStorage.removeItem(STORAGE_KEY);
|
||||
} catch {
|
||||
/* localStorage unavailable — nothing to clean up */
|
||||
}
|
||||
return defaultSettings;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user