summaryrefslogtreecommitdiffstats
path: root/b2g/components/B2GAboutRedirector.js
diff options
context:
space:
mode:
Diffstat (limited to 'b2g/components/B2GAboutRedirector.js')
-rw-r--r--b2g/components/B2GAboutRedirector.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/b2g/components/B2GAboutRedirector.js b/b2g/components/B2GAboutRedirector.js
new file mode 100644
index 000000000..f4bcf47f4
--- /dev/null
+++ b/b2g/components/B2GAboutRedirector.js
@@ -0,0 +1,78 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+Components.utils.import("resource://gre/modules/Services.jsm");
+
+function debug(msg) {
+ //dump("B2GAboutRedirector: " + msg + "\n");
+}
+
+function netErrorURL() {
+ let systemManifestURL = Services.prefs.getCharPref("b2g.system_manifest_url");
+ systemManifestURL = Services.io.newURI(systemManifestURL, null, null);
+ let netErrorURL = Services.prefs.getCharPref("b2g.neterror.url");
+ netErrorURL = Services.io.newURI(netErrorURL, null, systemManifestURL);
+ return netErrorURL.spec;
+}
+
+var modules = {
+ certerror: {
+ uri: "chrome://b2g/content/aboutCertError.xhtml",
+ privileged: false,
+ hide: true
+ },
+ neterror: {
+ uri: netErrorURL(),
+ privileged: false,
+ hide: true
+ }
+};
+
+function B2GAboutRedirector() {}
+B2GAboutRedirector.prototype = {
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
+ classID: Components.ID("{920400b1-cf8f-4760-a9c4-441417b15134}"),
+
+ _getModuleInfo: function (aURI) {
+ let moduleName = aURI.path.replace(/[?#].*/, "").toLowerCase();
+ return modules[moduleName];
+ },
+
+ // nsIAboutModule
+ getURIFlags: function(aURI) {
+ let flags;
+ let moduleInfo = this._getModuleInfo(aURI);
+ if (moduleInfo.hide)
+ flags = Ci.nsIAboutModule.HIDE_FROM_ABOUTABOUT;
+
+ return flags | Ci.nsIAboutModule.ALLOW_SCRIPT;
+ },
+
+ newChannel: function(aURI, aLoadInfo) {
+ let moduleInfo = this._getModuleInfo(aURI);
+
+ var ios = Cc["@mozilla.org/network/io-service;1"].
+ getService(Ci.nsIIOService);
+
+ var newURI = ios.newURI(moduleInfo.uri, null, null);
+
+ var channel = ios.newChannelFromURIWithLoadInfo(newURI, aLoadInfo);
+
+ if (!moduleInfo.privileged) {
+ // Setting the owner to null means that we'll go through the normal
+ // path in GetChannelPrincipal and create a codebase principal based
+ // on the channel's originalURI
+ channel.owner = null;
+ }
+
+ channel.originalURI = aURI;
+
+ return channel;
+ }
+};
+
+this.NSGetFactory = XPCOMUtils.generateNSGetFactory([B2GAboutRedirector]);