summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit_ipc/child_channel_id.js
blob: 55cb2fd1454bad64ca4b9421fd82977f7b437f44 (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
/**
 * Send HTTP requests and notify the parent about their channelId
 */

Cu.import("resource://gre/modules/NetUtil.jsm");

let shouldQuit = false;

function run_test() {
  // keep the event loop busy and the test alive until a "finish" command
  // is issued by parent
  do_timeout(100, function keepAlive() {
    if (!shouldQuit) {
      do_timeout(100, keepAlive);
    }
  });
}

function makeRequest(uri) {
  let requestChannel = NetUtil.newChannel({uri, loadUsingSystemPrincipal: true});
  requestChannel.asyncOpen2(new ChannelListener(checkResponse, requestChannel));
  requestChannel.QueryInterface(Ci.nsIHttpChannel);
  dump(`Child opened request: ${uri}, channelId=${requestChannel.channelId}\n`);
}

function checkResponse(request, buffer, requestChannel) {
  // notify the parent process about the original request channel
  requestChannel.QueryInterface(Ci.nsIHttpChannel);
  do_send_remote_message(`request:${requestChannel.channelId}`);

  // the response channel can be different (if it was redirected)
  let responseChannel = request.QueryInterface(Ci.nsIHttpChannel);

  let uri = responseChannel.URI.spec;
  let origUri = responseChannel.originalURI.spec;
  let id = responseChannel.channelId;
  dump(`Child got response to: ${uri} (orig=${origUri}), channelId=${id}\n`);

  // notify the parent process about this channel's ID
  do_send_remote_message(`response:${id}`);
}

function finish() {
  shouldQuit = true;
}