summaryrefslogtreecommitdiffstats
path: root/devtools/shared/webconsole/test/chrome/test_network_get.html
blob: 71bb6c388cf6426f82b62a3a67326b0db36caadc (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
121
122
123
124
125
126
127
128
129
130
131
132
<!DOCTYPE HTML>
<html lang="en">
<head>
  <meta charset="utf8">
  <title>Test for the network actor (GET request)</title>
  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="common.js"></script>
  <!-- Any copyright is dedicated to the Public Domain.
     - http://creativecommons.org/publicdomain/zero/1.0/ -->
</head>
<body>
<p>Test for the network actor (GET request)</p>

<iframe src="http://example.com/chrome/devtools/shared/webconsole/test/chrome/network_requests_iframe.html"></iframe>

<script class="testbody" type="text/javascript">
"use strict";

SimpleTest.waitForExplicitFinish();

async function startTest()
{
  await SpecialPowers.pushPrefEnv({
    'set': [
      // Bug 1617611: Fix all the tests broken by "cookies SameSite=lax by default"
      ['network.cookie.sameSite.laxByDefault', false],
    ]
  });

  const commands = await createCommandsForTab();
  const target = commands.targetCommand.targetFront;
  const resourceCommand = commands.resourceCommand;

  info("test network GET request");
  const resource = await new Promise(resolve => {
    resourceCommand
      .watchResources([resourceCommand.TYPES.NETWORK_EVENT], {
        onAvailable: () => {},
        onUpdated: resourceUpdate => {
          resolve(resourceUpdate[0].resource);
        },
      })
      .then(() => {
        // Spawn the network request after we started watching
          const iframe = document.querySelector("iframe").contentWindow;
          iframe.wrappedJSObject.testXhrGet(null, "data.json?" + Date.now());
      });
  });

  const webConsoleFront = await target.getFront("console");
  const netActor = resource.actor;

  info("checking request headers");
  const requestHeadersPacket = await webConsoleFront.getRequestHeaders(netActor);
  ok(!!requestHeadersPacket.headers.length, `request headers > 0 (${requestHeadersPacket.headers.length})`);
  ok(requestHeadersPacket.headersSize > 0, `request headersSize > 0 (${requestHeadersPacket.headersSize})`);
  ok(!!requestHeadersPacket.rawHeaders, "request rawHeaders available");

  checkHeadersOrCookies(requestHeadersPacket.headers, {
    Referer: /network_requests_iframe\.html/,
    Cookie: /bug768096/,
  });

  checkRawHeaders(requestHeadersPacket.rawHeaders, {
    Referer: /network_requests_iframe\.html/,
    Cookie: /bug768096/,
  });

  info("checking request cookies");
  const requestCookiesPacket = await webConsoleFront.getRequestCookies(netActor);
  is(requestCookiesPacket.cookies.length, 3, "request cookies length");

  checkHeadersOrCookies(requestCookiesPacket.cookies, {
    foobar: "fooval",
    omgfoo: "bug768096",
    badcookie: "bug826798=st3fan",
  });

  info("checking request POST data");
  const postDataPacket = await webConsoleFront.getRequestPostData(netActor);
  ok(!postDataPacket.postData.text, "no request POST data");
  ok(!postDataPacket.postDataDiscarded, "request POST data was not discarded");

  info("checking response headers");
  const responseHeaderPacket = await webConsoleFront.getResponseHeaders(netActor);

  ok(!!responseHeaderPacket.headers.length, "response headers > 0");
  ok(responseHeaderPacket.headersSize > 0, "response headersSize > 0");
  ok(!!responseHeaderPacket.rawHeaders, "response rawHeaders available");

  checkHeadersOrCookies(responseHeaderPacket.headers, {
    "content-type": /^application\/(json|octet-stream)$/,
    "content-length": /^\d+$/,
  });

  checkRawHeaders(responseHeaderPacket.rawHeaders, {
    "content-type": /^application\/(json|octet-stream)$/,
    "content-length": /^\d+$/,
  });

  info("checking response cookies");
  const responseCookiesPacket = await webConsoleFront.getResponseCookies(netActor);
  is(responseCookiesPacket.cookies.length, 0, "response cookies length");

  info("checking response content");
  const responseContentPacket = await webConsoleFront.getResponseContent(netActor);
  ok(responseContentPacket.content.text, "response content text");
  ok(!responseContentPacket.contentDiscarded, "response content was not discarded");

  info("checking event timings");
  const eventTimingPacket = await webConsoleFront.getEventTimings(netActor);
  checkObject(eventTimingPacket, {
    timings: {
      blocked: /^-1|\d+$/,
      dns: /^-1|\d+$/,
      connect: /^-1|\d+$/,
      send: /^-1|\d+$/,
      wait: /^-1|\d+$/,
      receive: /^-1|\d+$/,
    },
    totalTime: /^\d+$/,
  });

  await commands.destroy();
  SpecialPowers.clearUserPref("network.cookie.sameSite.laxByDefault");
  SimpleTest.finish();
}

addEventListener("load", startTest, { once: true});
</script>
</body>
</html>