diff options
Diffstat (limited to 'toolkit/content/aboutAbout.js')
-rw-r--r-- | toolkit/content/aboutAbout.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/toolkit/content/aboutAbout.js b/toolkit/content/aboutAbout.js new file mode 100644 index 000000000..13cb6bd6c --- /dev/null +++ b/toolkit/content/aboutAbout.js @@ -0,0 +1,47 @@ +/* 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 Cc = Components.classes; +var Ci = Components.interfaces; +var gProtocols = []; +var gContainer; +window.onload = function () { + gContainer = document.getElementById("abouts"); + findAbouts(); +} + +function findAbouts() { + var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); + for (var cid in Cc) { + var result = cid.match(/@mozilla.org\/network\/protocol\/about;1\?what\=(.*)$/); + if (result) { + var aboutType = result[1]; + var contract = "@mozilla.org/network/protocol/about;1?what=" + aboutType; + try { + var am = Cc[contract].getService(Ci.nsIAboutModule); + var uri = ios.newURI("about:"+aboutType, null, null); + var flags = am.getURIFlags(uri); + if (!(flags & Ci.nsIAboutModule.HIDE_FROM_ABOUTABOUT)) { + gProtocols.push(aboutType); + } + } catch (e) { + // getService might have thrown if the component doesn't actually + // implement nsIAboutModule + } + } + } + gProtocols.sort().forEach(createProtocolListing); +} + +function createProtocolListing(aProtocol) { + var uri = "about:" + aProtocol; + var li = document.createElement("li"); + var link = document.createElement("a"); + var text = document.createTextNode(uri); + + link.href = uri; + link.appendChild(text); + li.appendChild(link); + gContainer.appendChild(li); +} |