let browser = browser || chrome; function sendMessageToCurrentTab(subject, value) { subject = subject || ''; value = value || null; browser.tabs.query({active: true, currentWindow: true}, function(tabs){ if (tabs !== []) { browser.tabs.sendMessage(tabs[0].id, {'subject' : subject, 'value' : value}, function(response) {}); console.debug('send message to notification'); } }); } /** * Retrieve data from local storage * @param string key */ function getStorage(key) { return new Promise((resolve, reject) => { browser.storage.local.get(key, (items) => { resolve(items); }); }); } /** * Set data into local storage * @param string key */ function setStorage(key, value) { return new Promise((resolve, reject) => { getStorage(key) .then((items) => { let data = {}; data[key] = value; browser.storage.local.set(data, () => { resolve(); }); }) }); } browser.runtime.onMessage.addListener(function(message, sender, sendResponse){ switch (message.subject) { case "updateBlacklist": console.debug("Keywords black list must be updated"); let rawValue = message.value; let blacklist = rawValue.split(',').filter(n => n); blacklist = blacklist.map(function(keyword){ return keyword.trim(); }); console.debug("Update list"); setStorage('blacklist', blacklist).then(() => { sendMessageToCurrentTab('updateBlacklist', blacklist); }); break; case "getBlacklist": getStorage('blacklist').then((items) => { sendResponse({'subject':'blacklistValues', 'value':items}); }); default: } return true; }); browser.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { if (changeInfo.status == 'complete') { getStorage('blacklist').then((items) => { sendMessageToCurrentTab('tabsUpdated', items.blacklist); }); } });