diff --git a/platform/chromium/vapi-background.js b/platform/chromium/vapi-background.js index 2cae2ba6f6112..2d21f34912ae9 100644 --- a/platform/chromium/vapi-background.js +++ b/platform/chromium/vapi-background.js @@ -1433,6 +1433,13 @@ vAPI.adminStorage = (( ) => { return bin[key]; } return bin; + }, + onChanged: function(callback) { + webext.storage.onChanged.addListener((changes, areaName) => { + if ( areaName === 'managed' ) { + callback(changes); + } + }); } }; })(); diff --git a/platform/chromium/webext.js b/platform/chromium/webext.js index db7e7d4f9f21a..559b53471e66a 100644 --- a/platform/chromium/webext.js +++ b/platform/chromium/webext.js @@ -158,6 +158,11 @@ if ( chrome.storage.sync instanceof Object ) { }; } +// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/onChanged +if ( chrome.storage.onChanged instanceof Object ) { + webext.storage.onChanged = chrome.storage.onChanged; +} + // https://bugs.chromium.org/p/chromium/issues/detail?id=608854 if ( chrome.tabs.removeCSS instanceof Function ) { webext.tabs.removeCSS = promisifyNoFail(chrome.tabs, 'removeCSS'); diff --git a/src/js/start.js b/src/js/start.js index 63285e5883ec1..6aea7cb718abb 100644 --- a/src/js/start.js +++ b/src/js/start.js @@ -302,6 +302,9 @@ const createDefaultProps = function() { /******************************************************************************/ try { + // https://github.com/uBlockOrigin/uBlock-issues/issues/1608 + vAPI.adminStorage.onChanged(( ) => vAPI.app.restart()); + // https://github.com/gorhill/uBlock/issues/531 await µb.restoreAdminSettings(); log.info(`Admin settings ready ${Date.now()-vAPI.T0} ms after launch`);