summaryrefslogtreecommitdiff
path: root/common/content/services.js
blob: 79bc3e73b79fdb99efc6350cf4ed6310cd984441 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/***** 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("io",                  "@mozilla.org/network/io-service;1",        Ci.nsIIOService);
    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();

// vim: set fdm=marker sw=4 ts=4 et: