Preserve trusted extension identity across refresh
This commit is contained in:
1 parent
f003b2d159
commit
693fbad5dc
2 files changed
+22
-7
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in new issue
Block a user