diff options
| -rw-r--r-- | ext/js/background/backend.js | 13 | ||||
| -rw-r--r-- | ext/js/pages/settings/settings-controller.js | 10 | 
2 files changed, 18 insertions, 5 deletions
| diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index f61e60b6..f3568694 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -180,9 +180,11 @@ class Backend {          const onMessage = this._onMessageWrapper.bind(this);          chrome.runtime.onMessage.addListener(onMessage); -        const onPermissionsChanged = this._onWebExtensionEventWrapper(this._onPermissionsChanged.bind(this)); -        chrome.permissions.onAdded.addListener(onPermissionsChanged); -        chrome.permissions.onRemoved.addListener(onPermissionsChanged); +        if (this._canObservePermissionsChanges()) { +            const onPermissionsChanged = this._onWebExtensionEventWrapper(this._onPermissionsChanged.bind(this)); +            chrome.permissions.onAdded.addListener(onPermissionsChanged); +            chrome.permissions.onRemoved.addListener(onPermissionsChanged); +        }          chrome.runtime.onInstalled.addListener(this._onInstalled.bind(this));      } @@ -2095,7 +2097,12 @@ class Backend {          this._updateBadge();      } +    _canObservePermissionsChanges() { +        return isObject(chrome.permissions) && isObject(chrome.permissions.onAdded) && isObject(chrome.permissions.onRemoved); +    } +      _hasRequiredPermissionsForSettings(options) { +        if (!this._canObservePermissionsChanges()) { return true; }          return this._permissions === null || this._permissionsUtil.hasRequiredPermissionsForOptions(this._permissions, options);      } diff --git a/ext/js/pages/settings/settings-controller.js b/ext/js/pages/settings/settings-controller.js index 4a86470d..5fa5b660 100644 --- a/ext/js/pages/settings/settings-controller.js +++ b/ext/js/pages/settings/settings-controller.js @@ -51,8 +51,10 @@ class SettingsController extends EventDispatcher {      prepare() {          yomichan.on('optionsUpdated', this._onOptionsUpdated.bind(this)); -        chrome.permissions.onAdded.addListener(this._onPermissionsChanged.bind(this)); -        chrome.permissions.onRemoved.addListener(this._onPermissionsChanged.bind(this)); +        if (this._canObservePermissionsChanges()) { +            chrome.permissions.onAdded.addListener(this._onPermissionsChanged.bind(this)); +            chrome.permissions.onRemoved.addListener(this._onPermissionsChanged.bind(this)); +        }      }      async refresh() { @@ -206,4 +208,8 @@ class SettingsController extends EventDispatcher {          const permissions = await this._permissionsUtil.getAllPermissions();          this.trigger(event, {permissions});      } + +    _canObservePermissionsChanges() { +        return isObject(chrome.permissions) && isObject(chrome.permissions.onAdded) && isObject(chrome.permissions.onRemoved); +    }  } |