diff -r 000000000000 -r 6474c204b198 webapprt/DirectoryProvider.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webapprt/DirectoryProvider.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,56 @@ +/* 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/. */ + +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cu = Components.utils; + +const WEBAPP_REGISTRY_DIR = "WebappRegD"; +const NS_APP_CHROME_DIR_LIST = "AChromDL"; + +Cu.import("resource://gre/modules/FileUtils.jsm"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://webapprt/modules/WebappRT.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); + +function DirectoryProvider() {} + +DirectoryProvider.prototype = { + classID: Components.ID("{e1799fda-4b2f-4457-b671-e0641d95698d}"), + + QueryInterface: XPCOMUtils.generateQI([Ci.nsIDirectoryServiceProvider, + Ci.nsIDirectoryServiceProvider2]), + + getFile: function(prop, persistent) { + if (prop == WEBAPP_REGISTRY_DIR) { + let dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); + dir.initWithPath(WebappRT.config.registryDir); + return dir; + } + + // We return null to show failure instead of throwing an error, + // which works with the way the interface is called (per bug 529077). + return null; + }, + + getFiles: function(prop, persistent) { + if (prop == NS_APP_CHROME_DIR_LIST) { + return { + _done: false, + QueryInterface: XPCOMUtils.generateQI([Ci.nsISimpleEnumerator]), + hasMoreElements: function() { + return !this._done; + }, + getNext: function() { + this._done = true; + return FileUtils.getDir("AppRegD", ["chrome"], false); + } + }; + } + + return null; + }, +}; + +this.NSGetFactory = XPCOMUtils.generateNSGetFactory([DirectoryProvider]);