File: font-timestamps.html

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 (62 lines) | stat: -rw-r--r-- 2,892 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
50
51
52
53
54
55
56
57
58
59
60
61
62
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test cross-origin fetch redirects have the right values.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<body>
<script>
const load_font = url => {
  document.body.innerHTML = `
    <style>
    @font-face {
        font-family: ahem;
        src: url('${url}');
    }
    </style>
    <div style="font-family: ahem;">This fetches ahem font.</div>
  `;
  return document.fonts.ready;
};

const run_test = async (t, url) => {
  // Set up PerformanceObserver
  const href = new URL(url).href;
  const setPerformanceObserver = new Promise(resolve => {
    const po = new PerformanceObserver(resolve);
    po.observe({type: "resource"});
  });

  // Load the font resource and wait for it to be fetched.
  await load_font(href);

  // Wait for an entry
  const timeout = new Promise(resolve => t.step_timeout(resolve, 3000));
  const list = await Promise.race([setPerformanceObserver, timeout]);
  assert_equals(typeof(list), "object", "No iframe entry was fired");
  const entries = list.getEntriesByName(url);
  assert_equals(entries.length, 1);

  // Test entry values
  const entry = entries[0];
  assert_greater_than(entry.fetchStart, 0, "fetchStart should be greater than 0 in redirects.");
  assert_greater_than_equal(entry.domainLookupStart, entry.fetchStart, "domainLookupStart should be more than 0 in same-origin redirect.");
  assert_greater_than_equal(entry.domainLookupEnd, entry.domainLookupStart, "domainLookupEnd should be more than 0 in same-origin redirect.");
  assert_greater_than_equal(entry.connectStart, entry.domainLookupEnd, "connectStart should be more than 0 in same-origin redirect.");
  assert_greater_than_equal(entry.secureConnectionStart, entry.connectStart, "secureConnectionStart should be more than 0 in same-origin redirect.");
  assert_greater_than_equal(entry.connectEnd, entry.secureConnectionStart, "connectEnd should be more than 0 in same-origin redirect.");
  assert_greater_than_equal(entry.requestStart, entry.connectEnd, "requestStart should be more than 0 in same-origin redirect.");
  assert_greater_than_equal(entry.responseStart, entry.requestStart, "responseStart should be more than 0 in same-origin redirect.");
  assert_greater_than_equal(entry.responseEnd, entry.responseStart, "responseEnd should be greater than 0 in redirects.");
  assert_greater_than_equal(entry.duration, 0, "duration should be greater than 0 in redirects.");
}

const {HTTPS_REMOTE_ORIGIN} = get_host_info();
promise_test(t => {
  return run_test(t, HTTPS_REMOTE_ORIGIN + "/fonts/Ahem.ttf");
}, "Test a font's timestamps");

promise_test(t => {
  return run_test(t, HTTPS_REMOTE_ORIGIN + "/resource-timing/resources/cors-ahem.py?pipe=trickle(d1)");
}, "Test a font's timestamps with delays");
</script>