summaryrefslogtreecommitdiffstats
path: root/comm/suite/components/nsGopherProtocolStubHandler.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/suite/components/nsGopherProtocolStubHandler.js')
-rw-r--r--comm/suite/components/nsGopherProtocolStubHandler.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/comm/suite/components/nsGopherProtocolStubHandler.js b/comm/suite/components/nsGopherProtocolStubHandler.js
new file mode 100644
index 0000000000..5f4451d9e9
--- /dev/null
+++ b/comm/suite/components/nsGopherProtocolStubHandler.js
@@ -0,0 +1,67 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* 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/. */
+
+var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
+var {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+/* This is a simple module which can be used as a template for any newly
+ unsupported protocol. In this case, it redirects gopher:// protocol
+ requests to the Mozilla Add-Ons page for OverbiteFF, which is a
+ cross-platform extension for Gopherspace. This gives a soft-landing for
+ support, which was withdrawn in Mozilla 2.0. See bugs 388195 and 572000. */
+
+function GopherProtocol()
+{
+}
+
+GopherProtocol.prototype = {
+ classDescription: "Gopher protocol handler stub",
+ classID: Components.ID("{22042bdb-56e4-47c6-8b12-fdfa859c05a9}"),
+
+ // nsISupports
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIProtocolHandler]),
+
+ // nsIProtocolHandler
+ scheme: "gopher",
+ defaultPort: 70,
+ protocolFlags: Ci.nsIProtocolHandler.URI_NORELATIVE |
+ Ci.nsIProtocolHandler.URI_NOAUTH |
+ Ci.nsIProtocolHandler.URI_LOADABLE_BY_ANYONE,
+
+ allowPort: function GP_allowPort(port, scheme) {
+ return false; // meaningless.
+ },
+
+ newURI: function GP_newURI(spec, charset, baseURI) {
+ var uri = Cc["@mozilla.org/network/standard-url;1"]
+ .createInstance(Ci.nsIStandardURL);
+ uri.init(Ci.nsIStandardURL.URLTYPE_STANDARD,
+ this.defaultPort, spec, charset, baseURI)
+ return uri;
+ },
+
+ newChannel: function GP_newChannel(inputURI) {
+ return this.newChannel2(inputURI, null);
+ },
+
+ newChannel2: function GP_newChannel2(inputURI, loadinfo) {
+ var newURI = Services.io.newURI("chrome://communicator/content/gopherAddon.xhtml");
+ // Create a chrome channel, and de-chrome it, to our information page.
+ var chan =
+ loadinfo ? Services.io.newChannelFromURIWithLoadInfo(newURI, loadinfo) :
+ Services.io.newChannelFromURI(newURI, null,
+ Services.scriptSecurityManager.getSystemPrincipal(),
+ null,
+ Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
+ Ci.nsIContentPolicy.TYPE_OTHER);
+ chan.originalURI = inputURI;
+ chan.owner = Services.scriptSecurityManager.createCodebasePrincipal(inputURI, {});
+ return chan;
+ }
+};
+
+/* Make our factory. */
+var components = [ GopherProtocol ];
+var NSGetFactory = XPCOMUtils.generateNSGetFactory(components);