diff --git a/import-maps/dynamic-integrity.html b/import-maps/dynamic-integrity.html new file mode 100644 index 00000000000000..536102d76563eb --- /dev/null +++ b/import-maps/dynamic-integrity.html @@ -0,0 +1,88 @@ + + + + + + + + diff --git a/import-maps/no-referencing-script-integrity-valid.html b/import-maps/no-referencing-script-integrity-valid.html new file mode 100644 index 00000000000000..2594459fcbfbcf --- /dev/null +++ b/import-maps/no-referencing-script-integrity-valid.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + diff --git a/import-maps/no-referencing-script-integrity.html b/import-maps/no-referencing-script-integrity.html new file mode 100644 index 00000000000000..8025ba3b8993d8 --- /dev/null +++ b/import-maps/no-referencing-script-integrity.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/import-maps/nonimport-integrity.html b/import-maps/nonimport-integrity.html new file mode 100644 index 00000000000000..ab99eed97f050a --- /dev/null +++ b/import-maps/nonimport-integrity.html @@ -0,0 +1,132 @@ + + + + + + + + + diff --git a/import-maps/resources/test-helper.js b/import-maps/resources/test-helper.js index f12e84c685d548..595e5cb0a1a3fb 100644 --- a/import-maps/resources/test-helper.js +++ b/import-maps/resources/test-helper.js @@ -244,3 +244,12 @@ function doTests(importMapString, importMapBaseURL, tests) { }); }, { explicit_done: true }); } + +function assert_promise_rejecting(promise, expected) { + return promise.then(() => { + assert_unreached('Promise should have rejected'); + }).catch(error => { + assert_equals(error.name, expected.name, 'Unexpected Error Name:'); + }); +}; + diff --git a/import-maps/static-integrity.html b/import-maps/static-integrity.html new file mode 100644 index 00000000000000..d1d3649339e5b2 --- /dev/null +++ b/import-maps/static-integrity.html @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + diff --git a/service-workers/service-worker/fetch-request-resources.https.html b/service-workers/service-worker/fetch-request-resources.https.html index b4680c3ccd58d9..9524e6d4749b25 100644 --- a/service-workers/service-worker/fetch-request-resources.https.html +++ b/service-workers/service-worker/fetch-request-resources.https.html @@ -90,7 +90,67 @@ destination: 'script', message: `Script load (url:${actual_url})` }; - frame.contentWindow.load_script_with_integrity(actual_url, integrity); + frame.contentWindow.load_script_with_integrity(actual_url, integrity, /*type=*/null); + return add_promise_to_test(actual_url); +} + +function module_script_integrity_test(frame, url, integrity, expected_integrity) { + const actual_url = url + "_module"; + expected_results[actual_url] = { + url: actual_url, + mode: 'cors', + credentials: 'same-origin', + redirect: 'follow', + integrity: expected_integrity, + destination: 'script', + message: `Module Script load (url:${actual_url})` + }; + frame.contentWindow.load_script_with_integrity(actual_url, integrity, "module"); + return add_promise_to_test(actual_url); +} + +function modulepreload_integrity_test(frame, url, integrity, expected_integrity) { + const actual_url = url + "_modulepreload"; + expected_results[actual_url] = { + url: actual_url, + mode: 'cors', + credentials: 'same-origin', + redirect: 'follow', + integrity: expected_integrity, + destination: 'script', + message: `Module Script load (url:${actual_url})` + }; + frame.contentWindow.load_modulepreload_with_integrity(actual_url, integrity); + return add_promise_to_test(actual_url); +} + +function import_module_integrity_test(frame, url, expected_integrity) { + const actual_url = url + "_moduleimport"; + expected_results[actual_url] = { + url: actual_url, + mode: 'cors', + credentials: 'same-origin', + redirect: 'follow', + integrity: expected_integrity, + destination: 'script', + message: `Module Script load (url:${actual_url})` + }; + frame.contentWindow.import_modulescript(actual_url); + return add_promise_to_test(actual_url); +} + +function import_dynamic_module_integrity_test(frame, url, expected_integrity) { + const actual_url = url + "_moduleimportdynamic"; + expected_results[actual_url] = { + url: actual_url, + mode: 'cors', + credentials: 'same-origin', + redirect: 'follow', + integrity: expected_integrity, + destination: 'script', + message: `Module Script load (url:${actual_url})` + }; + frame.contentWindow.import_dynamic_modulescript(actual_url); return add_promise_to_test(actual_url); } @@ -253,6 +313,19 @@ 'sha256-foo sha384-abc '); await script_integrity_test(f, LOCAL_URL, 'sha256-foo sha256-abc', 'sha256-foo sha256-abc'); + await module_script_integrity_test(f, LOCAL_URL, + null, + 'sha384-foobar'); + + await modulepreload_integrity_test(f, LOCAL_URL, + null, + 'sha384-foobar'); + + await import_module_integrity_test(f, LOCAL_URL, + 'sha384-foobar'); + + await import_dynamic_module_integrity_test(f, LOCAL_URL, + 'sha384-foobar'); await css_integrity_test(f, LOCAL_URL, ' ', ' '); await css_integrity_test( diff --git a/service-workers/service-worker/resources/fetch-request-resources-iframe.https.html b/service-workers/service-worker/resources/fetch-request-resources-iframe.https.html index 86e9f4bb3598a5..37fc491134d0f5 100644 --- a/service-workers/service-worker/resources/fetch-request-resources-iframe.https.html +++ b/service-workers/service-worker/resources/fetch-request-resources-iframe.https.html @@ -1,5 +1,15 @@ +