Harden the Chrome storage API lib.
Clear/delete should clear/delete data that's about to get set.
This commit is contained in:
parent
c606cc05a0
commit
7f0e719d19
@ -293,42 +293,49 @@ $.localKeys = [
|
||||
'usercss'
|
||||
]
|
||||
# https://developer.chrome.com/extensions/storage.html
|
||||
$.delete = (keys) ->
|
||||
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 ->
|
||||
do ->
|
||||
items =
|
||||
sync: {}
|
||||
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) ->
|
||||
data = items[area]
|
||||
return if !Object.keys(data).length or timeout[area]
|
||||
@ -342,11 +349,11 @@ $.set = do ->
|
||||
delete timeout[area]
|
||||
items[area] = {}
|
||||
|
||||
setAll = $.debounce 5 * $.SECOND, ->
|
||||
setAll = $.debounce $.SECOND, ->
|
||||
setArea 'local'
|
||||
setArea 'sync'
|
||||
|
||||
(key, val) ->
|
||||
$.set = (key, val) ->
|
||||
if typeof key is 'string'
|
||||
items.sync[key] = val
|
||||
else
|
||||
@ -355,15 +362,18 @@ $.set = do ->
|
||||
items.local[key] = items.sync[key]
|
||||
delete items.sync[key]
|
||||
setAll()
|
||||
$.clear = (cb) ->
|
||||
count = 2
|
||||
done = ->
|
||||
if chrome.runtime.lastError
|
||||
c.error chrome.runtime.lastError.message
|
||||
return
|
||||
cb?() unless --count
|
||||
chrome.storage.local.clear done
|
||||
chrome.storage.sync.clear done
|
||||
|
||||
$.clear = (cb) ->
|
||||
items.local = {}
|
||||
items.sync = {}
|
||||
count = 2
|
||||
done = ->
|
||||
if chrome.runtime.lastError
|
||||
c.error chrome.runtime.lastError.message
|
||||
return
|
||||
cb?() unless --count
|
||||
chrome.storage.local.clear done
|
||||
chrome.storage.sync.clear done
|
||||
<% } else { %>
|
||||
|
||||
# http://wiki.greasespot.net/Main_Page
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user