let port = browser.runtime.connectNative("accent_color"); let current = null; function broadcast(color) { browser.tabs.query({}).then(tabs => { for (let tab of tabs) { browser.tabs.sendMessage(tab.id, {color}).catch(() => {}); } }); browser.theme.update({colors: {toolbar: color}}); } port.onMessage.addListener(msg => { if (msg.color && msg.color !== current) { current = msg.color; broadcast(current); } }); function poll() { try { port.postMessage({query: "color"}); } catch (e) { // ignore } } setInterval(poll, 1000); poll(); browser.runtime.onMessage.addListener((msg, sender) => { if (msg.request === "color") { return Promise.resolve({color: current}); } });