summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorKris Maglione <maglione.k@gmail.com>2008-12-23 15:07:48 -0500
committerKris Maglione <maglione.k@gmail.com>2008-12-23 15:07:48 -0500
commit89698e3e050feb9876adaf01db6c7b6dee4697e3 (patch)
tree54a5d3e127621991828163610ca9b9f290e3dee2 /common
parentaa27e686c8732361d86490117a8ad69fb7ba0ee5 (diff)
downloadpentadactyl-89698e3e050feb9876adaf01db6c7b6dee4697e3.tar.gz
s/service[(".*?")]/services.get(\1)/g; s/service.get(\w+)/'services.create("' + lcfirst($1) + '")'/ge
Diffstat (limited to 'common')
-rw-r--r--common/content/buffer.js4
-rw-r--r--common/content/completion.js14
-rw-r--r--common/content/events.js5
-rw-r--r--common/content/find.js2
-rw-r--r--common/content/io.js28
-rw-r--r--common/content/liberator-overlay.js2
-rw-r--r--common/content/liberator.js47
-rw-r--r--common/content/options.js49
-rw-r--r--common/content/service.js34
-rw-r--r--common/content/services.js73
-rw-r--r--common/content/tabs.js8
-rw-r--r--common/content/ui.js4
12 files changed, 150 insertions, 120 deletions
diff --git a/common/content/buffer.js b/common/content/buffer.js
index 9cbab80d..fd750f6e 100644
--- a/common/content/buffer.js
+++ b/common/content/buffer.js
@@ -751,8 +751,8 @@ function Buffer() //{{{
{
try
{
- var cacheEntryDescriptor = service["cache"].createSession(proto, 0, true)
- .openCacheEntry(cacheKey, ACCESS_READ, false);
+ var cacheEntryDescriptor = services.get("cache").createSession(proto, 0, true)
+ .openCacheEntry(cacheKey, ACCESS_READ, false);
break;
}
catch (e) {}
diff --git a/common/content/completion.js b/common/content/completion.js
index a6bea8f0..fd465199 100644
--- a/common/content/completion.js
+++ b/common/content/completion.js
@@ -1551,7 +1551,7 @@ function Completion() //{{{
location: function location(context)
{
- if (!service["autoCompleteSearch"])
+ if (!services.get("autoCompleteSearch"))
return
context.anchored = false;
context.title = ["Smart Completions"];
@@ -1567,8 +1567,8 @@ function Completion() //{{{
for (i in util.range(0, result.matchCount))
];
});
- service["autoCompleteSearch"].stopSearch();
- service["autoCompleteSearch"].startSearch(context.filter, "", context.result, {
+ services.get("autoCompleteSearch").stopSearch();
+ services.get("autoCompleteSearch").startSearch(context.filter, "", context.result, {
onSearchResult: function onSearchResult(search, result)
{
context.result = result;
@@ -1651,9 +1651,7 @@ function Completion() //{{{
context.anchored = false;
context.title = ["Firefox Preference", "Value"];
context.keys = { text: function (item) item, description: function (item) options.getPref(item) };
- context.completions = Cc["@mozilla.org/preferences-service;1"]
- .getService(Ci.nsIPrefBranch)
- .getChildList("", { value: 0 });
+ context.completions = services.get("pref").getChildList("", { value: 0 });
},
search: function search(context, noSuggest)
@@ -1704,7 +1702,7 @@ function Completion() //{{{
let completions = [];
engineList.forEach(function (name) {
- let engine = service["browserSearch"].getEngineByAlias(name);
+ let engine = services.get("browserSearch").getEngineByAlias(name);
if (!engine)
return;
let [,word] = /^\s*(\S+)/.exec(context.filter) || [];
@@ -1727,7 +1725,7 @@ function Completion() //{{{
context.title = ["Shell Command", "Path"];
context.generate = function ()
{
- let dirNames = service["environment"].get("PATH").split(RegExp(liberator.has("Win32") ? ";" : ":"));
+ let dirNames = services.get("environment").get("PATH").split(RegExp(liberator.has("Win32") ? ";" : ":"));
let commands = [];
for (let [,dirName] in Iterator(dirNames))
diff --git a/common/content/events.js b/common/content/events.js
index 226d4483..630de130 100644
--- a/common/content/events.js
+++ b/common/content/events.js
@@ -1644,9 +1644,8 @@ function Events() //{{{
prefObserver: {
register: function ()
{
- const prefService = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
- this._branch = prefService.getBranch(""); // better way to monitor all changes?
- this._branch.QueryInterface(Ci.nsIPrefBranch2);
+ // better way to monitor all changes?
+ this._branch = services.get("pref").getBranch("").QueryInterface(Ci.nsIPrefBranch2);
this._branch.addObserver("", this, false);
},
diff --git a/common/content/find.js b/common/content/find.js
index 09f02a43..8e67fbb4 100644
--- a/common/content/find.js
+++ b/common/content/find.js
@@ -138,7 +138,7 @@ function Search() //{{{
var highlightObj = {
search: function (aWord, matchCase)
{
- var finder = service.getFind();
+ var finder = services.create("find");
if (matchCase !== undefined)
finder.caseSensitive = matchCase;
diff --git a/common/content/io.js b/common/content/io.js
index 1b7135e0..8254151d 100644
--- a/common/content/io.js
+++ b/common/content/io.js
@@ -69,7 +69,7 @@ function IO() //{{{
const downloadManager = Cc["@mozilla.org/download-manager;1"].createInstance(Ci.nsIDownloadManager);
const ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
- var processDir = service["directory"].get("CurWorkD", Ci.nsIFile);
+ var processDir = services.get("directory").get("CurWorkD", Ci.nsIFile);
var cwd = processDir;
var oldcwd = null;
@@ -77,7 +77,7 @@ function IO() //{{{
var scriptNames = [];
// default option values
- var cdpath = "," + (service["environment"].get("CDPATH").replace(/[:;]/g, ",") || ",");
+ var cdpath = "," + (services.get("environment").get("CDPATH").replace(/[:;]/g, ",") || ",");
var shell, shellcmdflag;
if (WINDOWS)
@@ -89,7 +89,7 @@ function IO() //{{{
}
else
{
- shell = service["environment"].get("SHELL") || "sh";
+ shell = services.get("environment").get("SHELL") || "sh";
shellcmdflag = "-c";
}
@@ -132,7 +132,7 @@ function IO() //{{{
{
try
{
- service.getFile().initWithPath(path);
+ services.create("file").initWithPath(path);
return true;
}
catch (e)
@@ -480,7 +480,7 @@ function IO() //{{{
// also expands relative paths
getFile: function (path, noCheckPWD)
{
- let file = service.getFile();
+ let file = services.create("file");
if (/file:\/\//.test(path))
{
@@ -521,7 +521,7 @@ function IO() //{{{
break;
}
- let file = service["directory"].get("TmpD", Ci.nsIFile);
+ let file = services.get("directory").get("TmpD", Ci.nsIFile);
file.append(tmpName);
file.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0600);
@@ -627,7 +627,7 @@ function IO() //{{{
}
else
{
- let dirs = service["environment"].get("PATH").split(WINDOWS ? ";" : ":");
+ let dirs = services.get("environment").get("PATH").split(WINDOWS ? ";" : ":");
// Windows tries the cwd first TODO: desirable?
if (WINDOWS)
dirs = [io.getCurrentDirectory().path].concat(dirs);
@@ -645,7 +645,7 @@ lookup:
// automatically try to add the executable path extensions on windows
if (WINDOWS)
{
- let extensions = service["environment"].get("PATHEXT").split(";");
+ let extensions = services.get("environment").get("PATHEXT").split(";");
for (let [,extension] in Iterator(extensions))
{
file = joinPaths(dir, program + extension);
@@ -664,7 +664,7 @@ lookup:
return -1;
}
- let process = service.getProcess();
+ let process = services.create("process");
process.init(file);
process.run(blocking, args, args.length);
@@ -922,7 +922,7 @@ lookup:
}; //}}}
-IO.__defineGetter__("runtimePath", function () service["environment"].get(config.name.toUpperCase() + "_RUNTIME") ||
+IO.__defineGetter__("runtimePath", function () services.get("environment").get(config.name.toUpperCase() + "_RUNTIME") ||
"~/" + (liberator.has("Win32") ? "" : ".") + config.name.toLowerCase());
IO.expandPath = function (path, relative)
@@ -939,7 +939,7 @@ IO.expandPath = function (path, relative)
function expand(path) path.replace(
!WINDOWS ? /\$(\w+)\b|\${(\w+)}/g
: /\$(\w+)\b|\${(\w+)}|%(\w+)%/g,
- function (m, n1, n2, n3) service["environment"].get(n1 || n2 || n3) || m
+ function (m, n1, n2, n3) services.get("environment").get(n1 || n2 || n3) || m
);
path = expand(path);
@@ -947,12 +947,12 @@ IO.expandPath = function (path, relative)
if (!relative && (WINDOWS ? /^~(?:$|\\)/ : /^~(?:$|\/)/).test(path))
{
// Try $HOME first, on all systems
- let home = service["environment"].get("HOME");
+ let home = services.get("environment").get("HOME");
// Windows has its own ideosyncratic $HOME variables.
if (!home && WINDOWS)
- home = service["environment"].get("USERPROFILE") ||
- service["environment"].get("HOMEDRIVE") + service["environment"].get("HOMEPATH");
+ home = services.get("environment").get("USERPROFILE") ||
+ services.get("environment").get("HOMEDRIVE") + services.get("environment").get("HOMEPATH");
path = home + path.substr(1);
}
diff --git a/common/content/liberator-overlay.js b/common/content/liberator-overlay.js
index eb60e48f..73431da4 100644
--- a/common/content/liberator-overlay.js
+++ b/common/content/liberator-overlay.js
@@ -31,7 +31,7 @@
let prefix = [BASE];
- ["service.js",
+ ["services.js",
"liberator.js",
"config.js",
"util.js",
diff --git a/common/content/liberator.js b/common/content/liberator.js
index e6470186..27ec275c 100644
--- a/common/content/liberator.js
+++ b/common/content/liberator.js
@@ -28,11 +28,6 @@ the terms of any one of the MPL, the GPL or the LGPL.
/** @scope modules */
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cr = Components.results;
-const Cu = Components.utils;
-
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
const plugins = {};
@@ -684,18 +679,18 @@ const liberator = (function () //{{{
return false; // so you can do: if (...) return liberator.beep();
},
- newThread: function () service["threadManager"].newThread(0),
+ newThread: function () services.get("threadManager").newThread(0),
callAsync: function (thread, self, func)
{
- thread = thread || service["threadManager"].newThread(0);
+ thread = thread || services.get("threadManager").newThread(0);
thread.dispatch(new Runnable(self, func, Array.slice(arguments, 3)), thread.DISPATCH_NORMAL);
},
// be sure to call GUI related methods like alert() or dump() ONLY in the main thread
callFunctionInThread: function (thread, func)
{
- thread = thread || service["threadManager"].newThread(0);
+ thread = thread || services.get("threadManager").newThread(0);
// DISPATCH_SYNC is necessary, otherwise strange things will happen
thread.dispatch(new Runnable(null, func, Array.slice(arguments, 2)), thread.DISPATCH_SYNC);
@@ -767,7 +762,7 @@ const liberator = (function () //{{{
loadScript: function (uri, context)
{
- service["subscriptLoader"].loadSubScript(uri, context);
+ services.get("subscriptLoader").loadSubScript(uri, context);
},
eval: function (str, context)
@@ -901,7 +896,7 @@ const liberator = (function () //{{{
// if clearFocusedElement, also blur a focused link
focusContent: function (clearFocusedElement)
{
- if (window != service["windowWatcher"].activeWindow)
+ if (window != services.get("windowWatcher").activeWindow)
return;
let elem = config.mainWidget || window.content;
@@ -934,7 +929,7 @@ const liberator = (function () //{{{
hasExtension: function (name)
{
- let extensions = service["extensionManager"].getItemList(Ci.nsIUpdateItem.TYPE_EXTENSION, {});
+ let extensions = services.get("extensionManager").getItemList(Ci.nsIUpdateItem.TYPE_EXTENSION, {});
return extensions.some(function (e) e.name == name);
},
@@ -1112,8 +1107,8 @@ const liberator = (function () //{{{
case liberator.NEW_WINDOW:
window.open();
- service["windowMediator"].getMostRecentWindow("navigator:browser")
- .loadURI(url, null, postdata);
+ services.get("windowMediator").getMostRecentWindow("navigator:browser")
+ .loadURI(url, null, postdata);
break;
default:
@@ -1154,7 +1149,7 @@ const liberator = (function () //{{{
options.setPref("browser.startup.page", 1); // start with default homepage session
if (force)
- service["appStartup"].quit(Ci.nsIAppStartup.eForceQuit);
+ services.get("appStartup").quit(Ci.nsIAppStartup.eForceQuit);
else
window.goQuitApplication();
},
@@ -1184,24 +1179,24 @@ const liberator = (function () //{{{
{
// notify all windows that an application quit has been requested.
var cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].createInstance(Ci.nsISupportsPRBool);
- service["observer"].notifyObservers(cancelQuit, "quit-application-requested", null);
+ services.get("observer").notifyObservers(cancelQuit, "quit-application-requested", null);
// something aborted the quit process.
if (cancelQuit.data)
return;
// notify all windows that an application quit has been granted.
- service["observer"].notifyObservers(null, "quit-application-granted", null);
+ services.get("observer").notifyObservers(null, "quit-application-granted", null);
// enumerate all windows and call shutdown handlers
- let windows = service["windowMediator"].getEnumerator(null);
+ let windows = services.get("windowMediator").getEnumerator(null);
while (windows.hasMoreElements())
{
let win = windows.getNext();
if (("tryToClose" in win) && !win.tryToClose())
return;
}
- service["appStartup"].quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
+ services.get("appStartup").quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
},
// TODO: move to {muttator,vimperator,...}.js
@@ -1228,10 +1223,10 @@ const liberator = (function () //{{{
try
{
- let infoPath = service.getFile();
+ let infoPath = services.create("file");
infoPath.initWithPath(IO.expandPath(IO.runtimePath.replace(/,.*/, "")));
infoPath.append("info");
- infoPath.append(service["profile"].selectedProfile.name);
+ infoPath.append(services.get("profile").selectedProfile.name);
storage.infoPath = infoPath;
}
catch (e)
@@ -1280,7 +1275,7 @@ const liberator = (function () //{{{
// make sourcing asynchronous, otherwise commands that open new tabs won't work
setTimeout(function () {
- let init = service["environment"].get(config.name.toUpperCase() + "_INIT");
+ let init = services.get("environment").get(config.name.toUpperCase() + "_INIT");
if (init)
liberator.execute(init);
else
@@ -1337,7 +1332,7 @@ const liberator = (function () //{{{
sleep: function (delay)
{
- let mainThread = service["threadManager"].mainThread;
+ let mainThread = services.get("threadManager").mainThread;
let end = Date.now() + delay;
while (Date.now() < end)
@@ -1347,8 +1342,8 @@ const liberator = (function () //{{{
callInMainThread: function (callback, self)
{
- let mainThread = service["threadManager"].mainThread;
- if (!service["threadManager"].isMainThread)
+ let mainThread = services.get("threadManager").mainThread;
+ if (!services.get("threadManager").isMainThread)
mainThread.dispatch({ run: callback.call(self) }, mainThread.DISPATCH_NORMAL);
else
callback.call(self);
@@ -1356,7 +1351,7 @@ const liberator = (function () //{{{
threadYield: function (flush, interruptable)
{
- let mainThread = service["threadManager"].mainThread;
+ let mainThread = services.get("threadManager").mainThread;
liberator.interrupted = false;
do
{
@@ -1396,7 +1391,7 @@ const liberator = (function () //{{{
get windows()
{
let windows = [];
- let enumerator = service["windowMediator"].getEnumerator("navigator:browser");
+ let enumerator = services.get("windowMediator").getEnumerator("navigator:browser");
while (enumerator.hasMoreElements())
windows.push(enumerator.getNext());
diff --git a/common/content/options.js b/common/content/options.js
index 558bedc6..9877c741 100644
--- a/common/content/options.js
+++ b/common/content/options.js
@@ -304,8 +304,6 @@ function Options() //{{{
////////////////////// PRIVATE SECTION /////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{
- const prefService = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
-
const SAVED = "liberator.saved.";
const optionHash = {};
@@ -332,27 +330,27 @@ function Options() //{{{
prefContexts[prefContexts.length - 1][name] = val;
}
- let type = prefService.getPrefType(name);
+ let type = services.get("pref").getPrefType(name);
switch (typeof value)
{
case "string":
- if (type == prefService.PREF_INVALID || type == prefService.PREF_STRING)
- prefService.setCharPref(name, value);
- else if (type == prefService.PREF_INT)
+ if (type == Ci.nsIPrefBranch.PREF_INVALID || type == Ci.nsIPrefBranch.PREF_STRING)
+ services.get("pref").setCharPref(name, value);
+ else if (type == Ci.nsIPrefBranch.PREF_INT)
liberator.echoerr("E521: Number required after =: " + name + "=" + value);
else
liberator.echoerr("E474: Invalid argument: " + name + "=" + value);
break;
case "number":
- if (type == prefService.PREF_INVALID || type == prefService.PREF_INT)
- prefService.setIntPref(name, value);
+ if (type == Ci.nsIPrefBranch.PREF_INVALID || type == Ci.nsIPrefBranch.PREF_INT)
+ services.get("pref").setIntPref(name, value);
else
liberator.echoerr("E474: Invalid argument: " + name + "=" + value);
break;
case "boolean":
- if (type == prefService.PREF_INVALID || type == prefService.PREF_BOOL)
- prefService.setBoolPref(name, value);
- else if (type == prefService.PREF_INT)
+ if (type == Ci.nsIPrefBranch.PREF_INVALID || type == Ci.nsIPrefBranch.PREF_BOOL)
+ services.get("pref").setBoolPref(name, value);
+ else if (type == Ci.nsIPrefBranch.PREF_INT)
liberator.echoerr("E521: Number required after =: " + name + "=" + value);
else
liberator.echoerr("E474: Invalid argument: " + name + "=" + value);
@@ -368,22 +366,22 @@ function Options() //{{{
if (forcedDefault != null) // this argument sets defaults for non-user settable options (like extensions.history.comp_history)
defaultValue = forcedDefault;
- let branch = defaultBranch ? prefService.getDefaultBranch("") : prefService;
- let type = prefService.getPrefType(name);
+ let branch = defaultBranch ? services.get("pref").getDefaultBranch("") : services.get("pref");
+ let type = services.get("pref").getPrefType(name);
try
{
switch (type)
{
- case prefService.PREF_STRING:
+ case Ci.nsIPrefBranch.PREF_STRING:
let value = branch.getComplexValue(name, Ci.nsISupportsString).data;
// try in case it's a localized string (will throw an exception if not)
- if (!prefService.prefIsLocked(name) && !prefService.prefHasUserValue(name) &&
- /^chrome:\/\/.+\/locale\/.+\.properties/.test(value))
+ if (!services.get("pref").prefIsLocked(name) && !services.get("pref").prefHasUserValue(name) &&
+ RegExp("chrome://.+/locale/.+\\.properties").test(value))
value = branch.getComplexValue(name, Ci.nsIPrefLocalizedString).data;
return value;
- case prefService.PREF_INT:
+ case Ci.nsIPrefBranch.PREF_INT:
return branch.getIntPref(name);
- case prefService.PREF_BOOL:
+ case Ci.nsIPrefBranch.PREF_BOOL:
return branch.getBoolPref(name);
default:
return defaultValue;
@@ -788,8 +786,9 @@ function Options() //{{{
{
completion.setFunctionCompleter(options.get, [function () ([o.name, o.description] for (o in options))]);
completion.setFunctionCompleter([options.getPref, options.safeSetPref, options.setPref, options.resetPref, options.invertPref],
- [function () prefService.getChildList("", { value: 0 })
- .map(function (pref) [pref, ""])]);
+ [function () services.get("pref")
+ .getChildList("", { value: 0 })
+ .map(function (pref) [pref, ""])]);
});
return {
@@ -890,12 +889,12 @@ function Options() //{{{
if (!filter)
filter = "";
- let prefArray = prefService.getChildList("", { value: 0 });
+ let prefArray = services.get("pref").getChildList("", { value: 0 });
prefArray.sort();
let prefs = function () {
- for each (let pref in prefArray)
+ for (let [,pref] in Iterator(prefArray))
{
- let userValue = prefService.prefHasUserValue(pref);
+ let userValue = services.get("pref").prefHasUserValue(pref);
if (onlyNonDefault && !userValue || pref.indexOf(filter) == -1)
continue;
@@ -990,7 +989,7 @@ function Options() //{{{
{
try
{
- return prefService.clearUserPref(name);
+ return services.get("pref").clearUserPref(name);
}
catch (e)
{
@@ -1001,7 +1000,7 @@ function Options() //{{{
// this works only for booleans
invertPref: function (name)
{
- if (prefService.getPrefType(name) == prefService.PREF_BOOL)
+ if (services.get("pref").getPrefType(name) == Ci.nsIPrefBranch.PREF_BOOL)
this.setPref(name, !this.getPref(name));
else
liberator.echoerr("E488: Trailing characters: " + name + "!");
diff --git a/common/content/service.js b/common/content/service.js
deleted file mode 100644
index 26fd1ab6..00000000
--- a/common/content/service.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/** @scope modules */
-
-let (cc = function (class, iface, meth) { try { return Components.classes[class][meth || "getService"](iface) } catch (e) {} })
-{
- // var Ci = Components.interfaces; // quick fix for muttator, will change/remove service.js anyway after the vacation
-
- /**
- * Cached XPCOM services and instances.
- *
- * @singleton
- */
- const service = {
- appStartup: cc("@mozilla.org/toolkit/app-startup;1", Components.interfaces.nsIAppStartup),
- autoCompleteSearch: cc("@mozilla.org/browser/global-history;2", Components.interfaces.nsIAutoCompleteSearch),
- browserSearch: cc("@mozilla.org/browser/search-service;1", Components.interfaces.nsIBrowserSearchService),
- cache: cc("@mozilla.org/network/cache-service;1", Components.interfaces.nsICacheService),
- console: cc("@mozilla.org/consoleservice;1", Components.interfaces.nsIConsoleService),
- directory: cc("@mozilla.org/file/directory_service;1", Components.interfaces.nsIProperties),
- environment: cc("@mozilla.org/process/environment;1", Components.interfaces.nsIEnvironment),
- extensionManager: cc("@mozilla.org/extensions/manager;1", Components.interfaces.nsIExtensionManager),
- json: cc("@mozilla.org/dom/json;1", Components.interfaces.nsIJSON, "createInstance"),
- observer: cc("@mozilla.org/observer-service;1", Components.interfaces.nsIObserverService),
- profile: cc("@mozilla.org/toolkit/profile-service;1", Components.interfaces.nsIToolkitProfileService),
- sessionStore: cc("@mozilla.org/browser/sessionstore;1", Components.interfaces.nsISessionStore),
- subscriptLoader: cc("@mozilla.org/moz/jssubscript-loader;1", Components.interfaces.mozIJSSubScriptLoader),
- threadManager: cc("@mozilla.org/thread-manager;1", Components.interfaces.nsIThreadManager),
- windowMediator: cc("@mozilla.org/appshell/window-mediator;1", Components.interfaces.nsIWindowMediator),
- windowWatcher: cc("@mozilla.org/embedcomp/window-watcher;1", Components.interfaces.nsIWindowWatcher),
- getFile: function () Cc["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile),
- getFind: function () Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance(Components.interfaces.nsIFind),
- getProcess: function () Cc["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess)
- };
-};
-
diff --git a/common/content/services.js b/common/content/services.js
new file mode 100644
index 00000000..2b22c702
--- /dev/null
+++ b/common/content/services.js
@@ -0,0 +1,73 @@
+/***** BEGIN LICENSE BLOCK ***** {{{
+ ©2008 Kris Maglione <maglione.k at Gmail>
+ Distributable under the terms of the MIT license, which allows
+ for sublicensing under any compatible license, including the MPL,
+ GPL, and MPL. Anyone who changes this file is welcome to relicense
+ it under any or all of those licenseses.
+}}} ***** END LICENSE BLOCK *****/
+
+/** @scope modules */
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+const Cr = Components.results;
+const Cu = Components.utils;
+
+/**
+ * Cached XPCOM services and instances.
+ *
+ * @constructor
+ */
+function Services()
+{
+ const classes = {};
+ const services = {};
+ function create(classes, ifaces, meth)
+ {
+ ifaces = Array.concat(ifaces);
+ try
+ {
+ let res = Cc[classes][meth || "getService"](ifaces.shift())
+ ifaces.forEach(function (iface) res.QueryInterface(iface));
+ return res;
+ }
+ catch (e) {}
+ }
+ const self = {
+ add: function (name, class, ifaces, meth)
+ {
+ return services[name] = create(class, ifaces, meth);
+ },
+ addClass: function (name, class, ifaces)
+ {
+ return classes[name] = function () create(class, ifaces, "createInstance");
+ },
+ get: function (name) services[name],
+ create: function (name) classes[name]()
+ };
+ self.add("appStartup", "@mozilla.org/toolkit/app-startup;1", Ci.nsIAppStartup);
+ self.add("autoCompleteSearch", "@mozilla.org/browser/global-history;2", Ci.nsIAutoCompleteSearch);
+ self.add("browserSearch", "@mozilla.org/browser/search-service;1", Ci.nsIBrowserSearchService);
+ self.add("cache", "@mozilla.org/network/cache-service;1", Ci.nsICacheService);
+ self.add("console", "@mozilla.org/consoleservice;1", Ci.nsIConsoleService);
+ self.add("directory", "@mozilla.org/file/directory_service;1", Ci.nsIProperties);
+ self.add("environment", "@mozilla.org/process/environment;1", Ci.nsIEnvironment);
+ self.add("extensionManager", "@mozilla.org/extensions/manager;1", Ci.nsIExtensionManager);
+ self.add("json", "@mozilla.org/dom/json;1", Ci.nsIJSON, "createInstance");
+ self.add("observer", "@mozilla.org/observer-service;1", Ci.nsIObserverService);
+ self.add("pref", "@mozilla.org/preferences-service;1", [Ci.nsIPrefService, Ci.nsIPrefBranch, Ci.nsIPrefBranch2]);
+ self.add("profile", "@mozilla.org/toolkit/profile-service;1", Ci.nsIToolkitProfileService);
+ self.add("sessionStore", "@mozilla.org/browser/sessionstore;1", Ci.nsISessionStore);
+ self.add("subscriptLoader", "@mozilla.org/moz/jssubscript-loader;1", Ci.mozIJSSubScriptLoader);
+ self.add("threadManager", "@mozilla.org/thread-manager;1", Ci.nsIThreadManager);
+ self.add("windowMediator", "@mozilla.org/appshell/window-mediator;1", Ci.nsIWindowMediator);
+ self.add("windowWatcher", "@mozilla.org/embedcomp/window-watcher;1", Ci.nsIWindowWatcher);
+
+ self.addClass("file", "@mozilla.org/file/local;1", Ci.nsILocalFile);
+ self.addClass("find", "@mozilla.org/embedcomp/rangefind;1", Ci.nsIFind);
+ self.addClass("process", "@mozilla.org/process/util;1", Ci.nsIProcess);
+ return self;
+};
+
+var services = Services();
+
diff --git a/common/content/tabs.js b/common/content/tabs.js
index 3341a0ac..4e33b942 100644
--- a/common/content/tabs.js
+++ b/common/content/tabs.js
@@ -102,8 +102,8 @@ function Tabs() //{{{
if (!from)
from = getBrowser().mTabContainer.selectedItem;
- let tabState = service["sessionStore"].getTabState(from);
- service["sessionStore"].setTabState(to, tabState);
+ let tabState = services.get("sessionStore").getTabState(from);
+ services.get("sessionStore").setTabState(to, tabState);
}
// hide tabs initially
@@ -743,7 +743,7 @@ function Tabs() //{{{
get closedTabs()
{
- return service["json"].decode(service["sessionStore"].getClosedTabData(window));
+ return services.get("json").decode(services.get("sessionStore").getClosedTabData(window));
},
list: function (filter)
@@ -970,7 +970,7 @@ function Tabs() //{{{
tab = getBrowser().mTabContainer.selectedItem;
window.open();
- let win = service["windowMediator"].getMostRecentWindow("navigator:browser");
+ let win = services.get("windowMediator").getMostRecentWindow("navigator:browser");
copyTab(win.getBrowser().mCurrentTab, tab);
this.remove(tab, 1, false, 1);
diff --git a/common/content/ui.js b/common/content/ui.js
index 3f817e4c..458a353a 100644
--- a/common/content/ui.js
+++ b/common/content/ui.js
@@ -659,8 +659,8 @@ function CommandLine() //{{{
{
completer: function completer(value)
{
- let engines = service["browserSearch"].getEngines({})
- .filter(function (engine) engine.supportsResponseType("application/x-suggestions+json"));
+ let engines = services.get("browserSearch").getEngines({})
+ .filter(function (engine) engine.supportsResponseType("application/x-suggestions+json"));
return engines.map(function (engine) [engine.alias, engine.description]);
},