File: cors-preflight.any.js

package info (click to toggle)
firefox 145.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,653,344 kB
  • sloc: cpp: 7,594,932; javascript: 6,459,612; ansic: 3,752,905; python: 1,403,433; xml: 629,811; asm: 438,677; java: 186,421; sh: 67,287; makefile: 19,169; objc: 13,086; perl: 12,982; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (49 lines) | stat: -rw-r--r-- 2,002 bytes parent folder | download | duplicates (25)
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
// META: script=/common/utils.js
// META: script=/common/get-host-info.sub.js

// Because apache decrements the Keep-Alive max value on each request, the
// transferSize will vary slightly between requests for the same resource.
const fuzzFactor = 3;  // bytes

const {HTTP_REMOTE_ORIGIN} = get_host_info();
const url = new URL('/resource-timing/resources/preflight.py',
    HTTP_REMOTE_ORIGIN).href;

// The header bytes are expected to be > |minHeaderSize| and
// < |maxHeaderSize|. If they are outside this range the test will fail.
const minHeaderSize = 100;
const maxHeaderSize = 1024;

promise_test(async () => {
  const checkCorsAllowed = response => response.arrayBuffer();
  const requirePreflight = {headers: {'X-Require-Preflight' : '1'}};
  const collectEntries = new Promise(resolve => {
    let entriesSeen = [];
    new PerformanceObserver(entryList => {
      entriesSeen = entriesSeen.concat(entryList.getEntries());
      if (entriesSeen.length > 2) {
        throw new Error(`Saw too many PerformanceResourceTiming entries ` +
            `(${entriesSeen.length})`);
      }
      if (entriesSeen.length == 2) {
        resolve(entriesSeen);
      }
    }).observe({"type": "resource"});
  });

  // Although this fetch doesn't send a pre-flight request, the server response
  // will allow cross-origin requests explicitly with the
  // Access-Control-Allow-Origin header.
  await fetch(url).then(checkCorsAllowed);

  // This fetch will send a pre-flight request to do the CORS handshake
  // explicitly.
  await fetch(url, requirePreflight).then(checkCorsAllowed);

  const entries = await collectEntries;
  assert_greater_than(entries[0].transferSize, 0, 'No-preflight transferSize');
  const lowerBound = entries[0].transferSize - fuzzFactor;
  const upperBound = entries[0].transferSize + fuzzFactor;
  assert_between_exclusive(entries[1].transferSize, lowerBound, upperBound,
      'Preflighted transferSize');
}, 'PerformanceResourceTiming sizes fetch with preflight test');