diff --git a/testing/web-platform/tests/fetch/metadata/resources/serviceworker-accessors-frame.html b/testing/web-platform/tests/fetch/metadata/resources/serviceworker-accessors-frame.html new file mode 100644 index 0000000000000..70d7faca2b417 --- /dev/null +++ b/testing/web-platform/tests/fetch/metadata/resources/serviceworker-accessors-frame.html @@ -0,0 +1,24 @@ +< +! +DOCTYPE +html +> +< +meta +charset += +" +utf +- +8 +" +> +< +title +> +Page +Title +< +/ +title +> diff --git a/testing/web-platform/tests/fetch/metadata/resources/serviceworker-accessors.sw.js b/testing/web-platform/tests/fetch/metadata/resources/serviceworker-accessors.sw.js new file mode 100644 index 0000000000000..148442efaa3fc --- /dev/null +++ b/testing/web-platform/tests/fetch/metadata/resources/serviceworker-accessors.sw.js @@ -0,0 +1,143 @@ +addEventListener +( +" +fetch +" +event += +> +{ +event +. +waitUntil +( +async +function +( +) +{ +if +( +! +event +. +clientId +) +return +; +const +client += +await +clients +. +get +( +event +. +clientId +) +; +if +( +! +client +) +return +; +client +. +postMessage +( +{ +" +dest +" +: +event +. +request +. +headers +. +get +( +" +sec +- +fetch +- +dest +" +) +" +mode +" +: +event +. +request +. +headers +. +get +( +" +sec +- +fetch +- +mode +" +) +" +site +" +: +event +. +request +. +headers +. +get +( +" +sec +- +fetch +- +site +" +) +" +user +" +: +event +. +request +. +headers +. +get +( +" +sec +- +fetch +- +user +" +) +} +) +; +} +( +) +) +; +} +) +; diff --git a/testing/web-platform/tests/fetch/metadata/serviceworker-accessors.https.sub.html b/testing/web-platform/tests/fetch/metadata/serviceworker-accessors.https.sub.html new file mode 100644 index 0000000000000..04a7cefa7124c --- /dev/null +++ b/testing/web-platform/tests/fetch/metadata/serviceworker-accessors.https.sub.html @@ -0,0 +1,392 @@ +< +! +DOCTYPE +html +> +< +! +- +- +This +test +verifies +that +Fetch +Metadata +headers +are +not +exposed +to +Service +Workers +via +the +request +' +s +headers +accessor +. +- +- +> +< +meta +charset += +" +utf +- +8 +" +/ +> +< +script +src += +/ +resources +/ +testharness +. +js +> +< +/ +script +> +< +script +src += +/ +resources +/ +testharnessreport +. +js +> +< +/ +script +> +< +script +src += +/ +fetch +/ +metadata +/ +resources +/ +helper +. +js +> +< +/ +script +> +< +script +src += +/ +service +- +workers +/ +service +- +worker +/ +resources +/ +test +- +helpers +. +sub +. +js +> +< +/ +script +> +< +script +src += +/ +common +/ +utils +. +js +> +< +/ +script +> +< +script +> +const +SCOPE += +' +resources +/ +serviceworker +- +accessors +- +frame +. +html +' +; +const +SCRIPT += +' +resources +/ +serviceworker +- +accessors +. +sw +. +js +' +; +function +assert_headers_not_seen_in_service_worker +( +frame +) +{ +return +new +Promise +( +( +resolve +reject +) += +> +{ +frame +. +contentWindow +. +fetch +( +SCOPE +{ +mode +: +' +no +- +cors +' +} +) +; +frame +. +contentWindow +. +navigator +. +serviceWorker +. +addEventListener +( +' +message +' +e += +> +{ +assert_header_equals +( +e +. +data +{ +" +dest +" +: +null +" +mode +" +: +null +" +site +" +: +null +" +user +" +: +null +} +) +; +resolve +( +) +; +} +) +; +} +) +; +} +promise_test +( +async +function +( +t +) +{ +const +reg += +await +service_worker_unregister_and_register +( +t +SCRIPT +SCOPE +) +; +t +. +add_cleanup +( +async +( +) += +> +{ +if +( +reg +) +await +reg +. +unregister +( +) +; +} +) +; +await +wait_for_state +( +t +reg +. +installing +' +activated +' +) +; +const +frame += +await +with_iframe +( +SCOPE +) +; +t +. +add_cleanup +( +async +( +) += +> +{ +if +( +frame +) +frame +. +remove +( +) +; +} +) +; +/ +/ +Trigger +a +fetch +that +will +go +through +the +service +worker +and +validate +/ +/ +the +visible +headers +. +await +assert_headers_not_seen_in_service_worker +( +frame +) +; +} +' +Sec +- +Fetch +headers +in +Service +Worker +fetch +handler +. +' +) +; +< +/ +script +>