From d12507a3736b0e5f9e27b8c80a0492268d0caa27 Mon Sep 17 00:00:00 2001 From: Marco Castelluccio Date: Thu, 3 Oct 2019 04:54:42 +0000 Subject: [PATCH] Bug 1466075 [wpt PR 11291] - Test identity encoding for range requests, a=testonly Automatic update from web-platform-testsFetch: test identity encoding for range requests For https://github.com/whatwg/fetch/pull/751. -- wpt-commits: 1421a4a976d4d8263bde4864a1ce412eba106d39 wpt-pr: 11291 UltraBlame original commit: 954f7290ff43966a30c2ab2806e6841ab3618059 --- testing/web-platform/meta/MANIFEST.json | 24 +- .../tests/fetch/range/general.any.js | 205 ++++++++++ .../tests/fetch/range/general.window.js | 292 ++++++++++++++ .../fetch/range/partial-script.window.js | 70 ---- .../tests/fetch/range/resources/long-wav.py | 178 +++++++-- .../tests/fetch/range/resources/range-sw.js | 108 ++++- .../tests/fetch/range/resources/utils.js | 75 ++++ .../tests/fetch/range/sw.https.window.js | 370 ++++++++++++++---- 8 files changed, 1144 insertions(+), 178 deletions(-) create mode 100644 testing/web-platform/tests/fetch/range/general.window.js delete mode 100644 testing/web-platform/tests/fetch/range/partial-script.window.js diff --git a/testing/web-platform/meta/MANIFEST.json b/testing/web-platform/meta/MANIFEST.json index b355d4e021101..faf9901d074f6 100644 --- a/testing/web-platform/meta/MANIFEST.json +++ b/testing/web-platform/meta/MANIFEST.json @@ -2062178,9 +2062178,7 @@ fetch / range / -partial -- -script +general . window . @@ -2062195,9 +2062193,7 @@ fetch / range / -partial -- -script +general . window . @@ -3763872,7 +3763868,7 @@ js : [ " -2c16c0398373fca53ae80aae1107868c8cdeb6b4 +ad1cdfc3bdcd8e713f27831f6f08c4213726ccfb " " testharness @@ -3763883,9 +3763879,7 @@ fetch / range / -partial -- -script +general . window . @@ -3763894,7 +3763888,7 @@ js : [ " -1352080860b8671290919ab0d09cb41f4100763e +1ce131a5aa6815d9a6bb7f4a9f2004c33d28dacd " " testharness @@ -3763936,7 +3763930,7 @@ py : [ " -a9bdaefeb4e9cefd4bb678832d7ffcbe1b3167f7 +b3e9951b240ccd97756eb6c65651223d40c78cd3 " " support @@ -3763980,7 +3763974,7 @@ js : [ " -1ec66e1dd8bf9a11b058b90e32ca7caab2233d4d +24fd34bdf1331eb908e0a2144f4c84af357c9fa3 " " support @@ -3764022,7 +3764016,7 @@ js : [ " -81cc493a76265cc64408fc2d41a67434ec99391a +fd2e57888fa9c18d46a2a4d7c9857d6cb99d087b " " support @@ -3764044,7 +3764038,7 @@ js : [ " -5bf1ebc9ce82990013831f2f7f55589e29a69bde +32cc96656190618f73951d577abe948b45abb777 " " testharness diff --git a/testing/web-platform/tests/fetch/range/general.any.js b/testing/web-platform/tests/fetch/range/general.any.js index e179a290bb7ee..b96b8e68a9afd 100644 --- a/testing/web-platform/tests/fetch/range/general.any.js +++ b/testing/web-platform/tests/fetch/range/general.any.js @@ -1,5 +1,17 @@ / / +META +: +script += +/ +common +/ +utils +. +js +/ +/ Helpers that return @@ -427,3 +439,196 @@ no cors ) ; +promise_test +( +async +( +) += +> +{ +const +wavURL += +new +URL +( +' +resources +/ +long +- +wav +. +py +' +location +) +; +const +stashTakeURL += +new +URL +( +' +resources +/ +stash +- +take +. +py +' +location +) +; +function +changeToken +( +) +{ +const +stashToken += +token +( +) +; +wavURL +. +searchParams +. +set +( +' +accept +- +encoding +- +key +' +stashToken +) +; +stashTakeURL +. +searchParams +. +set +( +' +key +' +stashToken +) +; +} +const +rangeHeaders += +[ +' +bytes += +0 +- +10 +' +' +foo += +0 +- +10 +' +' +foo +' +' +' +] +; +for +( +const +rangeHeader +of +rangeHeaders +) +{ +changeToken +( +) +; +await +fetch +( +wavURL +{ +headers +: +{ +Range +: +rangeHeader +} +} +) +; +const +response += +await +fetch +( +stashTakeURL +) +; +assert_equals +( +await +response +. +json +( +) +' +identity +' +Expect +identity +accept +- +encoding +if +range +header +is +{ +JSON +. +stringify +( +rangeHeader +) +} +) +; +} +} +Fetch +with +range +header +will +be +sent +with +Accept +- +Encoding +: +identity +) +; diff --git a/testing/web-platform/tests/fetch/range/general.window.js b/testing/web-platform/tests/fetch/range/general.window.js new file mode 100644 index 0000000000000..aa9e740e33b72 --- /dev/null +++ b/testing/web-platform/tests/fetch/range/general.window.js @@ -0,0 +1,292 @@ +/ +/ +META +: +script += +resources +/ +utils +. +js +/ +/ +META +: +script += +/ +common +/ +utils +. +js +const +onload += +new +Promise +( +r += +> +window +. +addEventListener +( +' +load +' +r +) +) +; +/ +/ +It +' +s +weird +that +browsers +do +this +but +it +should +continue +to +work +. +promise_test +( +async +t += +> +{ +await +loadScript +( +' +resources +/ +partial +- +script +. +py +? +pretend +- +offset += +90000 +' +) +; +assert_true +( +self +. +scriptExecuted +) +; +} +Script +executed +from +partial +response +) +; +promise_test +( +async +( +) += +> +{ +const +wavURL += +new +URL +( +' +resources +/ +long +- +wav +. +py +' +location +) +; +const +stashTakeURL += +new +URL +( +' +resources +/ +stash +- +take +. +py +' +location +) +; +const +stashToken += +token +( +) +; +wavURL +. +searchParams +. +set +( +' +accept +- +encoding +- +key +' +stashToken +) +; +stashTakeURL +. +searchParams +. +set +( +' +key +' +stashToken +) +; +/ +/ +The +testing +framework +waits +for +window +onload +. +If +the +audio +element +/ +/ +is +appended +before +onload +it +extends +it +and +the +test +times +out +. +await +onload +; +const +audio += +appendAudio +( +document +wavURL +) +; +await +new +Promise +( +r += +> +audio +. +addEventListener +( +' +progress +' +r +) +) +; +audio +. +remove +( +) +; +const +response += +await +fetch +( +stashTakeURL +) +; +assert_equals +( +await +response +. +json +( +) +' +identity +' +Expect +identity +accept +- +encoding +on +media +request +) +; +} +Fetch +with +range +header +will +be +sent +with +Accept +- +Encoding +: +identity +) +; diff --git a/testing/web-platform/tests/fetch/range/partial-script.window.js b/testing/web-platform/tests/fetch/range/partial-script.window.js deleted file mode 100644 index 3aa3a19dd8f8b..0000000000000 --- a/testing/web-platform/tests/fetch/range/partial-script.window.js +++ /dev/null @@ -1,70 +0,0 @@ -/ -/ -META -: -script -= -resources -/ -utils -. -js -/ -/ -It -' -s -weird -that -browsers -do -this -but -it -should -continue -to -work -. -promise_test -( -async -t -= -> -{ -await -loadScript -( -' -resources -/ -partial -- -script -. -py -? -pretend -- -offset -= -90000 -' -) -; -assert_true -( -self -. -scriptExecuted -) -; -} -Script -executed -from -partial -response -) -; diff --git a/testing/web-platform/tests/fetch/range/resources/long-wav.py b/testing/web-platform/tests/fetch/range/resources/long-wav.py index 70f15d952bda9..9c852ed1b6c88 100644 --- a/testing/web-platform/tests/fetch/range/resources/long-wav.py +++ b/testing/web-platform/tests/fetch/range/resources/long-wav.py @@ -342,6 +342,34 @@ ' ) +range_header_match += +range_header +and +re +. +search +( +r +' +^ +bytes += +( +\ +d +* +) +- +( +\ +d +* +) +' +range_header +) + range_received_key = request @@ -361,12 +389,55 @@ ' ) +accept_encoding_key += +request +. +GET +. +first +( +' +accept +- +encoding +- +key +' +' +' +) + if range_received_key and range_header : +# +Remove +any +current +value + +request +. +server +. +stash +. +take +( +range_received_key +' +/ +fetch +/ +range +/ +' +) + # This is @@ -381,6 +452,8 @@ request . +server +. stash . put @@ -402,6 +475,85 @@ ' ) +if +accept_encoding_key +: + +# +Remove +any +current +value + +request +. +server +. +stash +. +take +( + +accept_encoding_key + +' +/ +fetch +/ +range +/ +' + +) + +# +This +is +later +collected +using +stash +- +take +. +py + +request +. +server +. +stash +. +put +( + +accept_encoding_key + +request +. +headers +. +get +( +' +Accept +- +Encoding +' +' +' +) + +' +/ +fetch +/ +range +/ +' + +) + # Audio details @@ -448,7 +600,7 @@ ' if -range_header +range_header_match : response @@ -460,29 +612,7 @@ start end = -re -. -search -( -r -' -^ -bytes -= -( -\ -d -* -) -- -( -\ -d -* -) -' -range_header -) +range_header_match . groups ( diff --git a/testing/web-platform/tests/fetch/range/resources/range-sw.js b/testing/web-platform/tests/fetch/range/resources/range-sw.js index b977029cc286e..d8c491e2f16c6 100644 --- a/testing/web-platform/tests/fetch/range/resources/range-sw.js +++ b/testing/web-platform/tests/fetch/range/resources/range-sw.js @@ -196,6 +196,22 @@ event ; return ; +case +' +broadcast +- +accept +- +encoding +' +: +broadcastAcceptEncoding +( +event +) +; +return +; } } ) @@ -973,13 +989,11 @@ json ( ) ' -" range - header - received -" ' ) ; @@ -1171,3 +1185,93 @@ clone ) ; } +function +broadcastAcceptEncoding +( +event +) +{ +/ +* +* +type +Request +* +/ +const +request += +event +. +request +; +const +id += +new +URL +( +request +. +url +) +. +searchParams +. +get +( +' +id +' +) +; +broadcast +( +{ +id +acceptEncoding +: +request +. +headers +. +get +( +' +Accept +- +Encoding +' +) +} +) +; +/ +/ +Just +send +back +any +response +it +isn +' +t +important +for +the +test +. +event +. +respondWith +( +new +Response +( +' +' +) +) +; +} diff --git a/testing/web-platform/tests/fetch/range/resources/utils.js b/testing/web-platform/tests/fetch/range/resources/utils.js index f5523b89d7e1f..282fd353d9e73 100644 --- a/testing/web-platform/tests/fetch/range/resources/utils.js +++ b/testing/web-platform/tests/fetch/range/resources/utils.js @@ -85,3 +85,78 @@ script } ) } +/ +* +* +* +* +param +{ +Document +} +document +* +param +{ +string +| +URL +} +url +* +returns +{ +HTMLAudioElement +} +* +/ +function +appendAudio +( +document +url +) +{ +const +audio += +document +. +createElement +( +' +audio +' +) +; +audio +. +muted += +true +; +audio +. +src += +url +; +audio +. +preload += +true +; +document +. +body +. +appendChild +( +audio +) +; +return +audio +; +} diff --git a/testing/web-platform/tests/fetch/range/sw.https.window.js b/testing/web-platform/tests/fetch/range/sw.https.window.js index 231d90b0c60f1..24a6505b81a6f 100644 --- a/testing/web-platform/tests/fetch/range/sw.https.window.js +++ b/testing/web-platform/tests/fetch/range/sw.https.window.js @@ -81,7 +81,7 @@ get_host_info ) ; const -SCOPE +BASE_SCOPE = ' resources @@ -89,61 +89,9 @@ resources basic . html +? ' -+ -Math -. -random -( -) -; -function -appendAudio -( -document -url -) -{ -const -audio -= -document -. -createElement -( -' -audio -' -) -; -audio -. -muted -= -true -; -audio -. -src -= -url -; -audio -. -preload -= -true -; -document -. -body -. -appendChild -( -audio -) ; -} async function cleanup @@ -178,23 +126,21 @@ iframe ) ; } +for +( const reg -= +of await navigator . serviceWorker . -getRegistration +getRegistrations ( -SCOPE ) -; -if -( -reg ) +{ await reg . @@ -203,11 +149,13 @@ unregister ) ; } +} async function setupRegistration ( t +scope ) { await @@ -236,8 +184,6 @@ js ' { scope -: -SCOPE } ) ; @@ -311,6 +257,9 @@ listener ; resolve ( +event +. +data ) ; } @@ -328,12 +277,24 @@ t > { const +scope += +BASE_SCOPE ++ +Math +. +random +( +) +; +const reg = await setupRegistration ( t +scope ) ; const @@ -342,7 +303,7 @@ iframe await with_iframe ( -SCOPE +scope ) ; const @@ -444,12 +405,24 @@ t > { const +scope += +BASE_SCOPE ++ +Math +. +random +( +) +; +const reg = await setupRegistration ( t +scope ) ; const @@ -458,7 +431,7 @@ iframe await with_iframe ( -SCOPE +scope ) ; const @@ -587,10 +560,22 @@ t = > { +const +scope += +BASE_SCOPE ++ +Math +. +random +( +) +; await setupRegistration ( t +scope ) ; const @@ -599,7 +584,7 @@ iframe await with_iframe ( -SCOPE +scope ) ; const @@ -863,10 +848,22 @@ t = > { +const +scope += +BASE_SCOPE ++ +Math +. +random +( +) +; await setupRegistration ( t +scope ) ; const @@ -875,7 +872,7 @@ iframe await with_iframe ( -SCOPE +scope ) ; const @@ -1071,3 +1068,242 @@ response executed ) ; +promise_test +( +async +t += +> +{ +const +scope += +BASE_SCOPE ++ +Math +. +random +( +) +; +await +setupRegistration +( +t +scope +) +; +const +iframe += +await +with_iframe +( +scope +) +; +const +w += +iframe +. +contentWindow +; +const +fetchId += +Math +. +random +( +) ++ +' +' +; +const +fetchBroadcast += +awaitMessage +( +w +. +navigator +. +serviceWorker +fetchId +) +; +const +audioId += +Math +. +random +( +) ++ +' +' +; +const +audioBroadcast += +awaitMessage +( +w +. +navigator +. +serviceWorker +audioId +) +; +const +url += +new +URL +( +' +long +- +wav +. +py +' +w +. +location +) +; +url +. +searchParams +. +set +( +' +action +' +' +broadcast +- +accept +- +encoding +' +) +; +url +. +searchParams +. +set +( +' +id +' +fetchId +) +; +await +w +. +fetch +( +url +{ +headers +: +{ +Range +: +' +bytes += +0 +- +10 +' +} +} +) +; +assert_equals +( +( +await +fetchBroadcast +) +. +acceptEncoding +null +" +Accept +- +Encoding +should +not +be +set +for +fetch +" +) +; +url +. +searchParams +. +set +( +' +id +' +audioId +) +; +appendAudio +( +w +. +document +url +) +; +assert_equals +( +( +await +audioBroadcast +) +. +acceptEncoding +null +" +Accept +- +Encoding +should +not +be +set +for +media +" +) +; +} +Accept +- +Encoding +should +not +appear +in +a +service +worker +) +;