Keep extension metadata overrides private
This commit is contained in:
1 parent
8298bc37fa
commit
607d4af12c
2 files changed
+33
-8
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user