Test modulepreload in link header (#34328)
diff --git a/preload/link-header-modulepreload.html b/preload/link-header-modulepreload.html
new file mode 100644
index 0000000..fd759f6
--- /dev/null
+++ b/preload/link-header-modulepreload.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Makes sure that Link headers support modulepreload</title>
+<meta name="timeout" content="long">
+<script src="/common/utils.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/preload/resources/preload_helper.js"></script>
+<body>
+<script>
+ promise_test(async t => {
+ const id = token();
+ const moduleLink = getAbsoluteURL('./resources/module1.js');
+ const params = new URLSearchParams();
+ params.set('link', `<${moduleLink}>;rel=modulepreload`);
+ params.set('type', 'text/html');
+ params.set('file', 'modulepreload-iframe.html')
+ const docURL = getAbsoluteURL(`./resources/echo-preload-header.py?${params.toString()}`);
+ const iframe = document.createElement('iframe');
+ t.add_cleanup(() => iframe.remove());
+ iframe.src = docURL;
+ const messageReceived = new Promise(resolve => window.addEventListener('message', m => {
+ resolve(m.data);
+ }))
+ document.body.appendChild(iframe);
+ const result = await messageReceived;
+ assert_equals(result, 1);
+ }, 'test that a header-preloaded module is loaded and consumed');
+</script>
+</body>
diff --git a/preload/resources/modulepreload-iframe.html b/preload/resources/modulepreload-iframe.html
new file mode 100644
index 0000000..1d3d21f
--- /dev/null
+++ b/preload/resources/modulepreload-iframe.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<body>
+ <script>
+ const m = new URL('module1.js', location.href).toString();
+ const observer = new PerformanceObserver(l => {
+ const entries = l.getEntriesByName(m);
+ if (entries.length === 1) {
+ import(m).then(() => {
+ observer.disconnect();
+ const all = performance.getEntriesByName(m);
+ window.parent.postMessage(all.length, '*');
+ });
+ }
+ });
+
+ observer.observe({type: 'resource', buffered: true});
+
+
+ </script>
+</body>
\ No newline at end of file