summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/preload/resources/preload_helper.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/preload/resources/preload_helper.js')
-rw-r--r--testing/web-platform/tests/preload/resources/preload_helper.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/testing/web-platform/tests/preload/resources/preload_helper.js b/testing/web-platform/tests/preload/resources/preload_helper.js
new file mode 100644
index 0000000000..5b7a6eb52b
--- /dev/null
+++ b/testing/web-platform/tests/preload/resources/preload_helper.js
@@ -0,0 +1,60 @@
+function stashPutUrl(token) {
+ return `/preload/resources/stash-put.py?key=${token}`;
+}
+
+function encodedStashPutUrl(token) {
+ return encodeURIComponent(stashPutUrl(token));
+}
+
+async function hasArrivedAtServer(token) {
+ const res = await fetch(`/preload/resources/stash-take.py?key=${token}`);
+ assert_true(res.status === 200 || res.status === 404,
+ 'status must be either 200 or 404');
+ return res.status === 200;
+}
+
+function verifyPreloadAndRTSupport()
+{
+ var link = window.document.createElement("link");
+ assert_true(link.relList && link.relList.supports("preload"), "Preload not supported");
+ assert_true(!!window.PerformanceResourceTiming, "ResourceTiming not supported");
+}
+
+function getAbsoluteURL(url)
+{
+ return new URL(url, location.href).href;
+}
+
+function verifyNumberOfResourceTimingEntries(url, number)
+{
+ assert_equals(numberOfResourceTimingEntries(url), number, url);
+}
+
+function numberOfResourceTimingEntries(url)
+{
+ return performance.getEntriesByName(getAbsoluteURL(url)).length;
+}
+
+// Verifies that the resource is loaded, but not downloaded from network
+// more than once. This can be used to verify that a preloaded resource is
+// not downloaded again when used.
+function verifyLoadedAndNoDoubleDownload(url) {
+ var entries = performance.getEntriesByName(getAbsoluteURL(url));
+ // UA may create separate RT entries for preload and normal load,
+ // so we just check (entries.length > 0).
+ assert_greater_than(entries.length, 0, url + ' should be loaded');
+
+ var numDownloads = 0;
+ entries.forEach(entry => {
+ // transferSize is zero if the resource is loaded from cache.
+ if (entry.transferSize > 0) {
+ numDownloads++;
+ }
+ });
+ // numDownloads can be zero if the resource was already cached before running
+ // the test (for example, when the test is running repeatedly without
+ // clearing cache between runs).
+ assert_less_than_equal(
+ numDownloads, 1,
+ url + ' should be downloaded from network at most once');
+}