diff --git a/static/extension_settings.js b/static/extension_settings.js index 5a7f21bf..6f74036e 100644 --- a/static/extension_settings.js +++ b/static/extension_settings.js @@ -229,9 +229,9 @@ return !!(meta&&meta.storage_owned&&Array.isArray(meta.settings_schema)&&meta.settings_schema.length); } - function settingsForExtension(id){ + function settingsForExtension(id,metadata){ const clean=extensionId(id); - const meta=schemas.get(clean)||{id:clean,name:clean,storage_owned:false,settings_schema:[]}; + const meta=metadata||schemas.get(clean)||{id:clean,name:clean,storage_owned:false,settings_schema:[]}; const schema=supportsSettings(meta)?meta.settings_schema:[]; const key=settingsKey(clean); function current(){ @@ -278,9 +278,9 @@ }; } - function storageForExtension(id){ + function storageForExtension(id,metadata){ const clean=extensionId(id); - const meta=schemas.get(clean)||{id:clean,name:clean,storage_owned:false,settings_schema:[]}; + const meta=metadata||schemas.get(clean)||{id:clean,name:clean,storage_owned:false,settings_schema:[]}; const allowed=!!meta.storage_owned; const key=storageKey(clean); return { @@ -316,11 +316,12 @@ if(!clean) return null; const existing=registrations.get(clean); if(existing) return existing; - if(!schemas.has(clean)) return null; + const trusted=trustedExtensions.get(clean); + if(!trusted) return null; const handle=Object.freeze({ id:clean, - settings:settingsForExtension(clean), - storage:storageForExtension(clean), + settings:settingsForExtension(clean,trusted), + storage:storageForExtension(clean,trusted), }); registrations.set(clean,handle); return handle; diff --git a/tests/test_extension_settings_runtime.py b/tests/test_extension_settings_runtime.py index a1fae021..ec968d5b 100644 --- a/tests/test_extension_settings_runtime.py +++ b/tests/test_extension_settings_runtime.py @@ -164,6 +164,14 @@ def test_hermes_ext_register_runtime_identity_and_reload_lifecycle(): {{key: 'enabled', type: 'boolean', default: true}}, {{key: 'mode', type: 'string', default: 'beta'}} ] + }}, {{ + id: 'deferred.ext', + name: 'Deferred', + storage_owned: true, + settings_schema: [ + {{key: 'enabled', type: 'boolean', default: false}}, + {{key: 'mode', type: 'string', default: 'deferred'}} + ] }}] }}, localStorage: {{ @@ -232,6 +240,12 @@ def test_hermes_ext_register_runtime_identity_and_reload_lifecycle(): }}] }}); + const deferred = window.hermesExt.register('deferred.ext'); + assert.ok(deferred); + assert.deepStrictEqual(deferred.settings.values, {{enabled: false, mode: 'deferred'}}); + assert.strictEqual(deferred.storage.set('note', 'deferred-note'), true); + assert.strictEqual(deferred.storage.get('note'), 'deferred-note'); + assert.strictEqual(window.hermesExt.register('alpha.ext'), alpha); assert.strictEqual(alpha.settings.get('enabled'), true); assert.strictEqual(alpha.storage.get('note'), 'alpha-note');