blob: 23ef0ad2a7ca7adabe21ded4fe53c7514e9874fb [file] [log] [blame]
#---------------------------------------------------------------------------------
# weinre is available under *either* the terms of the modified BSD license *or* the
# MIT License (2008). See http:#opensource.org/licenses/alphabetical for full text.
#
# Copyright (c) 2010, 2011 IBM Corporation
#---------------------------------------------------------------------------------
Weinre = require('../common/Weinre')
Native = require('../common/Native')
#-------------------------------------------------------------------------------
module.exports = class WiDOMStorageImpl
constructor: ->
#---------------------------------------------------------------------------
getDOMStorageEntries: (storageId, callback) ->
storageArea = _getStorageArea(storageId)
unless storageArea
Weinre.logWarning arguments.callee.signature + " passed an invalid storageId: " + storageId
return
result = []
length = storageArea.length
i = 0
while i < length
key = storageArea.key(i)
val = storageArea.getItem(key)
result.push [ key, val ]
i++
if callback
Weinre.WeinreTargetCommands.sendClientCallback callback, [ result ]
#---------------------------------------------------------------------------
setDOMStorageItem: (storageId, key, value, callback) ->
storageArea = _getStorageArea(storageId)
unless storageArea
Weinre.logWarning arguments.callee.signature + " passed an invalid storageId: " + storageId
return
result = true
try
if storageArea == window.localStorage
Native.LocalStorage_setItem key, value
else Native.SessionStorage_setItem key, value if storageArea == window.sessionStorage
catch e
result = false
if callback
Weinre.WeinreTargetCommands.sendClientCallback callback, [ result ]
#---------------------------------------------------------------------------
removeDOMStorageItem: (storageId, key, callback) ->
storageArea = _getStorageArea(storageId)
unless storageArea
Weinre.logWarning arguments.callee.signature + " passed an invalid storageId: " + storageId
return
result = true
try
if storageArea == window.localStorage
Native.LocalStorage_removeItem key
else
if storageArea == window.sessionStorage
Native.SessionStorage_removeItem key
catch e
result = false
Weinre.WeinreTargetCommands.sendClientCallback callback, [ result ] if callback
#---------------------------------------------------------------------------
initialize: ->
if window.localStorage
Weinre.wi.DOMStorageNotify.addDOMStorage
id: 1
host: window.location.host
isLocalStorage: true
window.localStorage.setItem = (key, value) ->
Native.LocalStorage_setItem key, value
_storageEventHandler storageArea: window.localStorage
window.localStorage.removeItem = (key) ->
Native.LocalStorage_removeItem key
_storageEventHandler storageArea: window.localStorage
window.localStorage.clear = ->
Native.LocalStorage_clear()
_storageEventHandler storageArea: window.localStorage
if window.sessionStorage
Weinre.wi.DOMStorageNotify.addDOMStorage
id: 2
host: window.location.host
isLocalStorage: false
window.sessionStorage.setItem = (key, value) ->
Native.SessionStorage_setItem key, value
_storageEventHandler storageArea: window.sessionStorage
window.sessionStorage.removeItem = (key) ->
Native.SessionStorage_removeItem key
_storageEventHandler storageArea: window.sessionStorage
window.sessionStorage.clear = ->
Native.SessionStorage_clear()
_storageEventHandler storageArea: window.sessionStorage
document.addEventListener "storage", _storageEventHandler, false
#-------------------------------------------------------------------------------
_getStorageArea = (storageId) ->
if storageId == 1
return window.localStorage
else return window.sessionStorage if storageId == 2
null
#-------------------------------------------------------------------------------
_storageEventHandler = (event) ->
if event.storageArea == window.localStorage
storageId = 1
else if event.storageArea == window.sessionStorage
storageId = 2
else
return
Weinre.wi.DOMStorageNotify.updateDOMStorage storageId
#-------------------------------------------------------------------------------
require("../common/MethodNamer").setNamesForClass(module.exports)