/* 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"; var unsafeAboutModule = { QueryInterface: ChromeUtils.generateQI(["nsIAboutModule"]), newChannel(aURI, aLoadInfo) { var uri = Services.io.newURI("about:blank"); let chan = Services.io.newChannelFromURIWithLoadInfo(uri, aLoadInfo); chan.owner = Services.scriptSecurityManager.getSystemPrincipal(); return chan; }, getURIFlags() { return Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT; }, }; var factory = { createInstance(aIID) { return unsafeAboutModule.QueryInterface(aIID); }, QueryInterface: ChromeUtils.generateQI(["nsIFactory"]), }; function run_test() { let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar); let classID = Services.uuid.generateUUID(); registrar.registerFactory( classID, "", "@mozilla.org/network/protocol/about;1?what=unsafe", factory ); let aboutUnsafeChan = NetUtil.newChannel({ uri: "about:unsafe", loadUsingSystemPrincipal: true, }); Assert.equal( null, aboutUnsafeChan.owner, "URI_SAFE_FOR_UNTRUSTED_CONTENT channel has no owner" ); registrar.unregisterFactory(classID, factory); }