From 343ebe341bcebe4cde8c7b079c75bcbf3fead2cc Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 13 Aug 2019 11:47:29 -0400 Subject: [PATCH] safari app messaging for storage service --- src/services/browserStorage.service.ts | 49 +++++++++++--------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/src/services/browserStorage.service.ts b/src/services/browserStorage.service.ts index b6c2c1fd5d..40aba6067a 100644 --- a/src/services/browserStorage.service.ts +++ b/src/services/browserStorage.service.ts @@ -3,31 +3,23 @@ import { StorageService, } from 'jslib/abstractions'; -export default class BrowserStorageService implements StorageService { - private safariStorageApi: any; - private chromeStorageApi: any; +import { SafariApp } from '../browser/safariApp'; - constructor(private platformUtilsService: PlatformUtilsService, private secure: boolean) { - if (platformUtilsService.isSafari()) { - this.safariStorageApi = secure ? safari.extension.secureSettings : safari.extension.settings; - } else { +export default class BrowserStorageService implements StorageService { + private chromeStorageApi: any; + private isSafari: boolean; + + constructor(platformUtilsService: PlatformUtilsService) { + this.isSafari = platformUtilsService.isSafari(); + if (!this.isSafari) { this.chromeStorageApi = chrome.storage.local; } } - get(key: string): Promise { - if (this.safariStorageApi) { - return new Promise((resolve) => { - const json = this.safariStorageApi.getItem(key); - if (json) { - const obj = JSON.parse(json); - if (obj != null && obj[key] != null) { - resolve(obj[key] as T); - return; - } - } - resolve(null); - }); + async get(key: string): Promise { + if (this.isSafari) { + const obj = await SafariApp.sendMessageToApp('storage_get', key); + return obj as T; } else { return new Promise((resolve) => { this.chromeStorageApi.get(key, (obj: any) => { @@ -41,11 +33,13 @@ export default class BrowserStorageService implements StorageService { } } - save(key: string, obj: any): Promise { + async save(key: string, obj: any): Promise { const keyedObj = { [key]: obj }; - if (this.safariStorageApi) { - this.safariStorageApi.setItem(key, JSON.stringify(keyedObj)); - return Promise.resolve(); + if (this.isSafari) { + await SafariApp.sendMessageToApp('storage_save', { + key: key, + obj: obj, + }); } else { return new Promise((resolve) => { this.chromeStorageApi.set(keyedObj, () => { @@ -55,10 +49,9 @@ export default class BrowserStorageService implements StorageService { } } - remove(key: string): Promise { - if (this.safariStorageApi) { - this.safariStorageApi.removeItem(key); - return Promise.resolve(); + async remove(key: string): Promise { + if (this.isSafari) { + await SafariApp.sendMessageToApp('storage_remove', key); } else { return new Promise((resolve) => { this.chromeStorageApi.remove(key, () => {