diff --git a/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js b/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js new file mode 100644 index 00000000000000..33af2258ff3504 --- /dev/null +++ b/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js @@ -0,0 +1,2 @@ +// Forward GET parameters to the server. +import '{{GET[requestor_origin]}}/worklets/resources/referrer-checker.py?referrer_policy={{GET[referrer_policy]}}&expected_referrer={{GET[expected_referrer]}}'; diff --git a/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js.headers b/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js.headers new file mode 100644 index 00000000000000..cb762eff806849 --- /dev/null +++ b/worklets/resources/import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js.headers @@ -0,0 +1 @@ +Access-Control-Allow-Origin: * diff --git a/worklets/resources/referrer-tests.js b/worklets/resources/referrer-tests.js index 01b8e2ab57acb4..b3c4a048f5a123 100644 --- a/worklets/resources/referrer-tests.js +++ b/worklets/resources/referrer-tests.js @@ -88,6 +88,7 @@ function runReferrerTests(workletType) { // Tests for descendant script fetch ----------------------------------------- + // Referrer policy: no-referrer. promise_test(() => { return runReferrerTest({ workletType: workletType, fetchType: 'descendant', @@ -106,6 +107,15 @@ function runReferrerTests(workletType) { }, 'Importing a remote-origin script from a same-origin worklet script ' + 'that has "no-referrer" referrer policy should not send referrer.'); + promise_test(() => { + return runReferrerTest({ workletType: workletType, + fetchType: 'descendant', + referrerPolicy: 'no-referrer', + scriptOrigins: { topLevel: 'remote', + descendant: 'same' } }); + }, 'Importing a same-origin script from a remote-origin worklet script ' + + 'that has "no-referrer" referrer policy should not send referrer.'); + promise_test(() => { return runReferrerTest({ workletType: workletType, fetchType: 'descendant', @@ -115,6 +125,7 @@ function runReferrerTests(workletType) { }, 'Importing a remote-origin script from a remote-origin worklet script ' + 'that has "no-referrer" referrer policy should not send referrer.'); + // Referrer policy: origin. promise_test(() => { return runReferrerTest({ workletType: workletType, fetchType: 'descendant', @@ -133,6 +144,15 @@ function runReferrerTests(workletType) { }, 'Importing a remote-origin script from a same-origin worklet script ' + 'that has "origin" referrer policy should send referrer.'); + promise_test(() => { + return runReferrerTest({ workletType: workletType, + fetchType: 'descendant', + referrerPolicy: 'origin', + scriptOrigins: { topLevel: 'remote', + descendant: 'same' } }); + }, 'Importing a same-origin script from a remote-origin worklet script ' + + 'that has "origin" referrer policy should send referrer.'); + promise_test(() => { return runReferrerTest({ workletType: workletType, fetchType: 'descendant', @@ -142,6 +162,7 @@ function runReferrerTests(workletType) { }, 'Importing a remote-origin script from a remote-origin worklet script ' + 'that has "origin" referrer policy should send referrer.'); + // Referrer policy: same-origin. promise_test(() => { return runReferrerTest({ workletType: workletType, fetchType: 'descendant', @@ -160,6 +181,15 @@ function runReferrerTests(workletType) { }, 'Importing a remote-origin script from a same-origin worklet script ' + 'that has "same-origin" referrer policy should not send referrer.'); + promise_test(() => { + return runReferrerTest({ workletType: workletType, + fetchType: 'descendant', + referrerPolicy: 'same-origin', + scriptOrigins: { topLevel: 'remote', + descendant: 'same' } }); + }, 'Importing a same-origin script from a remote-origin worklet script ' + + 'that has "same-origin" referrer policy should send referrer.'); + promise_test(() => { return runReferrerTest({ workletType: workletType, fetchType: 'descendant', @@ -168,4 +198,6 @@ function runReferrerTests(workletType) { descendant: 'remote' } }); }, 'Importing a remote-origin script from a remote-origin worklet script ' + 'that has "same-origin" referrer policy should not send referrer.'); + + // TODO(domfarolino): Add tests for more referrer policies. } diff --git a/worklets/resources/referrer-window.html b/worklets/resources/referrer-window.html index 4817f0452a2999..934e3dc41b1cda 100644 --- a/worklets/resources/referrer-window.html +++ b/worklets/resources/referrer-window.html @@ -31,6 +31,14 @@ 'import-remote-origin-referrer-checker-worklet-script.sub.js', location.href); } + if (scriptOrigins.topLevel === 'remote' && + scriptOrigins.descendant === 'same') { + url = new URL( + get_host_info().HTTPS_REMOTE_ORIGIN + + '/worklets/resources/' + + 'import-same-origin-referrer-checker-worklet-script-from-remote-origin.sub.js'); + return url; + } if (scriptOrigins.topLevel === 'remote' && scriptOrigins.descendant === 'remote') { return new URL( @@ -88,6 +96,7 @@ } const params = new URLSearchParams; + params.append('requestor_origin', document.location.origin); params.append('referrer_policy', referrerPolicy); params.append('expected_referrer', expectedReferrer);