зеркало из https://github.com/mozilla/gecko-dev.git
80 строки
2.2 KiB
JavaScript
80 строки
2.2 KiB
JavaScript
// This file ensures that canceling a channel early does not
|
|
// send the request to the server (bug 350790)
|
|
|
|
const Cc = Components.classes;
|
|
const Ci = Components.interfaces;
|
|
const Cu = Components.utils;
|
|
const Cr = Components.results;
|
|
|
|
Cu.import("resource://testing-common/httpd.js");
|
|
|
|
var observer = {
|
|
QueryInterface: function eventsink_qi(iid) {
|
|
if (iid.equals(Components.interfaces.nsISupports) ||
|
|
iid.equals(Components.interfaces.nsIObserver))
|
|
return this;
|
|
throw Components.results.NS_ERROR_NO_INTERFACE;
|
|
},
|
|
|
|
observe: function(subject, topic, data) {
|
|
subject = subject.QueryInterface(Components.interfaces.nsIRequest);
|
|
subject.cancel(Components.results.NS_BINDING_ABORTED);
|
|
|
|
var obs = Components.classes["@mozilla.org/observer-service;1"].getService();
|
|
obs = obs.QueryInterface(Components.interfaces.nsIObserverService);
|
|
obs.removeObserver(observer, "http-on-modify-request");
|
|
}
|
|
};
|
|
|
|
var listener = {
|
|
onStartRequest: function test_onStartR(request, ctx) {
|
|
do_check_eq(request.status, Components.results.NS_BINDING_ABORTED);
|
|
},
|
|
|
|
onDataAvailable: function test_ODA() {
|
|
do_throw("Should not get any data!");
|
|
},
|
|
|
|
onStopRequest: function test_onStopR(request, ctx, status) {
|
|
httpserv.stop(do_test_finished);
|
|
}
|
|
};
|
|
|
|
function makeChan(url) {
|
|
var ios = Components.classes["@mozilla.org/network/io-service;1"]
|
|
.getService(Components.interfaces.nsIIOService);
|
|
var chan = ios.newChannel(url, null, null)
|
|
.QueryInterface(Components.interfaces.nsIHttpChannel);
|
|
|
|
return chan;
|
|
}
|
|
|
|
var httpserv = null;
|
|
|
|
function execute_test() {
|
|
var chan = makeChan("http://localhost:4444/failtest");
|
|
|
|
var obs = Components.classes["@mozilla.org/observer-service;1"].getService();
|
|
obs = obs.QueryInterface(Components.interfaces.nsIObserverService);
|
|
obs.addObserver(observer, "http-on-modify-request", false);
|
|
|
|
chan.asyncOpen(listener, null);
|
|
}
|
|
|
|
function run_test() {
|
|
httpserv = new HttpServer();
|
|
httpserv.registerPathHandler("/failtest", failtest);
|
|
httpserv.start(4444);
|
|
|
|
execute_test();
|
|
|
|
do_test_pending();
|
|
}
|
|
|
|
// PATHS
|
|
|
|
// /failtest
|
|
function failtest(metadata, response) {
|
|
do_throw("This should not be reached");
|
|
}
|