retry API on browser startup automatically
This commit is contained in:
parent
00b732177f
commit
079e7e50f1
|
@ -60,7 +60,7 @@
|
|||
mqDark.onchange(mqDark);
|
||||
|
||||
// Declare all vars before init() or it'll throw due to "temporal dead zone" of const/let
|
||||
const ready = init();
|
||||
init();
|
||||
|
||||
// the popup needs a check as it's not a tab but can be opened in a tab manually for whatever reason
|
||||
if (!isTab) {
|
||||
|
@ -190,13 +190,6 @@
|
|||
});
|
||||
break;
|
||||
|
||||
case 'backgroundReady':
|
||||
ready.catch(err =>
|
||||
msg.isIgnorableError(err)
|
||||
? init()
|
||||
: console.error(err));
|
||||
break;
|
||||
|
||||
case 'updateCount':
|
||||
updateCount();
|
||||
break;
|
||||
|
|
20
js/msg.js
20
js/msg.js
|
@ -23,6 +23,8 @@
|
|||
tab: new Set(),
|
||||
extension: new Set(),
|
||||
};
|
||||
let bgReadySignal;
|
||||
let bgReadying = new Promise(fn => (bgReadySignal = fn));
|
||||
|
||||
// TODO: maybe move into polyfill.js and hook addListener to wrap/unwrap automatically
|
||||
chrome.runtime.onMessage.addListener(onRuntimeMessage);
|
||||
|
@ -119,6 +121,9 @@
|
|||
}
|
||||
|
||||
function onRuntimeMessage({data, target}, sender, sendResponse) {
|
||||
if (bgReadying && data && data.method === 'backgroundReady') {
|
||||
bgReadySignal();
|
||||
}
|
||||
const res = msg._execute(TARGETS[target] || TARGETS.all, data, sender);
|
||||
if (res instanceof Promise) {
|
||||
res.then(wrapData, wrapError).then(sendResponse);
|
||||
|
@ -148,6 +153,19 @@
|
|||
: data;
|
||||
}
|
||||
|
||||
async function sendRetry(m) {
|
||||
try {
|
||||
return await msg.send(m);
|
||||
} catch (e) {
|
||||
if (!bgReadying || !msg.isIgnorableError(e)) {
|
||||
return Promise.reject(e);
|
||||
}
|
||||
await bgReadying;
|
||||
bgReadying = bgReadySignal = null;
|
||||
return msg.send(m);
|
||||
}
|
||||
}
|
||||
|
||||
const apiHandler = !msg.isBg && {
|
||||
get({path}, name) {
|
||||
const fn = () => {};
|
||||
|
@ -161,7 +179,7 @@
|
|||
let res;
|
||||
// content scripts, probably private tabs, and our extension tab during Chrome startup
|
||||
if (!bg || !bg.msg || !bg.msg.ready && await bg.bgReady.all && false) {
|
||||
res = msg.send(message);
|
||||
res = bgReadying ? sendRetry(message) : msg.send(message);
|
||||
} else {
|
||||
res = deepCopy(await bg.msg._execute(TARGETS.extension, message, {
|
||||
// Using a fake id for our Options frame as we want to fetch styles early
|
||||
|
|
Loading…
Reference in New Issue
Block a user