diff options
Diffstat (limited to 'app/assets/javascripts/lib/utils/accessor.js')
-rw-r--r-- | app/assets/javascripts/lib/utils/accessor.js | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/app/assets/javascripts/lib/utils/accessor.js b/app/assets/javascripts/lib/utils/accessor.js index 39cffedcac6..d4a6d70c62c 100644 --- a/app/assets/javascripts/lib/utils/accessor.js +++ b/app/assets/javascripts/lib/utils/accessor.js @@ -1,4 +1,4 @@ -function isPropertyAccessSafe(base, property) { +function canAccessProperty(base, property) { let safe; try { @@ -10,7 +10,7 @@ function isPropertyAccessSafe(base, property) { return safe; } -function isFunctionCallSafe(base, functionName, ...args) { +function canCallFunction(base, functionName, ...args) { let safe = true; try { @@ -22,16 +22,28 @@ function isFunctionCallSafe(base, functionName, ...args) { return safe; } -function isLocalStorageAccessSafe() { +/** + * Determines if `window.localStorage` is available and + * can be written to and read from. + * + * Important: This is not a guarantee that + * `localStorage.setItem` will work in all cases. + * + * `setItem` can still throw exceptions and should be + * surrounded with a try/catch where used. + * + * See: https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem#exceptions + */ +function canUseLocalStorage() { let safe; - const TEST_KEY = 'isLocalStorageAccessSafe'; + const TEST_KEY = 'canUseLocalStorage'; const TEST_VALUE = 'true'; - safe = isPropertyAccessSafe(window, 'localStorage'); + safe = canAccessProperty(window, 'localStorage'); if (!safe) return safe; - safe = isFunctionCallSafe(window.localStorage, 'setItem', TEST_KEY, TEST_VALUE); + safe = canCallFunction(window.localStorage, 'setItem', TEST_KEY, TEST_VALUE); if (safe) window.localStorage.removeItem(TEST_KEY); @@ -39,9 +51,7 @@ function isLocalStorageAccessSafe() { } const AccessorUtilities = { - isPropertyAccessSafe, - isFunctionCallSafe, - isLocalStorageAccessSafe, + canUseLocalStorage, }; export default AccessorUtilities; |