Backed out changeset b71c8c052463 (bug 1943846) for causing mass failures. CLOSED...
[gecko.git] / netwerk / test / unit / test_redirect_veto.js
blobd73635ca9061e9ec3d5b257ab34eff7fea95b174
1 "use strict";
3 const { HttpServer } = ChromeUtils.importESModule(
4 "resource://testing-common/httpd.sys.mjs"
5 );
7 ChromeUtils.defineLazyGetter(this, "URL", function () {
8 return "http://localhost:" + httpServer.identity.primaryPort;
9 });
11 var httpServer = null;
12 // Need to randomize, because apparently no one clears our cache
13 var randomPath = "/redirect/" + Math.random();
15 ChromeUtils.defineLazyGetter(this, "randomURI", function () {
16 return URL + randomPath;
17 });
19 function make_channel(url) {
20 return NetUtil.newChannel({ uri: url, loadUsingSystemPrincipal: true });
23 const responseBody = "response body";
25 function redirectHandler(metadata, response) {
26 response.setStatusLine(metadata.httpVersion, 301, "Moved");
27 response.setHeader("Location", URL + "/content", false);
30 function contentHandler(metadata, response) {
31 response.setHeader("Content-Type", "text/plain");
32 response.bodyOutputStream.write(responseBody, responseBody.length);
35 let ChannelEventSink2 = {
36 _classDescription: "WebRequest channel event sink",
37 _classID: Components.ID("115062f8-92f1-11e5-8b7f-08001110f7ec"),
38 _contractID: "@mozilla.org/webrequest/channel-event-sink;1",
40 QueryInterface: ChromeUtils.generateQI(["nsIChannelEventSink", "nsIFactory"]),
42 init() {
43 Components.manager
44 .QueryInterface(Ci.nsIComponentRegistrar)
45 .registerFactory(
46 this._classID,
47 this._classDescription,
48 this._contractID,
49 this
53 register() {
54 Services.catMan.addCategoryEntry(
55 "net-channel-event-sinks",
56 this._contractID,
57 this._contractID,
58 false,
59 true
63 unregister() {
64 Services.catMan.deleteCategoryEntry(
65 "net-channel-event-sinks",
66 this._contractID,
67 false
71 // nsIChannelEventSink implementation
72 asyncOnChannelRedirect(oldChannel, newChannel, flags, redirectCallback) {
73 // Abort the redirection
74 redirectCallback.onRedirectVerifyCallback(Cr.NS_ERROR_NO_INTERFACE);
77 // nsIFactory implementation
78 createInstance(iid) {
79 return this.QueryInterface(iid);
83 add_task(async function test_redirect_veto() {
84 httpServer = new HttpServer();
85 httpServer.registerPathHandler(randomPath, redirectHandler);
86 httpServer.registerPathHandler("/content", contentHandler);
87 httpServer.start(-1);
89 ChannelEventSink2.init();
90 ChannelEventSink2.register();
92 let chan = make_channel(randomURI);
93 let [req, buff] = await new Promise(resolve =>
94 chan.asyncOpen(
95 new ChannelListener((aReq, aBuff) => resolve([aReq, aBuff], null))
98 Assert.equal(buff, "");
99 Assert.equal(req.status, Cr.NS_OK);
100 await httpServer.stop();
101 ChannelEventSink2.unregister();