Wed, 31 Dec 2014 13:27:57 +0100
Ignore runtime configuration files generated during quality assurance.
1 Cu.import("resource://testing-common/httpd.js");
3 XPCOMUtils.defineLazyGetter(this, "URL", function() {
4 return "http://localhost:" + httpserver.identity.primaryPort;
5 });
7 var httpserver = new HttpServer();
8 var testpath = "/simple";
9 var httpbody = "<?xml version='1.0' ?><root>0123456789</root>";
11 function syncXHR()
12 {
13 var xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"]
14 .createInstance(Ci.nsIXMLHttpRequest);
15 xhr.open("GET", URL + testpath, false);
16 xhr.send(null);
17 }
19 const MAX_TESTS = 2;
21 var listener = {
22 _done_onStart: false,
23 _done_onData: false,
24 _test: 0,
26 QueryInterface: function(iid) {
27 if (iid.equals(Components.interfaces.nsIStreamListener) ||
28 iid.equals(Components.interfaces.nsIRequestObserver) ||
29 iid.equals(Components.interfaces.nsISupports))
30 return this;
31 throw Components.results.NS_ERROR_NO_INTERFACE;
32 },
34 onStartRequest: function(request, ctx) {
35 switch(this._test) {
36 case 0:
37 request.suspend();
38 syncXHR();
39 request.resume();
40 break;
41 case 1:
42 request.suspend();
43 syncXHR();
44 do_execute_soon(function() request.resume());
45 break;
46 case 2:
47 do_execute_soon(function() request.suspend());
48 do_execute_soon(function() request.resume());
49 syncXHR();
50 break;
51 }
53 this._done_onStart = true;
54 },
56 onDataAvailable: function(request, context, stream, offset, count) {
57 do_check_true(this._done_onStart);
58 read_stream(stream, count);
59 this._done_onData = true;
60 },
62 onStopRequest: function(request, ctx, status) {
63 do_check_true(this._done_onData);
64 this._reset();
65 if (this._test <= MAX_TESTS)
66 next_test();
67 else
68 httpserver.stop(do_test_finished);
69 },
71 _reset: function() {
72 this._done_onStart = false;
73 this._done_onData = false;
74 this._test++;
75 }
76 };
78 function makeChan(url) {
79 var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
80 var chan = ios.newChannel(url, null, null).QueryInterface(Ci.nsIHttpChannel);
81 return chan;
82 }
84 function next_test()
85 {
86 var chan = makeChan(URL + testpath);
87 chan.QueryInterface(Ci.nsIRequest);
88 chan.asyncOpen(listener, null);
89 }
91 function run_test()
92 {
93 httpserver.registerPathHandler(testpath, serverHandler);
94 httpserver.start(-1);
96 next_test();
98 do_test_pending();
99 }
101 function serverHandler(metadata, response)
102 {
103 response.setHeader("Content-Type", "text/xml", false);
104 response.bodyOutputStream.write(httpbody, httpbody.length);
105 }