summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/tests/browser/browser_WebRequest_cookies.js
blob: b8c4f24cb431599affeb5aa2a0f1397e5096893f (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"use strict";

var { interfaces: Ci, classes: Cc, utils: Cu, results: Cr } = Components;

var {WebRequest} = Cu.import("resource://gre/modules/WebRequest.jsm", {});

const BASE = "http://example.com/browser/toolkit/modules/tests/browser";
const URL = BASE + "/WebRequest_dynamic.sjs";

var countBefore = 0;
var countAfter = 0;

function onBeforeSendHeaders(details)
{
  if (details.url != URL) {
    return undefined;
  }

  countBefore++;

  info(`onBeforeSendHeaders ${details.url}`);
  let found = false;
  let headers = [];
  for (let {name, value} of details.requestHeaders) {
    info(`Saw header ${name} '${value}'`);
    if (name == "Cookie") {
      is(value, "foopy=1", "Cookie is correct");
      headers.push({name, value: "blinky=1"});
      found = true;
    } else {
      headers.push({name, value});
    }
  }
  ok(found, "Saw cookie header");

  return {requestHeaders: headers};
}

function onResponseStarted(details)
{
  if (details.url != URL) {
    return;
  }

  countAfter++;

  info(`onResponseStarted ${details.url}`);
  let found = false;
  for (let {name, value} of details.responseHeaders) {
    info(`Saw header ${name} '${value}'`);
    if (name == "Set-Cookie") {
      is(value, "dinky=1", "Cookie is correct");
      found = true;
    }
  }
  ok(found, "Saw cookie header");
}

add_task(function* filter_urls() {
  // First load the URL so that we set cookie foopy=1.
  gBrowser.selectedTab = gBrowser.addTab(URL);
  yield waitForLoad();
  gBrowser.removeCurrentTab();

  // Now load with WebRequest set up.
  WebRequest.onBeforeSendHeaders.addListener(onBeforeSendHeaders, null, ["blocking"]);
  WebRequest.onResponseStarted.addListener(onResponseStarted, null);

  gBrowser.selectedTab = gBrowser.addTab(URL);

  yield waitForLoad();

  gBrowser.removeCurrentTab();

  WebRequest.onBeforeSendHeaders.removeListener(onBeforeSendHeaders);
  WebRequest.onResponseStarted.removeListener(onResponseStarted);

  is(countBefore, 1, "onBeforeSendHeaders hit once");
  is(countAfter, 1, "onResponseStarted hit once");
});

function waitForLoad(browser = gBrowser.selectedBrowser) {
  return new Promise(resolve => {
    browser.addEventListener("load", function listener() {
      browser.removeEventListener("load", listener, true);
      resolve();
    }, true);
  });
}