summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html')
-rw-r--r--testing/web-platform/tests/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html70
1 files changed, 70 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html b/testing/web-platform/tests/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html
new file mode 100644
index 0000000000..71a9b1c050
--- /dev/null
+++ b/testing/web-platform/tests/fetch/compression-dictionary/dictionary-fetch-with-link-element.tentative.https.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<head>
+<meta charset="utf-8">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="/common/utils.js"></script>
+<script src="./resources/compression-dictionary-util.js"></script>
+</head>
+<body>
+<script>
+
+function addLinkRelDictionaryElement(url, crossOrigin) {
+ const link = document.createElement('link');
+ link.rel = 'dictionary';
+ link.href = url;
+ if (crossOrigin) {
+ link.crossOrigin = crossOrigin;
+ }
+ document.head.appendChild(link);
+}
+
+test(t => {
+ assert_true(document.createElement('link').relList.supports('dictionary'));
+ }, "Browser supports link element with dictionary rel.");
+
+compression_dictionary_promise_test(async (t) => {
+ const dict_token = token();
+ const url = `${kRegisterDictionaryPath}?save_header=${dict_token}`;
+ addLinkRelDictionaryElement(url);
+ // Wait for a while to ensure that the dictionary is fetched.
+ await new Promise(resolve => window.requestIdleCallback(resolve));
+ const headers = await waitUntilPreviousRequestHeaders(t, dict_token);
+ assert_true(headers !== undefined, 'Headers should be available');
+ assert_equals(headers['sec-fetch-mode'], 'cors');
+ // Wait until `available-dictionary` header is available.
+ assert_equals(
+ await waitUntilAvailableDictionaryHeader(t, {}),
+ kDefaultDictionaryHashBase64);
+ // Check if the data compressed using Brotli with the dictionary can be
+ // decompressed.
+ const data_url = `${kCompressedDataPath}?content_encoding=br-d`;
+ assert_equals(await (await fetch(data_url)).text(), kExpectedCompressedData);
+}, 'Fetch same origin dictionary using link element');
+
+compression_dictionary_promise_test(async (t) => {
+ const dict_token = token();
+ const url =
+ getRemoteHostUrl(`${kRegisterDictionaryPath}?save_header=${dict_token}`);
+ addLinkRelDictionaryElement(url, 'anonymous');
+ // Wait for a while to ensure that the dictionary is fetched.
+ await new Promise(resolve => window.requestIdleCallback(resolve));
+ const headers = await waitUntilPreviousRequestHeaders(
+ t, dict_token, /*check_remote=*/ true);
+ assert_true(headers !== undefined, 'Headers should be available');
+ assert_equals(headers['sec-fetch-mode'], 'cors');
+
+ // Wait until `available-dictionary` header is available.
+ assert_equals(
+ await waitUntilAvailableDictionaryHeader(t, {check_remote: true}),
+ kDefaultDictionaryHashBase64);
+ // Check if the data compressed using Brotli with the dictionary can be
+ // decompressed.
+ const data_url =
+ getRemoteHostUrl(`${kCompressedDataPath}?content_encoding=br-d`);
+ assert_equals(await (await fetch(data_url)).text(), kExpectedCompressedData);
+}, 'Fetch cross origin dictionary using link element');
+
+</script>
+</body>