diff options
Diffstat (limited to '')
-rw-r--r-- | comm/suite/components/nsGopherProtocolStubHandler.js | 67 |
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); |