From 4112f0f0099fe69e10979381a18bcbf75ef19797 Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Mon, 24 May 2021 17:32:55 -0500 Subject: [PATCH] Fix addon settings reset live reload --- src/addons/settings-store.js | 3 ++- test/unit/addons/settings.test.js | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/addons/settings-store.js b/src/addons/settings-store.js index 485171914..2619f6470 100644 --- a/src/addons/settings-store.js +++ b/src/addons/settings-store.js @@ -320,7 +320,8 @@ class SettingsStore extends EventTargetShim { const manifest = this.getAddonManifest(addonId); const dynamicEnable = !!manifest.dynamicEnable && !oldSettings.enabled && newSettings.enabled; const dynamicDisable = !!manifest.dynamicDisable && oldSettings.enabled && !newSettings.enabled; - Object.assign(oldSettings, newSettings); + // Clone to avoid pass-by-reference issues + this.store[addonId] = JSON.parse(JSON.stringify(newSettings)); this.dispatchEvent(new CustomEvent('addon-changed', { detail: { addonId, diff --git a/test/unit/addons/settings.test.js b/test/unit/addons/settings.test.js index 4bd1488a3..727dd90f9 100644 --- a/test/unit/addons/settings.test.js +++ b/test/unit/addons/settings.test.js @@ -429,3 +429,13 @@ test('setStore weird values', () => { }); expect(settingsStore.getAddonEnabled('pause')).toBe(false); }); + +test('resetting an addon through setStore', () => { + const store = new SettingStore(); + expect(store.getAddonSetting('custom-block-shape', 'paddingSize')).toBe(100); + store.setAddonSetting('custom-block-shape', 'paddingSize', 50); + expect(store.getAddonSetting('custom-block-shape', 'paddingSize')).toBe(50); + const store2 = new SettingStore(); + store.setStore(store2.store); + expect(store.getAddonSetting('custom-block-shape', 'paddingSize')).toBe(100); +});