michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/licenses/publicdomain/ */ michael@0: michael@0: Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); michael@0: Components.utils.import("resource://gre/modules/Services.jsm"); michael@0: michael@0: // The profile directory is already set up in the head_ files. michael@0: michael@0: function arrayenumerator(a) michael@0: { michael@0: return { michael@0: i_: 0, michael@0: QueryInterface: XPCOMUtils.generateQI([Ci.nsISimpleEnumerator]), michael@0: hasMoreElements: function ae_hasMoreElements() { michael@0: return this.i_ < a.length; michael@0: }, michael@0: getNext: function ae_getNext() { michael@0: return a[this.i_++]; michael@0: } michael@0: }; michael@0: } michael@0: michael@0: function run_test() { michael@0: var ps = Cc["@mozilla.org/preferences-service;1"]. michael@0: getService(Ci.nsIPrefService).QueryInterface(Ci.nsIPrefBranch); michael@0: michael@0: var extprefs = [do_get_file("extdata")]; michael@0: michael@0: var extProvider = { michael@0: QueryInterface: XPCOMUtils.generateQI([Ci.nsIDirectoryServiceProvider, michael@0: Ci.nsIDirectoryServiceProvider2]), michael@0: getFile: function ep_getFile() { michael@0: throw Cr.NS_ERROR_FAILURE; michael@0: }, michael@0: michael@0: getFiles: function ep_getFiles(key) { michael@0: if (key != "ExtPrefDL") michael@0: throw Cr.NS_ERROR_FAILURE; michael@0: michael@0: return arrayenumerator(extprefs); michael@0: } michael@0: }; michael@0: michael@0: let prefFile = do_get_file("data/testPref.js"); michael@0: michael@0: do_check_throws(function() { michael@0: ps.getBoolPref("testExtPref.bool"); michael@0: }, Cr.NS_ERROR_UNEXPECTED); michael@0: do_check_throws(function() { michael@0: ps.getBoolPref("testPref.bool1"); michael@0: }, Cr.NS_ERROR_UNEXPECTED); michael@0: michael@0: ps.readUserPrefs(prefFile); michael@0: michael@0: do_check_true(ps.getBoolPref("testPref.bool1")); michael@0: ps.setBoolPref("testPref.bool1", false); michael@0: do_check_false(ps.getBoolPref("testPref.bool1")); michael@0: michael@0: dirSvc.registerProvider(extProvider); michael@0: Services.obs.notifyObservers(null, "load-extension-defaults", null); michael@0: michael@0: // The extension default should be available. michael@0: do_check_true(ps.getBoolPref("testExtPref.bool")); michael@0: michael@0: // The extension default should not override existing user prefs michael@0: do_check_false(ps.getBoolPref("testPref.bool2")); michael@0: michael@0: // The extension default should not modify existing set values michael@0: do_check_false(ps.getBoolPref("testPref.bool1")); michael@0: }