summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit/test_about_protocol.js
blob: 972b1e3a4364be3b5c062eabf97ec6ea6a969a10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* 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);
}