1 /* See license.txt for terms of usage */ 2 3 // ********************************************************************************************* // 4 // Constants 5 6 var Cc = Components.classes; 7 var Ci = Components.interfaces; 8 var Cu = Components.utils; 9 10 Cu.import("resource://gre/modules/Services.jsm"); 11 12 var EXPORTED_SYMBOLS = ["PrefLoader"]; 13 14 var PrefLoader = {}; 15 PrefLoader.prefDomain = "extensions.firebug."; 16 17 // ********************************************************************************************* // 18 // Implementation 19 20 /** 21 * Load file with default preferences 22 * 23 * @param {Object} path Extension installation path 24 * @param {Object} fileName Preference file name 25 */ 26 function loadDefaultPrefs(path, fileName) 27 { 28 try 29 { 30 var uri; 31 var baseURI = Services.io.newFileURI(path); 32 33 // Compute preference file name path. 34 if (path.isDirectory()) 35 uri = Services.io.newURI("defaults/preferences/" + fileName, null, baseURI).spec; 36 else 37 uri = "jar:" + baseURI.spec + "!/defaults/preferences/" + fileName; 38 39 // Load preference file and use 'pref' function to define all prefs. 40 Services.scriptloader.loadSubScript(uri, {pref: pref}); 41 } 42 catch (err) 43 { 44 Cu.reportError(err); 45 } 46 } 47 48 // ********************************************************************************************* // 49 50 /** 51 * Clear preferences that are not modified by the user. This is requirement 52 * (or recommendation?) from AMO reviewers. 53 * 54 * @param {Object} domain 55 */ 56 function clearDefaultPrefs(domain) 57 { 58 domain = domain || PrefLoader.prefDomain; 59 var pb = Services.prefs.getDefaultBranch(domain); 60 61 var names = pb.getChildList(""); 62 for each (var name in names) 63 { 64 if (!pb.prefHasUserValue(name)) 65 pb.deleteBranch(name); 66 } 67 } 68 69 // ********************************************************************************************* // 70 71 /** 72 * Implement function that is used to define preferences in preference files. These 73 * are usually stored within 'defaults/preferences' directory. 74 * 75 * @param {Object} name Preference name 76 * @param {Object} value Preference value 77 */ 78 function pref(name, value) 79 { 80 try 81 { 82 var branch = Services.prefs.getDefaultBranch(""); 83 84 switch (typeof value) 85 { 86 case "boolean": 87 branch.setBoolPref(name, value); 88 break; 89 90 case "number": 91 branch.setIntPref(name, value); 92 break; 93 94 case "string": 95 var str = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString); 96 str.data = value; 97 branch.setComplexValue(name, Ci.nsISupportsString, str); 98 break; 99 } 100 } 101 catch (e) 102 { 103 Cu.reportError("prefLoader.pref; Firebug can't set default pref value for: " + name); 104 } 105 } 106 107 // ********************************************************************************************* // 108 // Duplicates firebug/lib/options 109 110 var prefTypeMap = (function() 111 { 112 var map = {}, br = Ci.nsIPrefBranch; 113 map["string"] = map[br.PREF_STRING] = "CharPref"; 114 map["boolean"] = map[br.PREF_BOOL] = "BoolPref"; 115 map["number"] = map[br.PREF_INT] = "IntPref"; 116 return map; 117 })(); 118 119 function getPref(prefDomain, name) 120 { 121 var prefName; 122 if (name == undefined) 123 prefName = PrefLoader.prefDomain + prefDomain; 124 else 125 prefName = prefDomain + "." + name; 126 127 var prefs = Services.prefs; 128 var type = prefTypeMap[prefs.getPrefType(prefName)]; 129 if (type) 130 var value = prefs["get" + type](prefName); 131 132 return value; 133 } 134 135 function setPref(name, value) 136 { 137 var prefName = PrefLoader.prefDomain + name; 138 var prefs = Services.prefs; 139 140 var type = prefTypeMap[typeof value]; 141 if (type) 142 value = prefs["set" + type](prefName, value); 143 144 return value; 145 } 146 147 function forceSave() 148 { 149 Services.prefs.savePrefFile(null); 150 } 151 152 // ********************************************************************************************* // 153 // Registration 154 155 PrefLoader.loadDefaultPrefs = loadDefaultPrefs; 156 PrefLoader.clearDefaultPrefs = clearDefaultPrefs; 157 PrefLoader.getPref = getPref; 158 PrefLoader.setPref = setPref; 159 PrefLoader.forceSave = forceSave; 160 161 // ********************************************************************************************* // 162