Thu, 15 Jan 2015 15:55:04 +0100
Back out 97036ab72558 which inappropriately compared turds to third parties.
1 // This file ensures that canceling a channel early does not
2 // send the request to the server (bug 350790)
3 //
4 // I've also shoehorned in a test that ENSURE_CALLED_BEFORE_CONNECT works as
5 // expected: see comments that start with ENSURE_CALLED_BEFORE_CONNECT:
7 Cu.import("resource://testing-common/httpd.js");
9 var ios = Components.classes["@mozilla.org/network/io-service;1"]
10 .getService(Components.interfaces.nsIIOService);
11 var observer = {
12 QueryInterface: function eventsink_qi(iid) {
13 if (iid.equals(Components.interfaces.nsISupports) ||
14 iid.equals(Components.interfaces.nsIObserver))
15 return this;
16 throw Components.results.NS_ERROR_NO_INTERFACE;
17 },
19 observe: function(subject, topic, data) {
20 subject = subject.QueryInterface(Components.interfaces.nsIRequest);
21 subject.cancel(Components.results.NS_BINDING_ABORTED);
23 // ENSURE_CALLED_BEFORE_CONNECT: setting values should still work
24 try {
25 subject.QueryInterface(Components.interfaces.nsIHttpChannel);
26 currentReferrer = subject.getRequestHeader("Referer");
27 do_check_eq(currentReferrer, "http://site1.com/");
28 var uri = ios.newURI("http://site2.com", null, null);
29 subject.referrer = uri;
30 } catch (ex) {
31 do_throw("Exception: " + ex);
32 }
34 var obs = Components.classes["@mozilla.org/observer-service;1"].getService();
35 obs = obs.QueryInterface(Components.interfaces.nsIObserverService);
36 obs.removeObserver(observer, "http-on-modify-request");
37 }
38 };
40 var listener = {
41 onStartRequest: function test_onStartR(request, ctx) {
42 do_check_eq(request.status, Components.results.NS_BINDING_ABORTED);
44 // ENSURE_CALLED_BEFORE_CONNECT: setting referrer should now fail
45 try {
46 request.QueryInterface(Components.interfaces.nsIHttpChannel);
47 currentReferrer = request.getRequestHeader("Referer");
48 do_check_eq(currentReferrer, "http://site2.com/");
49 var uri = ios.newURI("http://site3.com/", null, null);
51 // Need to set NECKO_ERRORS_ARE_FATAL=0 else we'll abort process
52 var env = Components.classes["@mozilla.org/process/environment;1"].
53 getService(Components.interfaces.nsIEnvironment);
54 env.set("NECKO_ERRORS_ARE_FATAL", "0");
55 // we expect setting referrer to fail
56 try {
57 request.referrer = uri;
58 do_throw("Error should have been thrown before getting here");
59 } catch (ex) { }
60 } catch (ex) {
61 do_throw("Exception: " + ex);
62 }
63 },
65 onDataAvailable: function test_ODA() {
66 do_throw("Should not get any data!");
67 },
69 onStopRequest: function test_onStopR(request, ctx, status) {
70 httpserv.stop(do_test_finished);
71 }
72 };
74 function makeChan(url) {
75 var chan = ios.newChannel(url, null, null)
76 .QueryInterface(Components.interfaces.nsIHttpChannel);
78 // ENSURE_CALLED_BEFORE_CONNECT: set original value
79 var uri = ios.newURI("http://site1.com", null, null);
80 chan.referrer = uri;
82 return chan;
83 }
85 var httpserv = null;
87 function execute_test() {
88 var chan = makeChan("http://localhost:" +
89 httpserv.identity.primaryPort + "/failtest");
91 var obs = Components.classes["@mozilla.org/observer-service;1"].getService();
92 obs = obs.QueryInterface(Components.interfaces.nsIObserverService);
93 obs.addObserver(observer, "http-on-modify-request", false);
95 chan.asyncOpen(listener, null);
96 }
98 function run_test() {
99 httpserv = new HttpServer();
100 httpserv.registerPathHandler("/failtest", failtest);
101 httpserv.start(-1);
103 execute_test();
105 do_test_pending();
106 }
108 // PATHS
110 // /failtest
111 function failtest(metadata, response) {
112 do_throw("This should not be reached");
113 }