diff options
Diffstat (limited to 'toolkit/components/webextensions/ext-storage.js')
-rw-r--r-- | toolkit/components/webextensions/ext-storage.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/toolkit/components/webextensions/ext-storage.js b/toolkit/components/webextensions/ext-storage.js new file mode 100644 index 000000000..b1e22c46c --- /dev/null +++ b/toolkit/components/webextensions/ext-storage.js @@ -0,0 +1,46 @@ +"use strict"; + +var {classes: Cc, interfaces: Ci, utils: Cu} = Components; + +XPCOMUtils.defineLazyModuleGetter(this, "ExtensionStorage", + "resource://gre/modules/ExtensionStorage.jsm"); + +Cu.import("resource://gre/modules/ExtensionUtils.jsm"); +var { + EventManager, +} = ExtensionUtils; + +function storageApiFactory(context) { + let {extension} = context; + return { + storage: { + local: { + get: function(spec) { + return ExtensionStorage.get(extension.id, spec); + }, + set: function(items) { + return ExtensionStorage.set(extension.id, items, context); + }, + remove: function(keys) { + return ExtensionStorage.remove(extension.id, keys); + }, + clear: function() { + return ExtensionStorage.clear(extension.id); + }, + }, + + onChanged: new EventManager(context, "storage.onChanged", fire => { + let listenerLocal = changes => { + fire(changes, "local"); + }; + + ExtensionStorage.addOnChangedListener(extension.id, listenerLocal); + return () => { + ExtensionStorage.removeOnChangedListener(extension.id, listenerLocal); + }; + }).api(), + }, + }; +} +extensions.registerSchemaAPI("storage", "addon_parent", storageApiFactory); +extensions.registerSchemaAPI("storage", "content_parent", storageApiFactory); |