diff --git a/platform/mv3/extension/css/picker-ui.css b/platform/mv3/extension/css/picker-ui.css index 8e86f93d0..8f2fae5ae 100644 --- a/platform/mv3/extension/css/picker-ui.css +++ b/platform/mv3/extension/css/picker-ui.css @@ -38,6 +38,7 @@ #ubol-picker textarea { border: 0; box-sizing: border-box; + font-size: var(--monospace-size); min-height: 5em; resize: none; width: 100%; @@ -49,7 +50,7 @@ color: var(--ink-2); display: flex; flex-direction: column; - font-size: small; + font-size: var(--monospace-size); gap: 0.25em; } #ubol-picker .resultsetWidgets > span:first-of-type { @@ -75,7 +76,7 @@ #ubol-picker #candidateFilters { font-family: monospace; - font-size: small; + font-size: var(--monospace-size); max-height: min(20em, 30vh); min-height: 6em; overflow-y: auto; @@ -111,7 +112,7 @@ color: var(--ink-2); column-gap: 0; display: grid; - font-size: small; + font-size: var(--font-size-smaller); grid-template: auto / 1fr 1fr; justify-items: stretch; user-select: none; diff --git a/platform/mv3/extension/js/ext.js b/platform/mv3/extension/js/ext.js index 18c88f878..78fb2c53b 100644 --- a/platform/mv3/extension/js/ext.js +++ b/platform/mv3/extension/js/ext.js @@ -33,6 +33,8 @@ export const webextFlavor = (( ) => { return extURL.startsWith('moz-extension:') ? 'firefox' : 'chromium'; })(); +const notAnObject = a => typeof a !== 'object' || a === null; + /******************************************************************************/ // The extension's service worker can be evicted at any time, so when we @@ -47,72 +49,64 @@ export function sendMessage(msg) { /******************************************************************************/ export async function localRead(key) { - if ( browser.storage instanceof Object === false ) { return; } - if ( browser.storage.local instanceof Object === false ) { return; } + if ( notAnObject(browser?.storage?.local) ) { return; } try { const bin = await browser.storage.local.get(key); - if ( bin instanceof Object === false ) { return; } + if ( notAnObject(bin) ) { return; } return bin[key] ?? undefined; } catch { } } export async function localWrite(key, value) { - if ( browser.storage instanceof Object === false ) { return; } - if ( browser.storage.local instanceof Object === false ) { return; } + if ( notAnObject(browser?.storage?.local) ) { return; } return browser.storage.local.set({ [key]: value }); } export async function localRemove(key) { - if ( browser.storage instanceof Object === false ) { return; } - if ( browser.storage.local instanceof Object === false ) { return; } + if ( notAnObject(browser?.storage?.local) ) { return; } return browser.storage.local.remove(key); } export async function localKeys() { - if ( browser.storage instanceof Object === false ) { return; } - if ( browser.storage.local instanceof Object === false ) { return; } + if ( notAnObject(browser?.storage?.local) ) { return; } if ( browser.storage.local.getKeys ) { return browser.storage.local.getKeys(); } const bin = await browser.storage.local.get(null); - if ( bin instanceof Object === false ) { return; } + if ( notAnObject(bin) ) { return; } return Object.keys(bin); } /******************************************************************************/ export async function sessionRead(key) { - if ( browser.storage instanceof Object === false ) { return; } - if ( browser.storage.session instanceof Object === false ) { return; } + if ( notAnObject(browser?.storage?.session) ) { return; } try { const bin = await browser.storage.session.get(key); - if ( bin instanceof Object === false ) { return; } + if ( notAnObject(bin) ) { return; } return bin[key] ?? undefined; } catch { } } export async function sessionWrite(key, value) { - if ( browser.storage instanceof Object === false ) { return; } - if ( browser.storage.session instanceof Object === false ) { return; } + if ( notAnObject(browser?.storage?.session) ) { return; } return browser.storage.session.set({ [key]: value }); } export async function sessionRemove(key) { - if ( browser.storage instanceof Object === false ) { return; } - if ( browser.storage.session instanceof Object === false ) { return; } + if ( notAnObject(browser?.storage?.session) ) { return; } return browser.storage.session.remove(key); } /******************************************************************************/ export async function adminRead(key) { - if ( browser.storage instanceof Object === false ) { return; } - if ( browser.storage.managed instanceof Object === false ) { return; } + if ( browser?.storage?.managed instanceof Object === false ) { return; } try { const bin = await browser.storage.managed.get(key); - if ( bin instanceof Object === false ) { return; } + if ( notAnObject(bin) ) { return; } return bin[key] ?? undefined; } catch { }