background.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. let browser = browser || chrome;
  2. function sendMessageToCurrentTab(subject, value) {
  3. subject = subject || '';
  4. value = value || null;
  5. browser.tabs.query({active: true, currentWindow: true}, function(tabs){
  6. if (tabs !== []) {
  7. browser.tabs.sendMessage(tabs[0].id, {'subject' : subject, 'value' : value}, function(response) {});
  8. console.debug('send message to notification');
  9. }
  10. });
  11. }
  12. /**
  13. * Retrieve data from local storage
  14. * @param string key
  15. */
  16. function getStorage(key) {
  17. return new Promise((resolve, reject) => {
  18. browser.storage.local.get(key, (items) => {
  19. resolve(items);
  20. });
  21. });
  22. }
  23. /**
  24. * Set data into local storage
  25. * @param string key
  26. */
  27. function setStorage(key, value) {
  28. return new Promise((resolve, reject) => {
  29. getStorage(key)
  30. .then((items) => {
  31. let data = {};
  32. data[key] = value;
  33. browser.storage.local.set(data, () => {
  34. resolve();
  35. });
  36. })
  37. });
  38. }
  39. browser.runtime.onMessage.addListener(function(message, sender, sendResponse){
  40. switch (message.subject) {
  41. case "updateBlacklist":
  42. console.debug("Keywords black list must be updated");
  43. let rawValue = message.value;
  44. let blacklist = rawValue.split(',').filter(n => n);
  45. blacklist = blacklist.map(function(keyword){
  46. return keyword.trim();
  47. });
  48. console.debug("Update list");
  49. setStorage('blacklist', blacklist).then(() => {
  50. sendMessageToCurrentTab('updateBlacklist', blacklist);
  51. });
  52. break;
  53. case "getBlacklist":
  54. getStorage('blacklist').then((items) => {
  55. sendResponse({'subject':'blacklistValues', 'value':items});
  56. });
  57. default:
  58. }
  59. return true;
  60. });
  61. browser.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
  62. if (changeInfo.status == 'complete') {
  63. getStorage('blacklist').then((items) => {
  64. sendMessageToCurrentTab('tabsUpdated', items.blacklist);
  65. });
  66. }
  67. });