diff options
| author | Einar Egilsson <einar@einaregilsson.com> | 2016-02-22 11:13:53 +0000 | 
|---|---|---|
| committer | Einar Egilsson <einar@einaregilsson.com> | 2016-02-22 11:13:53 +0000 | 
| commit | 4320359ef8dae668f9916c5db1e7de8efab8aa8d (patch) | |
| tree | 8b7df77fc09de35444ee692b96dc5a577e6381fd | |
| parent | 18ff916419996e991fd5679b74850938182495fa (diff) | |
Use built in ExtensionStorage module
| -rw-r--r-- | js/firefox/background-shim.js | 6 | ||||
| -rw-r--r-- | js/firefox/extension-storage.jsm | 156 | 
2 files changed, 3 insertions, 159 deletions
diff --git a/js/firefox/background-shim.js b/js/firefox/background-shim.js index 3551e48..d937104 100644 --- a/js/firefox/background-shim.js +++ b/js/firefox/background-shim.js @@ -68,8 +68,8 @@ migrateFromOlderVersion();  function makeUrl(relativeUrl) {  	return self.data.url(relativeUrl).replace('/data/', '/');  }  -//Get the extension storage from Nightly. -Cu.import(makeUrl('js/firefox/extension-storage.jsm')); + +Cu.import('resource://gre/modules/ExtensionStorage.jsm');  //Create the browser action:  var { ToggleButton } = require("sdk/ui/button/toggle"); @@ -107,7 +107,7 @@ var chrome = {  		},  		clearCache : function() { -			ExtensionStorage.clearCache(); +			ExtensionStorage.cache.clear();  		},  		onChanged : { diff --git a/js/firefox/extension-storage.jsm b/js/firefox/extension-storage.jsm deleted file mode 100644 index f102b6f..0000000 --- a/js/firefox/extension-storage.jsm +++ /dev/null @@ -1,156 +0,0 @@ -//Copied from resource://gre/modules/ExtensionStorage.jsm in Nightly. -//Will be removed when this addon moves to the WebExtensions API. - -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -this.EXPORTED_SYMBOLS = ["ExtensionStorage"]; - -const Ci = Components.interfaces; -const Cc = Components.classes; -const Cu = Components.utils; -const Cr = Components.results; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/osfile.jsm") -Cu.import("resource://gre/modules/AsyncShutdown.jsm"); - -let Path = OS.Path; -let profileDir = OS.Constants.Path.profileDir; - -this.ExtensionStorage = { -  cache: new Map(), -  listeners: new Map(), - -  extensionDir: Path.join(profileDir, "browser-extension-data"), - -  getExtensionDir(extensionId) { -    return Path.join(this.extensionDir, extensionId); -  }, - -  getStorageFile(extensionId) { -    return Path.join(this.extensionDir, extensionId, "storage.js"); -  }, - -  clearCache : function() { -    this.cache = new Map(); -  }, - -  read(extensionId) { -    if (this.cache.has(extensionId)) { -      return this.cache.get(extensionId); -    } - -    let path = this.getStorageFile(extensionId); -    let decoder = new TextDecoder(); -    let promise = OS.File.read(path); -    promise = promise.then(array => { -      return JSON.parse(decoder.decode(array)); -    }).catch(() => { -      Cu.reportError("Unable to parse JSON data for extension storage."); -      return {}; -    }); -    this.cache.set(extensionId, promise); -    return promise; -  }, - -  write(extensionId) { -    let promise = this.read(extensionId).then(extData => { -      let encoder = new TextEncoder(); -      let array = encoder.encode(JSON.stringify(extData)); -      let path = this.getStorageFile(extensionId); -      OS.File.makeDir(this.getExtensionDir(extensionId), {ignoreExisting: true, from: profileDir}); -      let promise = OS.File.writeAtomic(path, array); -      return promise; -    }).catch(() => { -      // Make sure this promise is never rejected. -      Cu.reportError("Unable to write JSON data for extension storage."); -    }); - -    AsyncShutdown.profileBeforeChange.addBlocker( -      "ExtensionStorage: Finish writing extension data", -      promise); - -    return promise.then(() => { -      AsyncShutdown.profileBeforeChange.removeBlocker(promise); -    }); -  }, - -  set(extensionId, items) { -    return this.read(extensionId).then(extData => { -      let changes = {}; -      for (let prop in items) { -        changes[prop] = {oldValue: extData[prop], newValue: items[prop]}; -        extData[prop] = items[prop]; -      } - -      let listeners = this.listeners.get(extensionId); -      if (listeners) { -        for (let listener of listeners) { -          listener(changes); -        } -      } - -      return this.write(extensionId); -    }); -  }, - -  remove(extensionId, items) { -    return this.read(extensionId).then(extData => { -      let changes = {}; -      for (let prop in items) { -        changes[prop] = {oldValue: extData[prop]}; -        delete extData[prop]; -      } - -      let listeners = this.listeners.get(extensionId); -      if (listeners) { -        for (let listener of listeners) { -          listener(changes); -        } -      } - -      return this.write(extensionId); -    }); -  }, - -  get(extensionId, keys) { -    return this.read(extensionId).then(extData => { -      let result = {}; -      if (keys === null) { -        Object.assign(result, extData); -      } else if (typeof(keys) == "object") { -        for (let prop in keys) { -          if (prop in extData) { -            result[prop] = extData[prop]; -          } else { -            result[prop] = keys[prop]; -          } -        } -      } else if (typeof(keys) == "string") { -        result[prop] = extData[prop] || undefined; -      } else { -        for (let prop of keys) { -          result[prop] = extData[prop] || undefined; -        } -      } - -      return result; -    }); -  }, - -  addOnChangedListener(extensionId, listener) { -    let listeners = this.listeners.get(extensionId) || new Set(); -    listeners.add(listener); -    this.listeners.set(extensionId, listeners); -  }, - -  removeOnChangedListener(extensionId, listener) { -    let listeners = this.listeners.get(extensionId); -    listeners.delete(listener); -  }, -};  | 
