feat(scripts): add state management to background scripts

This commit is contained in:
wanhose 2021-07-01 15:11:09 +02:00
parent 8349c52555
commit f4d87d053b

View File

@ -23,59 +23,66 @@ const isValid = (cache) =>
/** /**
* @function disableIcon * @function disableIcon
* @description Disables icon * @description Disables icon if there is a tab
* *
* @param {string} [tabId] * @param {string} [tabId]
* @returns {boolean}
*/ */
const disableIcon = (tabId) => { const disableIcon = (tabId) => {
chrome.browserAction.setIcon({ if (tabId) {
path: "assets/icons/disabled.png", chrome.browserAction.setIcon({
tabId, path: "assets/icons/disabled.png",
}); tabId,
});
}
}; };
/** /**
* @function disablePopup * @function disablePopup
* @description Disables popup * @description Disables popup if there is a tab
* *
* @param {string} [tabId] * @param {string} [tabId]
*/ */
const disablePopup = (tabId) => { const disablePopup = (tabId) => {
chrome.browserAction.setPopup({ if (tabId) {
popup: "", chrome.browserAction.setPopup({
tabId, popup: "",
}); tabId,
});
}
}; };
/** /**
* @function enableIcon * @function enableIcon
* @description Enables icon * @description Enables icon if there is a tab
* *
* @param {string} [tabId] * @param {string} [tabId]
*/ */
const enableIcon = (tabId) => { const enableIcon = (tabId) => {
chrome.browserAction.setIcon({ if (tabId) {
path: "assets/icons/enabled.png", chrome.browserAction.setIcon({
tabId, path: "assets/icons/enabled.png",
}); tabId,
});
}
}; };
/** /**
* @function enablePopup * @function enablePopup
* @description Enables popup * @description Enables popup if there is a tab
* *
* @param {string} [tabId] * @param {string} [tabId]
*/ */
const enablePopup = (tabId) => { const enablePopup = (tabId) => {
chrome.browserAction.setPopup({ if (tabId) {
popup: "popup.html", chrome.browserAction.setPopup({
tabId, popup: "popup.html",
}); tabId,
});
}
}; };
/** /**
@ -170,27 +177,54 @@ const updateCache = (hostname, state) => {
}); });
}; };
/**
* @function updateState
* @description Set an extension state
*
* @param {string} [tabId]
* @param {string} [state]
*/
const updateState = (tabId, state) => {
switch (state) {
case "loading":
chrome.tabs.insertCSS(tabId, {
file: "styles/content.css",
runAt: "document_start",
});
break;
case "ready":
chrome.tabs.removeCSS(tabId, {
file: "styles/content.css",
});
break;
default:
break;
}
};
/** /**
* @description Listens to content messages * @description Listens to content messages
*/ */
chrome.runtime.onMessage.addListener((request, sender, responseCallback) => { chrome.runtime.onMessage.addListener((request, sender, responseCallback) => {
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
const hasPermission = !sender.frameId || sender.frameId === 0;
const tab = tabs[0]; const tab = tabs[0];
const tabId = tab.id; const tabId = tab ? tab.id : undefined;
switch (request.type) { switch (request.type) {
case "DISABLE_ICON": case "DISABLE_ICON":
disableIcon(tabId); if (hasPermission) disableIcon(tabId);
break; break;
case "DISABLE_POPUP": case "DISABLE_POPUP":
disablePopup(tabId); if (hasPermission) disablePopup(tabId);
break; break;
case "ENABLE_ICON": case "ENABLE_ICON":
enableIcon(tabId); if (hasPermission) enableIcon(tabId);
break; break;
case "ENABLE_POPUP": case "ENABLE_POPUP":
enablePopup(tabId); if (hasPermission) enablePopup(tabId);
break; break;
case "GET_CACHE": case "GET_CACHE":
getCache(request.hostname, responseCallback); getCache(request.hostname, responseCallback);
@ -204,6 +238,9 @@ chrome.runtime.onMessage.addListener((request, sender, responseCallback) => {
case "UPDATE_CACHE": case "UPDATE_CACHE":
updateCache(request.hostname, request.state); updateCache(request.hostname, request.state);
break; break;
case "UPDATE_STATE":
if (hasPermission) updateState(tabId, request.state);
break;
default: default:
break; break;
} }