From 3fe825cf30776b754ac6992dca3c8cc100870fb2 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Tue, 2 Mar 2021 22:27:53 -0500 Subject: [PATCH] Request persistent storage on Firefox (#1480) --- ext/js/background/backend.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index 715b916b..498b94db 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -183,6 +183,8 @@ class Backend { 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)); } async _prepareInternal() { @@ -372,6 +374,11 @@ class Backend { this._checkPermissions(); } + _onInstalled({reason}) { + if (reason !== 'install') { return; } + this._requestPersistentStorage(); + } + // Message handlers _onApiRequestBackendReadySignal(_params, sender) { @@ -2103,4 +2110,25 @@ class Backend { _hasRequiredPermissionsForSettings(options) { return this._permissions === null || this._permissionsUtil.hasRequiredPermissionsForOptions(this._permissions, options); } + + async _requestPersistentStorage() { + try { + if (await navigator.storage.persisted()) { return; } + + // Only request this permission for Firefox versions >= 77. + // https://bugzilla.mozilla.org/show_bug.cgi?id=1630413 + const {vendor, version} = await browser.runtime.getBrowserInfo(); + if (vendor !== 'Mozilla') { return; } + + const match = /^\d+/.exec(version); + if (match === null) { return; } + + const versionNumber = Number.parseInt(match[0]); + if (!(Number.isFinite(versionNumber) && versionNumber >= 77)) { return; } + + await navigator.storage.persist(); + } catch (e) { + // NOP + } + } }