From 6a46703e98bb7a0c14bb0c12e824f8d6c13bc822 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Thu, 22 Feb 2018 15:08:59 -0700 Subject: [PATCH] added sessionStorage fallback --- client/coral-framework/services/storage.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/client/coral-framework/services/storage.js b/client/coral-framework/services/storage.js index de96fdf4c..66e2c96cd 100644 --- a/client/coral-framework/services/storage.js +++ b/client/coral-framework/services/storage.js @@ -1,9 +1,10 @@ import uuid from 'uuid/v4'; function getStorage(type) { - let storage = window[type], - x = '__storage_test__'; + let storage; try { + storage = window[type]; + const x = '__storage_test__'; storage.setItem(x, x); storage.removeItem(x); } catch (e) { @@ -11,6 +12,8 @@ function getStorage(type) { e instanceof DOMException && // everything except Firefox (e.code === 22 || + // SecurityError related to having 3rd party cookies disabled. + e.code === 18 || // Firefox e.code === 1014 || @@ -19,14 +22,18 @@ function getStorage(type) { // everything except Firefox e.name === 'QuotaExceededError' || // Firefox - e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && - // acknowledge QuotaExceededError only if there's something already stored - storage.length !== 0; + e.name === 'NS_ERROR_DOM_QUOTA_REACHED'); if (!ignore) { - console.warning(e); // eslint-disable-line - return null; + console.warn(e); + } + + // When third party cookies are disabled, session storage is readable/ + // writable, but localStorage is not. Try to get the sessionStorage to use. + if (type !== 'sessionStorage') { + return getStorage('sessionStorage'); } } + return storage; }