summaryrefslogtreecommitdiffstats
path: root/devtools/client/webconsole/test/browser_webconsole_bug_630733_response_redirect_headers.js
blob: 5097499538c99d8d876070f4f84d93ae0005314e (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const TEST_URI = "data:text/html;charset=utf-8,<p>Web Console test for " +
                 "bug 630733";
const TEST_URI2 = "http://example.com/browser/devtools/client/webconsole/" +
                  "test/test-bug-630733-response-redirect-headers.sjs";

var lastFinishedRequests = {};
var webConsoleClient;

add_task(function* () {
  yield loadTab(TEST_URI);

  let hud = yield openConsole();

  yield consoleOpened(hud);
  yield getHeaders();
  yield getContent();

  performTest();
});

function consoleOpened(hud) {
  let deferred = promise.defer();

  webConsoleClient = hud.ui.webConsoleClient;
  HUDService.lastFinishedRequest.callback = (aHttpRequest) => {
    let status = aHttpRequest.response.status;
    lastFinishedRequests[status] = aHttpRequest;
    if ("301" in lastFinishedRequests &&
        "404" in lastFinishedRequests) {
      deferred.resolve();
    }
  };
  BrowserTestUtils.loadURI(gBrowser.selectedBrowser, TEST_URI2);

  return deferred.promise;
}

function getHeaders() {
  let deferred = promise.defer();

  HUDService.lastFinishedRequest.callback = null;

  ok("301" in lastFinishedRequests, "request 1: 301 Moved Permanently");
  ok("404" in lastFinishedRequests, "request 2: 404 Not found");

  webConsoleClient.getResponseHeaders(lastFinishedRequests["301"].actor,
    function (response) {
      lastFinishedRequests["301"].response.headers = response.headers;

      webConsoleClient.getResponseHeaders(lastFinishedRequests["404"].actor,
        function (resp) {
          lastFinishedRequests["404"].response.headers = resp.headers;
          executeSoon(deferred.resolve);
        });
    });
  return deferred.promise;
}

function getContent() {
  let deferred = promise.defer();

  webConsoleClient.getResponseContent(lastFinishedRequests["301"].actor,
    function (response) {
      lastFinishedRequests["301"].response.content = response.content;
      lastFinishedRequests["301"].discardResponseBody = response.contentDiscarded;

      webConsoleClient.getResponseContent(lastFinishedRequests["404"].actor,
        function (resp) {
          lastFinishedRequests["404"].response.content = resp.content;
          lastFinishedRequests["404"].discardResponseBody =
            resp.contentDiscarded;

          webConsoleClient = null;
          executeSoon(deferred.resolve);
        });
    });
  return deferred.promise;
}

function performTest() {
  function readHeader(name) {
    for (let header of headers) {
      if (header.name == name) {
        return header.value;
      }
    }
    return null;
  }

  let headers = lastFinishedRequests["301"].response.headers;
  is(readHeader("Content-Type"), "text/html",
     "we do have the Content-Type header");
  is(readHeader("Content-Length"), 71, "Content-Length is correct");
  is(readHeader("Location"), "/redirect-from-bug-630733",
     "Content-Length is correct");
  is(readHeader("x-foobar-bug630733"), "bazbaz",
     "X-Foobar-bug630733 is correct");

  let body = lastFinishedRequests["301"].response.content;
  ok(!body.text, "body discarded for request 1");
  ok(lastFinishedRequests["301"].discardResponseBody,
     "body discarded for request 1 (confirmed)");

  headers = lastFinishedRequests["404"].response.headers;
  ok(!readHeader("Location"), "no Location header");
  ok(!readHeader("x-foobar-bug630733"), "no X-Foobar-bug630733 header");

  body = lastFinishedRequests["404"].response.content.text;
  isnot(body.indexOf("404"), -1,
        "body is correct for request 2");

  lastFinishedRequests = webConsoleClient = null;
}