diff options
Diffstat (limited to 'toolkit/components/mozprotocol')
6 files changed, 90 insertions, 0 deletions
diff --git a/toolkit/components/mozprotocol/moz.build b/toolkit/components/mozprotocol/moz.build new file mode 100644 index 000000000..fa09ade5a --- /dev/null +++ b/toolkit/components/mozprotocol/moz.build @@ -0,0 +1,14 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/. + +EXTRA_COMPONENTS += [ + 'mozProtocolHandler.js', + 'mozProtocolHandler.manifest', +] + +BROWSER_CHROME_MANIFESTS += [ + 'tests/browser.ini' +] diff --git a/toolkit/components/mozprotocol/mozProtocolHandler.js b/toolkit/components/mozprotocol/mozProtocolHandler.js new file mode 100644 index 000000000..a92483f6a --- /dev/null +++ b/toolkit/components/mozprotocol/mozProtocolHandler.js @@ -0,0 +1,48 @@ +/* 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/. */ +"use strict"; + +const { classes: Cc, interfaces: Ci, utils: Cu } = Components; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/NetUtil.jsm"); + +function mozProtocolHandler() { + XPCOMUtils.defineLazyPreferenceGetter(this, "urlToLoad", "toolkit.mozprotocol.url", + "https://www.mozilla.org/protocol"); +} + +mozProtocolHandler.prototype = { + scheme: "moz", + defaultPort: -1, + protocolFlags: Ci.nsIProtocolHandler.URI_DANGEROUS_TO_LOAD, + + newURI(spec, charset, base) { + let uri = Cc["@mozilla.org/network/simple-uri;1"].createInstance(Ci.nsIURI); + if (base) { + uri.spec = base.resolve(spec); + } else { + uri.spec = spec; + } + return uri; + }, + + newChannel2(uri, loadInfo) { + let realURL = NetUtil.newURI(this.urlToLoad); + let channel = Services.io.newChannelFromURIWithLoadInfo(realURL, loadInfo) + channel.loadFlags |= Ci.nsIChannel.LOAD_REPLACE; + return channel; + }, + + newChannel(uri) { + return this.newChannel(uri, null); + }, + + classID: Components.ID("{47a45e5f-691e-4799-8686-14f8d3fc0f8c}"), + + QueryInterface: XPCOMUtils.generateQI([Ci.nsIProtocolHandler]), +}; + +this.NSGetFactory = XPCOMUtils.generateNSGetFactory([mozProtocolHandler]); diff --git a/toolkit/components/mozprotocol/mozProtocolHandler.manifest b/toolkit/components/mozprotocol/mozProtocolHandler.manifest new file mode 100644 index 000000000..bbfdf780a --- /dev/null +++ b/toolkit/components/mozprotocol/mozProtocolHandler.manifest @@ -0,0 +1,2 @@ +component {47a45e5f-691e-4799-8686-14f8d3fc0f8c} mozProtocolHandler.js +contract @mozilla.org/network/protocol;1?name=moz {47a45e5f-691e-4799-8686-14f8d3fc0f8c} diff --git a/toolkit/components/mozprotocol/tests/browser.ini b/toolkit/components/mozprotocol/tests/browser.ini new file mode 100644 index 000000000..168882a67 --- /dev/null +++ b/toolkit/components/mozprotocol/tests/browser.ini @@ -0,0 +1,5 @@ +[DEFAULT] + +[browser_mozprotocol.js] +support-files = + mozprotocol.html diff --git a/toolkit/components/mozprotocol/tests/browser_mozprotocol.js b/toolkit/components/mozprotocol/tests/browser_mozprotocol.js new file mode 100644 index 000000000..795ce8a08 --- /dev/null +++ b/toolkit/components/mozprotocol/tests/browser_mozprotocol.js @@ -0,0 +1,14 @@ +// Check that entering moz://a into the address bar directs us to a new url +add_task(function*() { + let path = getRootDirectory(gTestPath).substring("chrome://mochitests/content/".length); + yield SpecialPowers.pushPrefEnv({ + set: [["toolkit.mozprotocol.url", `https://example.com/${path}mozprotocol.html`]], + }); + + yield BrowserTestUtils.withNewTab("about:blank", function*() { + gBrowser.loadURI("moz://a"); + yield BrowserTestUtils.waitForLocationChange(gBrowser, + `https://example.com/${path}mozprotocol.html`); + ok(true, "Made it to the expected page"); + }); +}); diff --git a/toolkit/components/mozprotocol/tests/mozprotocol.html b/toolkit/components/mozprotocol/tests/mozprotocol.html new file mode 100644 index 000000000..3d6549e00 --- /dev/null +++ b/toolkit/components/mozprotocol/tests/mozprotocol.html @@ -0,0 +1,7 @@ +<!DOCTYPE html> + +<html> +<body> +<p><a id="link" href="moz://a">Test</a></p> +</body> +</html> |