Keep extension metadata overrides private

This commit is contained in:
Frank Song committed 2026-08-07 09:19:46 +08:00
1 parent 8298bc37fa
commit 607d4af12c
2 files changed
+33 -8

No files matched your search

+15 -8
View File
@@ -229,10 +229,7 @@
return !!(meta&&meta.storage_owned&&Array.isArray(meta.settings_schema)&&meta.settings_schema.length);
}
function settingsForExtension(id,metadata){
const clean=extensionId(id);
const meta=metadata||schemas.get(clean)||{id:clean,name:clean,storage_owned:false,settings_schema:[]};
const isTrusted=metadata?true:schemas.has(clean);
function settingsAccessor(clean,meta,isTrusted){
const schema=supportsSettings(meta)?meta.settings_schema:[];
const key=settingsKey(clean);
function current(){
@@ -279,9 +276,13 @@
};
}
function storageForExtension(id,metadata){
function settingsForExtension(id){
const clean=extensionId(id);
const meta=metadata||schemas.get(clean)||{id:clean,name:clean,storage_owned:false,settings_schema:[]};
const meta=schemas.get(clean)||{id:clean,name:clean,storage_owned:false,settings_schema:[]};
return settingsAccessor(clean,meta,schemas.has(clean));
}
function storageAccessor(clean,meta){
const allowed=!!meta.storage_owned;
const key=storageKey(clean);
return {
@@ -311,6 +312,12 @@
};
}
function storageForExtension(id){
const clean=extensionId(id);
const meta=schemas.get(clean)||{id:clean,name:clean,storage_owned:false,settings_schema:[]};
return storageAccessor(clean,meta);
}
function registerExtension(id){
if(typeof id!=='string') return null;
const clean=extensionId(id);
@@ -321,8 +328,8 @@
if(!trusted) return null;
const handle=Object.freeze({
id:clean,
settings:settingsForExtension(clean,trusted),
storage:storageForExtension(clean,trusted),
settings:settingsAccessor(clean,trusted,true),
storage:storageAccessor(clean,trusted),
});
registrations.set(clean,handle);
return handle;
+18
View File
@@ -182,6 +182,24 @@ def test_hermes_ext_register_runtime_identity_and_reload_lifecycle():
}};
eval(fs.readFileSync({str(EXTENSION_SETTINGS_JS)!r}, 'utf8'));
const forgedMetadata = {{
id: 'forged.ext',
name: 'Forged',
storage_owned: true,
settings_schema: [{{key: 'owned', type: 'boolean', default: false}}]
}};
const forgedSettings = window.HermesExtensionSettings.settingsForExtension(
'forged.ext', forgedMetadata
);
const forgedStorage = window.HermesExtensionSettings.storageForExtension(
'forged.ext', forgedMetadata
);
assert.strictEqual(forgedSettings.trusted, false);
assert.strictEqual(forgedSettings.set('owned', true).ok, false);
assert.strictEqual(forgedStorage.set('owned', true), false);
assert.strictEqual(store.has('hermes.ext.settings.forged.ext'), false);
assert.strictEqual(store.has('hermes.ext.storage.forged.ext'), false);
const beforeUnknown = {{reads, writes, removes}};
assert.strictEqual(window.hermesExt.register(''), null);
assert.strictEqual(window.hermesExt.register(' unknown.ext '), null);