feat(scripts): add state management to background scripts
This commit is contained in:
parent
8349c52555
commit
f4d87d053b
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user