Wed, 31 Dec 2014 06:55:50 +0100
Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 "use strict";
7 this.EXPORTED_SYMBOLS = [
8 "getAppInfo",
9 "updateAppInfo",
10 ];
13 const {interfaces: Ci, results: Cr, utils: Cu} = Components;
15 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
17 let APP_INFO = {
18 vendor: "Mozilla",
19 name: "xpcshell",
20 ID: "xpcshell@tests.mozilla.org",
21 version: "1",
22 appBuildID: "20121107",
23 platformVersion: "p-ver",
24 platformBuildID: "20121106",
25 inSafeMode: false,
26 logConsoleErrors: true,
27 OS: "XPCShell",
28 XPCOMABI: "noarch-spidermonkey",
29 QueryInterface: XPCOMUtils.generateQI([Ci.nsIXULAppInfo, Ci.nsIXULRuntime]),
30 invalidateCachesOnRestart: function() {},
31 };
34 /**
35 * Obtain a reference to the current object used to define XULAppInfo.
36 */
37 this.getAppInfo = function () { return APP_INFO; }
39 /**
40 * Update the current application info.
41 *
42 * If the argument is defined, it will be the object used. Else, APP_INFO is
43 * used.
44 *
45 * To change the current XULAppInfo, simply call this function. If there was
46 * a previously registered app info object, it will be unloaded and replaced.
47 */
48 this.updateAppInfo = function (obj) {
49 obj = obj || APP_INFO;
50 APP_INFO = obj;
52 let id = Components.ID("{fbfae60b-64a4-44ef-a911-08ceb70b9f31}");
53 let cid = "@mozilla.org/xre/app-info;1";
54 let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
56 // Unregister an existing factory if one exists.
57 try {
58 let existing = Components.manager.getClassObjectByContractID(cid, Ci.nsIFactory);
59 registrar.unregisterFactory(id, existing);
60 } catch (ex) {}
62 let factory = {
63 createInstance: function (outer, iid) {
64 if (outer != null) {
65 throw Cr.NS_ERROR_NO_AGGREGATION;
66 }
68 return obj.QueryInterface(iid);
69 },
70 };
72 registrar.registerFactory(id, "XULAppInfo", cid, factory);
73 };