Harden the Chrome storage API lib.
Clear/delete should clear/delete data that's about to get set.
This commit is contained in:
parent
0675146d22
commit
0b00e393b6
98
lib/$.coffee
98
lib/$.coffee
@ -228,42 +228,49 @@ $.localKeys = [
|
|||||||
'usercss'
|
'usercss'
|
||||||
]
|
]
|
||||||
# https://developer.chrome.com/extensions/storage.html
|
# https://developer.chrome.com/extensions/storage.html
|
||||||
$.delete = (keys) ->
|
do ->
|
||||||
chrome.storage.sync.remove keys
|
|
||||||
$.get = (key, val, cb) ->
|
|
||||||
if typeof cb is 'function'
|
|
||||||
items = $.item key, val
|
|
||||||
else
|
|
||||||
items = key
|
|
||||||
cb = val
|
|
||||||
|
|
||||||
localItems = null
|
|
||||||
syncItems = null
|
|
||||||
for key, val of items
|
|
||||||
if key in $.localKeys
|
|
||||||
(localItems or= {})[key] = val
|
|
||||||
else
|
|
||||||
(syncItems or= {})[key] = val
|
|
||||||
|
|
||||||
count = 0
|
|
||||||
done = (item) ->
|
|
||||||
if chrome.runtime.lastError
|
|
||||||
c.error chrome.runtime.lastError.message
|
|
||||||
$.extend items, item
|
|
||||||
cb items unless --count
|
|
||||||
|
|
||||||
if localItems
|
|
||||||
count++
|
|
||||||
chrome.storage.local.get localItems, done
|
|
||||||
if syncItems
|
|
||||||
count++
|
|
||||||
chrome.storage.sync.get syncItems, done
|
|
||||||
$.set = do ->
|
|
||||||
items =
|
items =
|
||||||
sync: {}
|
|
||||||
local: {}
|
local: {}
|
||||||
timeout = {}
|
sync: {}
|
||||||
|
|
||||||
|
$.delete = (keys) ->
|
||||||
|
if typeof keys is 'string'
|
||||||
|
keys = [keys]
|
||||||
|
for key in keys
|
||||||
|
delete items.local[key]
|
||||||
|
delete items.sync[key]
|
||||||
|
chrome.storage.sync.remove keys
|
||||||
|
|
||||||
|
$.get = (key, val, cb) ->
|
||||||
|
if typeof cb is 'function'
|
||||||
|
data = $.item key, val
|
||||||
|
else
|
||||||
|
data = key
|
||||||
|
cb = val
|
||||||
|
|
||||||
|
localItems = null
|
||||||
|
syncItems = null
|
||||||
|
for key, val of data
|
||||||
|
if key in $.localKeys
|
||||||
|
(localItems or= {})[key] = val
|
||||||
|
else
|
||||||
|
(syncItems or= {})[key] = val
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
done = (result) ->
|
||||||
|
if chrome.runtime.lastError
|
||||||
|
c.error chrome.runtime.lastError.message
|
||||||
|
$.extend data, result
|
||||||
|
cb data unless --count
|
||||||
|
|
||||||
|
if localItems
|
||||||
|
count++
|
||||||
|
chrome.storage.local.get localItems, done
|
||||||
|
if syncItems
|
||||||
|
count++
|
||||||
|
chrome.storage.sync.get syncItems, done
|
||||||
|
|
||||||
|
timeout = {}
|
||||||
setArea = (area) ->
|
setArea = (area) ->
|
||||||
data = items[area]
|
data = items[area]
|
||||||
return if !Object.keys(data).length or timeout[area]
|
return if !Object.keys(data).length or timeout[area]
|
||||||
@ -277,11 +284,11 @@ $.set = do ->
|
|||||||
delete timeout[area]
|
delete timeout[area]
|
||||||
items[area] = {}
|
items[area] = {}
|
||||||
|
|
||||||
setAll = $.debounce 5 * $.SECOND, ->
|
setAll = $.debounce $.SECOND, ->
|
||||||
setArea 'local'
|
setArea 'local'
|
||||||
setArea 'sync'
|
setArea 'sync'
|
||||||
|
|
||||||
(key, val) ->
|
$.set = (key, val) ->
|
||||||
if typeof key is 'string'
|
if typeof key is 'string'
|
||||||
items.sync[key] = val
|
items.sync[key] = val
|
||||||
else
|
else
|
||||||
@ -290,15 +297,18 @@ $.set = do ->
|
|||||||
items.local[key] = items.sync[key]
|
items.local[key] = items.sync[key]
|
||||||
delete items.sync[key]
|
delete items.sync[key]
|
||||||
setAll()
|
setAll()
|
||||||
$.clear = (cb) ->
|
|
||||||
count = 2
|
$.clear = (cb) ->
|
||||||
done = ->
|
items.local = {}
|
||||||
if chrome.runtime.lastError
|
items.sync = {}
|
||||||
c.error chrome.runtime.lastError.message
|
count = 2
|
||||||
return
|
done = ->
|
||||||
cb?() unless --count
|
if chrome.runtime.lastError
|
||||||
chrome.storage.local.clear done
|
c.error chrome.runtime.lastError.message
|
||||||
chrome.storage.sync.clear done
|
return
|
||||||
|
cb?() unless --count
|
||||||
|
chrome.storage.local.clear done
|
||||||
|
chrome.storage.sync.clear done
|
||||||
<% } else { %>
|
<% } else { %>
|
||||||
# http://wiki.greasespot.net/Main_Page
|
# http://wiki.greasespot.net/Main_Page
|
||||||
$.sync = do ->
|
$.sync = do ->
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user